您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于51单片机的LCD1602简单数字时钟
原理图:源程序:/***************************************************************标题:LCD1602时钟效果:在LCD1602屏上显示时分秒,能调节时间作者:皖绩小挺说明:RS:P1.0RW:P1.1E:P1.3数据端口:P0key1:P3.7key2:P3.6key3:P3.5key4:P3.6key5;P3.3******************************************************************/#includereg52.h#defineucharunsignedchar//宏定义#defineuintunsignedintsbitlcdrs=P1^0;//定义LCD1602端口sbitlcdrw=P1^1;sbitlcden=P1^2;sbitkey1=P3^7;//定义按键端口sbitkey2=P3^6;sbitkey3=P3^5;sbitkey4=P3^4;sbitkey5=P3^3;uchartt;//设置全局变量ucharhour,minute,second;uchartable[]=HELLOWORLD;//第一行字符(11个)uchartable1[]=00:00:00;//第二行字符(8个)/*******************************************************延时函数*******************************************************/voiddelay(uintz)//delay(1)约1ms{uintx,y;for(x=z;x0;x--)for(y=110;y0;y--);}/*******************************************************LCD1602写命令*******************************************************/voidwrite_lcdcom(ucharlcd_com){lcdrs=0;//rs低电平为选择指令寄存器lcdrw=0;//rw低电平进行写操作P0=lcd_com;delay(5);lcden=1;delay(5);lcden=0;}/*******************************************************LCD1602写数据*******************************************************/voidwrite_lcddata(ucharlcd_data){lcdrs=1;//rs高电平为选择数据寄存器lcdrw=0;P0=lcd_data;delay(5);lcden=1;delay(5);lcden=0;}/*******************************************************LCD1602读命令*******************************************************/voidread_lcdcom(ucharlcd_com){lcdrs=0;lcdrw=1;//rw高电平进行读操作P0=lcd_com;delay(5);lcden=1;delay(5);lcden=0;}/*******************************************************LCD1602读数据*******************************************************/voidread_lcddata(ucharlcd_data){lcdrs=1;lcdrw=1;P0=lcd_data;delay(5);lcden=1;delay(5);lcden=0;}/*******************************************************系统初始化*******************************************************/voidlcdinit(){uchari;lcden=0;write_lcdcom(0x01);//清屏delay(5);write_lcdcom(0x38);//4位,双行显示,5X7点阵delay(5);write_lcdcom(0x06);//光标右移,不整屏移动delay(5);write_lcdcom(0x0c);//显示屏幕,光标不显示delay(5);hour=0;//赋系统时间初值minute=0;second=0;key1=1;key2=1;key3=1;key4=1;key5=1;write_lcdcom(0x80+2);//显示第一行for(i=0;i11;i++){write_lcddata(table[i]);//delay(5);}write_lcdcom(0x80+0x44);//显示第二行for(i=0;i8;i++){write_lcddata(table1[i]);//delay(5);}TMOD=0x01;//定时器0,方式1TH0=(65536-50000)/256;//定时器初值TL0=(65536-50000)%256;EA=1;//开总中断ET0=1;//开定时器0中断TR0=1;//开启定时器0}/***********************************************************************写入时间***********************************************************************/voidwrite_hms(ucharadd,uchartime){ucharshi,ge;shi=time/10;//取时间高位ge=time%10;write_lcdcom(0x80+0x40+add);//写入指令,显示位置write_lcddata(0x30+shi);//写入数据,显示内容,利用液晶屏内部字符发生write_lcddata(0x30+ge);//存储器(CGROM),直接写入需要显示字符的地址//'0'的地址就是0x30}/*****************************************************************定时器************************************************************************/voidt0()interrupt1{TH0=(65536-50000)/256;//重载初值TL0=(65536-50000)%256;tt++;//每50ms,tt加1if(tt==20){tt=0;second++;if(second==60){second=0;minute++;if(minute==60){minute=0;hour++;if(hour==24){hour=0;}write_hms(4,hour);}write_hms(7,minute);}write_hms(10,second);}}/**************************************************************时间调整***************************************************************/voidkeyscan(){if(key1==0)//小时加1{delay(5);if(key1==0){TR0=0;hour++;if(hour==24)hour=0;write_hms(4,hour);delay(200);//使得调整的时候清晰可见,以免每按一次变化太大TR0=1;}}if(key2==0)//小时减1{delay(5);if(key2==0){TR0=0;hour--;if(hour24)//当减到00时再减的数不是0,而是一个大于24的数(好像是0xf5)hour=23;write_hms(4,hour);delay(200);TR0=1;}}if(key3==0)//分钟加1{delay(5);if(key3==0){TR0=0;minute++;if(minute==60)minute=0;write_hms(7,minute);delay(200);TR0=1;}}if(key4==0)//分钟减1{delay(5);if(key4==0){TR0=0;minute--;if(minute24)minute=59;write_hms(7,minute);delay(200);TR0=1;}}if(key5==0)//秒钟清零{delay(5);if(key5==0){TR0=0;second=0;write_hms(10,second);TR0=1;}}}/*******************************************************主函数*******************************************************/voidmain(void){lcdinit();//调用系统初始化程序while(1){keyscan();}}
本文标题:基于51单片机的LCD1602简单数字时钟
链接地址:https://www.777doc.com/doc-2567806 .html