基于51单片机控制的1602液晶电子时钟显示程序.doc

上传人:scccc 文档编号:12023303 上传时间:2021-12-01 格式:DOC 页数:14 大小:31.50KB
返回 下载 相关 举报
基于51单片机控制的1602液晶电子时钟显示程序.doc_第1页
第1页 / 共14页
基于51单片机控制的1602液晶电子时钟显示程序.doc_第2页
第2页 / 共14页
基于51单片机控制的1602液晶电子时钟显示程序.doc_第3页
第3页 / 共14页
基于51单片机控制的1602液晶电子时钟显示程序.doc_第4页
第4页 / 共14页
基于51单片机控制的1602液晶电子时钟显示程序.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《基于51单片机控制的1602液晶电子时钟显示程序.doc》由会员分享,可在线阅读,更多相关《基于51单片机控制的1602液晶电子时钟显示程序.doc(14页珍藏版)》请在三一文库上搜索。

1、基于51单片机控制的1602液晶电子时钟显示程序 2007-05-31 13:31:45 | By: kevin 刚写好的基于51单片机控制的1602液晶电子时钟显示程序,整理了一下,并尽量加上的注释,放出来大家共享及交流。有兴趣的可以参考一下,各管脚定义都比较明显,有一定基础的可稍作修改即可进行实验。/基于51单片机控制的1602液晶电子时钟显示程序i nclude <intrins.h>i nclude <at89x51.h>#define uchar unsigned char#define LCM_RS  P2_2 /定义引脚#define LCM_R

2、W  P2_1#define LCM_E   P2_0#define LCM_Data  P0#define Busy    0x80 /用于检测LCM状态字中的Busy标识uchar i, j, k, second, tcount, minute, hour;void WriteDataLCM(unsigned char WDLCM);void WriteCommandLCM(unsigned char WCLCM,BuysC);unsigned char ReadDataLCM(void);unsigned char R

3、eadStatusLCM(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 DisplayqListChar(unsigned char X, unsigned char Y, unsigned char code *DData);void Delay5Ms(void);vo

4、id Delay400Ms(void);unsigned char code table='0','1','2','3','4','5','6','7','8','9'/数码管数字编码unsigned char code MyNo = "NAME:Who_am_I?"/*  函数名称:delay()*  功能描述:延时子程序,大约延时 n MS*  输  入:*  输

5、  出:*  全局变量:*  调用模块:*  作者:   kevin   *  日期:   2007年5月31日*/delay(uchar n)uchar i,j,k; for(i=2;i>0;i-) for(j=n;j>0;j-)  for(k=125;k>0;k-);推荐精选/*  函数名称:lcd()*  功能描述:液晶初始化,然后在液晶屏第二行显示提示信息*  输  入:*  输&

6、#160; 出:*  全局变量:*  调用模块:Delay400Ms(),LCMInit(),DisplayListChar()*  作者:   kevin  *  日期:   2007年5月31日*/void lcd(void) Delay400Ms(); /启动等待,等LCM讲入工作状态 LCMInit(); /LCM初始化 Delay5Ms(); /延时片刻(可不要) DisplayListChar(0, 1, MyNo);/*  函数名称:Writ

7、eDataLCM()*  功能描述:写数据*  输  入:  WDLCM*  输  出:*  全局变量:*  调用模块:*  作者:   kevin   *  日期:   2007年5月31日*/void WriteDataLCM(unsigned char WDLCM) ReadStatusLCM(); /检测忙 LCM_Data = WDLCM; LCM_RS = 1; LCM_RW = 0;

8、 LCM_E = 0; /若晶振速度太高可以在这后加小的延时 LCM_E = 0; /延时 LCM_E = 1;推荐精选/*  函数名称:WriteCommandLCM()*  功能描述:写指令*  输  入:*  输  出:*  全局变量:*  调用模块:*  作者:   kevin   *  日期:   2007年5月31日*/void WriteCommandLCM(unsigned char WCL

9、CM,BuysC) /BuysC为0时忽略忙检测 if (BuysC) ReadStatusLCM(); /根据需要检测忙 LCM_Data = WCLCM; LCM_RS = 0; LCM_RW = 0; LCM_E = 0; LCM_E = 0; LCM_E = 1;/*  函数名称:ReadDataLCM()*  功能描述:读数据*  输  入:*  输  出:*  全局变量:*  调用模块:*  作者:  

10、kevin   *  日期:   2007年5月31日*/unsigned char ReadDataLCM(void) LCM_RS = 1; LCM_RW = 1; LCM_E = 0; LCM_E = 0; LCM_E = 1; return(LCM_Data);推荐精选/*  函数名称:ReadStatusLCM()*  功能描述:读状态*  输  入:*  输  出:*  全局变量:*  调用模块

11、:*  作者:   kevin   *  日期:   2007年5月31日*/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 & Busy); /检测忙信号 return(LCM_Data);/*  函数名称:LCMIni

12、t()*  功能描述:LCM初始化*  输  入:*  输  出:*  全局变量:*  调用模块:*  作者:   kevin   *  日期:   2007年5月31日*/void LCMInit(void) LCM_Data = 0; WriteCommandLCM(0x38,0); /三次显示模式设置,不检测忙信号 Delay5Ms(); WriteCommandLCM(0x38,0); D

