1、lcd1602 程序 作者:佚名 文章来源:internet 点击数: 233 更新时间:2006-7-7 #include#define uchar unsigned char#define uint unsigned intsbit LCM_RW=P26; /定义引脚sbit LCM_RS=P27;sbit LCM_E=P25;#define LCM_Data P0#define Busy 0x80 /用于检测 LCM状态字中的 Busy标识 void WriteDataLCM(unsigned char WDLCM);void WriteCommandLCM(unsigned char
2、WCLCM,BuysC);unsigned char ReadDataLCM(void);unsigned char ReadStatusLCM(void);void LCMInit(void);void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);void Delay5Ms(void);void Delay400Ms(void);uns
3、igned char code cdle_net = ““;unsigned char code email = ;void main(void)Delay400Ms(); /启动等待,等 LCM讲入工作状态LCMInit(); /LCM初始化Delay5Ms(); /延时片刻(可不要)DisplayListChar(0, 0, cdle_net);DisplayListChar(0, 1, email);while(1);/写数据void WriteDataLCM(unsigned char WDLCM)ReadStatusLCM(); /检测忙LCM_Data = WDLCM;LCM_RS
4、 = 1;LCM_RW = 0;LCM_E = 0; /若晶振速度太高可以在这后加小的延时LCM_E = 0; /延时LCM_E = 1;/写指令void WriteCommandLCM(unsigned char WCLCM,BuysC) /BuysC为 0时忽略忙检测if (BuysC) ReadStatusLCM(); /根据需要检测忙LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0; LCM_E = 0;LCM_E = 0;LCM_E = 1; /读数据unsigned char ReadDataLCM(void)LCM_RS = 1; LCM_RW = 1
5、;LCM_E = 0;LCM_E = 0;LCM_E = 1;return(LCM_Data);/读状态unsigned char ReadStatusLCM(void)LCM_Data = 0xFF; LCM_RS=0;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;while (LCM_Data /检测忙信号return(LCM_Data);void LCMInit(void) /LCM初始化LCM_Data = 0;WriteCommandLCM(0x38,0); /三次显示模式设置,不检测忙信号Delay5Ms(); WriteCommandLCM(0
6、x38,0);Delay5Ms(); WriteCommandLCM(0x38,0);Delay5Ms(); WriteCommandLCM(0x38,1); /显示模式设置,开始要求每次检测忙信号WriteCommandLCM(0x08,1); /关闭显示WriteCommandLCM(0x01,1); /显示清屏WriteCommandLCM(0x06,1); / 显示光标移动设置WriteCommandLCM(0x0C,1); / 显示开及光标设置/按指定位置显示一个字符void DisplayOneChar(unsigned char X, unsigned char Y, unsig
7、ned char DData)Y X /限制 X不能大于 15,Y 不能大于 1if (Y) X |= 0x40; /当要显示第二行时地址码+0x40;X |= 0x80; /算出指令码WriteCommandLCM(X, 0); /这里不检测忙信号,发送地址码WriteDataLCM(DData);/按指定位置显示一串字符void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)unsigned char ListLength;ListLength = 0;Y X /限制 X不能大于 15
8、,Y 不能大于 1while (DDataListLength0x20) /若到达字串尾则退出if (X = 0xF) /X坐标应小于 0xFDisplayOneChar(X, Y, DDataListLength); /显示单个字符ListLength+;X+;/5ms延时void Delay5Ms(void)unsigned int TempCyc = 5552;while(TempCyc-);/400ms延时void Delay400Ms(void)unsigned char TempCycA = 5;unsigned int TempCycB;while(TempCycA-)TempCycB=7269;while(TempCycB-);