LCD1602快速显示程序附真实序列图Word文档下载推荐.docx
- 文档编号:21089327
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:12
- 大小:886.50KB
LCD1602快速显示程序附真实序列图Word文档下载推荐.docx
《LCD1602快速显示程序附真实序列图Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《LCD1602快速显示程序附真实序列图Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
typedefsignedcharsint8;
typedefunsignedshortuint16;
typedefsignedshortsint16;
typedefunsignedlonguint32;
typedefsignedlongsint32;
/*
*函数名称:
LCD_WriteCMD
*功能描述:
写单个命令
*输入参数:
CMD命令字节,低7位有效
*输出参数:
无
*返回值:
0执行成功,-1执行失败
*其它说明:
*修改日期修改人修改内容
*-----------------------------------------------
*XXXX-XX-XXXXXXXXXX
*/
sint8LCD_WriteCMD(uint8CMD);
LCD_SetPos
设置显示位置
XPos行位置1,2;
YPos列位置,1~16
*0x00----------------0x0f0x10-------0x27第一行(一次显示16个字符)
*0x40----------------0x4f0x50-------0x67第二行
sint8LCD_SetPos(uint8XPos,uint8YPos);
LCD_WriteByte
写入单个字节显示数据
Byte待写入字节数据
sint8LCD_WriteByte(uint8Byte);
LCD_DispChar
指定位置显示单个字符
*ch待显示字符
0执行成功,<
0执行失败
当行或列位置不合法时,不设置显示位置,直接在当前光标处显示
sint8LCD_DispChar(uint8XPos,uint8YPos,charch);
LCD_DispString
指定位置显示字符串
*pStr待显示字符串首地址
sint8LCD_DispString(uint8XPos,uint8YPos,constchar*pStr);
LCD_Init
初始化LCD1602
8位数据总线模式、5*7点阵字符、AC自增、屏不移动、光标不显示、不闪烁
*常用命令:
0x38:
16*2显示,5*7点阵显示字符,8位数据;
指令执行时间40us
*0x0C:
开显示,关光标40us
*0x08:
关显示,关光标40us
*0x06:
写完数据自动右移光标,普通情形,从左向右显示40us
*0x04:
写完数据自动左移光标,可以从右向左显示40us
*0x01:
清除显示内容,即清屏1.64ms
*0x02:
使光标还回起始位置1.64ms
*0x18:
屏幕上所有字符同时左移一格,适合滚动显示40us
*0x1C:
屏幕上所有字符同时右移一格,适合滚动显示40us
sint8LCD_Init(void);
#endif/*endLCD1602_H*/
#include<
reg52.h>
intrins.h>
#include"
LCD1602.h"
/*LCD1602引脚定义*/
#defineLCD_CTRLP2/*LCD控制口*/
#defineEN0x80/*P2.7*/
#defineRS0x40/*P2.6*/
#defineRW0x20/*P2.5*/
#defineLCD_DATAP0/*LCD数据口*/
#defineLCD_DATAIN_SETLCD_DATA=0xFF/*数据口输入设置宏*/
/*控制线置位与复位带参宏定义*/
#defineSET(X)LCD_CTRL|=(X)
#defineRESET(X)LCD_CTRL&
=~(X)
/*读取LCD忙状态BFbit7*/
#defineLCD_STATELCD_DATA&
0x80
/*延时1us宏定义*/
#defineNOP()_nop_()
/*
*延时N毫秒
staticvoidDelayNms(intN)
{
inti=0;
while(N--)
{
for(i=0;
i<
75;
i++)
{}
}
}
/*等待LCD空闲,BF=0*/
staticvoidLCD_WaitIdle(void)
uint8State=0;
/*读BF时序建立*/
RESET(RS);
SET(RW);
SET(EN);
/*设置BF对应引脚为输入*/
LCD_DATAIN_SET;
/*等待BF=0,LCD空闲*/
while((State=LCD_STATE)!
=0);
/*拉低LCD使能*/
RESET(EN);
/*写一个字节命令*/
sint8LCD_WriteCMD(uint8CMD)
/*若为无效命令,则直接返回*/
if((CMD&
0x3F)==0)
return-1;
LCD_DATA=CMD;
RESET(RW);
/*产生下降沿,启动写入操作*/
LCD_WaitIdle();
/*等待LCD空闲*/
return0;
/*设置显示位置*/
sint8LCD_SetPos(uint8XPos,uint8YPos)
uint8Pos=0;
if((XPos!
=1)&
&
(XPos!
=2))/*判断行坐标是否合法*/
if(YPos>
40)/*每行有40个地址*/
if(XPos==1)/*第一行*/
Pos=0x00+YPos-1;
else/*第二行*/
Pos=0x40+YPos-1;
LCD_DATA=Pos|0x80;
/*产生下降沿*/
/*写入一个字节数据*/
sint8LCD_WriteByte(uint8Byte)
if(Byte==0)
LCD_DATA=Byte;
SET(RS);
/*指定位置显示一个字符*/
sint8LCD_DispChar(uint8XPos,uint8YPos,charch)
sint8ret=0;
ret+=LCD_SetPos(XPos,YPos);
ret+=LCD_WriteByte((uint8)ch);
returnret;
/*指定位置显示一个字符串*/
sint8LCD_DispString(uint8XPos,uint8YPos,constchar*pStr)
sint8Cnt=0;
/*逐个显示字符,最多可以显示41-YPos个字符(含超出一屏的内容)
例:
YPos=1,则Cnt范围为0~39*/
while((pStr[Cnt]!
='
\0'
)&
(Cnt<
=40-YPos))
ret+=LCD_WriteByte((uint8)pStr[Cnt]);
Cnt++;
if(Cnt+YPos>
40)/*字符串过长!
!
ret=-1;
/*LCD1602初始化*/
sint8LCD_Init(void)
/*上电等待LCD硬件自动复位完成,不少于10ms*/
DelayNms(10);
/*关显示*/
LCD_WriteCMD(0x08);
/*功能设置,两行显示、5*7点阵字体、8位数据总线*/
LCD_WriteCMD(0x38);
/*设置输入模式,AC自动加1,显示不移位,光标自动移位*/
LCD_WriteCMD(0x06);
/*开显示,关光标,关闪烁*/
LCD_WriteCMD(0x0C);
/*清显示,清除DDRAM,光标归位*/
LCD_WriteCMD(0x01);
*文件名称:
main.c
*LCD1602模块测试程序
/*延时N个10us*/
staticvoidDelayN10us(uint16N)
while(N--);
intmain()
LCD_Init();
while
(1)
LCD_DispString(2,2,"
Welcome!
!
"
);
DelayN10us(65535);
Hello!
//DelayN10us(65535);
写清屏命令0x01序列图:
写模式设置命令0x38序列图:
写显示地址序列图:
写一字节数据序列图:
注:
以上序列图为本人亲测!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LCD1602 快速 显示 程序 真实 序列