13、elay5Ms(); WriteCommandLCM(0x38,0); Delay5Ms();推荐精选 WriteCommandLCM(0x38,1); /显示模式设置,开始要求每次检测忙信号 WriteCommandLCM(0x08,1); /关闭显示 WriteCommandLCM(0x01,1); /显示清屏 WriteCommandLCM(0x06,1); / 显示光标移动设置 WriteCommandLCM(0x0C,1); / 显示开及光标设置/*  函数名称:DisplayOneChar()*

14、0; 功能描述:按指定位置显示一个字符*  输  入:*  输  出:*  全局变量:*  调用模块:*  作者:   kevin   *  日期:   2007年5月31日*/void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) Y &= 0x1; X &= 0xF; /限制X不能大于15,Y不能大于1 if (Y

15、) X |= 0x40; /当要显示第二行时地址码+0x40; X |= 0x80; / 算出指令码 WriteCommandLCM(X, 0); /这里不检测忙信号,发送地址码 WriteDataLCM(DData);推荐精选/*  函数名称:DisplayListChar()*  功能描述:按指定位置显示一串字符*  输  入:*  输  出:*  全局变量:*  调用模块:*  作者:   kevin   *  日期:&

16、#160;  2007年5月31日*/void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) unsigned char ListLength;  ListLength = 0; Y &= 0x1; X &= 0xF; /限制X不能大于15,Y不能大于1 while (DDataListLength>0x20) /若到达字串尾则退出     if (X <= 0xF) /

17、X坐标应小于0xF         DisplayOneChar(X, Y, DDataListLength); /显示单个字符     ListLength+;     X+;      /*  函数名称:Delay5Ms()*  功能描述:5ms延时*  输  入:*  输  出:*  全局变量:*  调用模块:* 

18、; 作者:   kevin   *  日期:   2007年5月31日*/void Delay5Ms(void) unsigned int TempCyc = 5552; while(TempCyc-);推荐精选/*  函数名称:Delay400Ms()*  功能描述:400ms延时*  输  入:*  输  出:*  全局变量:*  调用模块:*  作者:   kevin  

19、 *  日期:   2007年5月31日*/void Delay400Ms(void) unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA-)   TempCycB=7269;  while(TempCycB-); /*  函数名称:timer0()*  功能描述:中断子程序,1秒重写一次液晶,以此实现60秒计数*  输  入:*  输  出:* 

20、 全局变量:*  调用模块:*  作者:   kevin   *  日期:   2007年5月31日*/void timer0() interrupt 1 using 0int i; TH0=(65536-50000)/256*3;           /中断设置初始化           

21、;         TL0=(65536-50000)%256*3;        tcount+;                            if(tcount=60

22、)              /满1秒 i=0;  DisplayOneChar(i+, 0, 'T');   /在第1行第1个坐标显示  DisplayOneChar(i+, 0, 'I');   /在第1行第2个坐标显示  DisplayOneChar(i+, 0, 'M');   /在第1行第3个坐标显示  Dis

23、playOneChar(i+, 0, 'E');   /在第1行第4个坐标显示  DisplayOneChar(i+, 0, ':');   /在第1行第5个坐标显示  DisplayOneChar(i+, 0, tablehour/10);   /在第1行第6个坐标显示  DisplayOneChar(i+, 0, tablehour%10);   /在第1行第7个坐标显示  DisplayOneChar(i+, 0, ':'

24、);   /在第1行第1个坐标显示  DisplayOneChar(i+, 0, tableminute/10);   /在第1行第8个坐标显示  DisplayOneChar(i+, 0, tableminute%10);   /在第1行第9个坐标显示  DisplayOneChar(i+, 0, ':');   /在第1行第10个坐标显示  DisplayOneChar(i+, 0, tablesecond/10);   /在第1行第1

25、1个坐标显示  DisplayOneChar(i+, 0, tablesecond%10);   /在第1行第12个坐标显示  tcount=0;second+;  if(second=60)             /满1分    second=0;minute+;      /分数加1,秒数归零    if(minute=6

26、0)         /满1小时         minute=0;hour+;     /小时数加1,分数归零   if(hour=24)     hour=0;          推荐精选/*  函数名称:main()*  功能描述:主程序,设置初始时间,中断设置初

27、始化,液晶显示,等待中断*  输  入:*  输  出:*  全局变量:*  调用模块:*  作者:   kevin   *  日期:   2007年5月31日*/void main()uchar i; second=0;minute=0;hour=0;    /设置初始时间 TH0=(65536-50000)/256;       &#

28、160;   /中断设置初始化                    TL0=(65536-50000)%256;    EA=1;ET0=1;TMOD=0x21;TR0=1;  lcd();  i=0;  DisplayOneChar(i+, 0, 'T');   /在第1行第1个坐标显示&

29、#160; DisplayOneChar(i+, 0, 'I');   /在第1行第2个坐标显示  DisplayOneChar(i+, 0, 'M');   /在第1行第3个坐标显示  DisplayOneChar(i+, 0, 'E');   /在第1行第4个坐标显示  DisplayOneChar(i+, 0, ':');   /在第1行第5个坐标显示  DisplayOneChar(i+, 0, tabl

30、ehour/10);   /在第1行第6个坐标显示  DisplayOneChar(i+, 0, tablehour%10);   /在第1行第7个坐标显示  DisplayOneChar(i+, 0, ':');   /在第1行第1个坐标显示  DisplayOneChar(i+, 0, tableminute/10);   /在第1行第8个坐标显示  DisplayOneChar(i+, 0, tableminute%10);   /在

31、第1行第9个坐标显示  DisplayOneChar(i+, 0, ':');   /在第1行第10个坐标显示  DisplayOneChar(i+, 0, tablesecond/10);   /在第1行第11个坐标显示  DisplayOneChar(i+, 0, tablesecond%10);   /在第1行第12个坐标显示   while(1);                       /等待中断 (注:可编辑下载,若有不当之处,请指正,谢谢!) 推荐精选

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1