基于51单片机的LCD1602简单数字时钟(共7页).docx
-
资源ID:13966199
资源大小:95.63KB
全文页数:7页
- 资源格式: DOCX
下载积分:20金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
基于51单片机的LCD1602简单数字时钟(共7页).docx
精选优质文档-倾情为你奉上原理图:源程序:/*标题:LCD1602时钟效果:在LCD1602屏上显示时分秒,能调节时间作者:皖绩小挺说明:RS:P1.0 RW:P1.1 E:P1.3 数据端口:P0 key1:P3.7 key2:P3.6 key3:P3.5 key4:P3.6 key5;P3.3 */#include<reg52.h>#define uchar unsigned char /宏定义#define uint unsigned intsbit lcdrs=P10; /定义LCD1602端口sbit lcdrw=P11;sbit lcden=P12;sbit key1=P37; /定义按键端口sbit key2=P36;sbit key3=P35;sbit key4=P34;sbit key5=P33;uchar tt;/设置全局变量uchar hour,minute,second;uchar table="HELLO WORLD" ; /第一行字符(11个)uchar table1="00:00:00"/第二行字符(8个)/* 延时函数*/void delay(uint z)/delay(1)约1ms uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);/* LCD1602写命令*/void write_lcdcom(uchar lcd_com) lcdrs=0; /rs低电平为选择指令寄存器lcdrw=0; /rw低电平进行写操作P0=lcd_com; delay(5);lcden=1;delay(5);lcden=0;/*LCD1602写数据*/void write_lcddata(uchar lcd_data) lcdrs=1; /rs高电平为选择数据寄存器lcdrw=0;P0=lcd_data;delay(5);lcden=1;delay(5);lcden=0;/* LCD1602读命令*/void read_lcdcom(uchar lcd_com) lcdrs=0;lcdrw=1; /rw高电平进行读操作P0=lcd_com;delay(5);lcden=1;delay(5);lcden=0;/* LCD1602读数据*/void read_lcddata(uchar lcd_data) lcdrs=1;lcdrw=1;P0=lcd_data;delay(5);lcden=1;delay(5);lcden=0;/* 系统初始化*/void lcdinit() uchar i;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;i<11;i+)write_lcddata(tablei);/delay(5);write_lcdcom(0x80+0x44);/显示第二行for(i=0;i<8;i+)write_lcddata(table1i);/delay(5);TMOD=0x01; /定时器0,方式1TH0=(65536-50000)/256; /定时器初值TL0=(65536-50000)%256;EA=1; /开总中断ET0=1; /开定时器0中断TR0=1; /开启定时器0/* 写入时间*/void write_hms(uchar add,uchar time)uchar shi,ge;shi=time/10;/取时间高位ge=time%10;write_lcdcom(0x80+0x40+add); /写入指令,显示位置write_lcddata(0x30+shi);/写入数据,显示内容,利用液晶屏内部字符发生write_lcddata(0x30+ge);/存储器(CGROM),直接写入需要显示字符的地址/'0'的地址就是0x30/* 定时器*/void t0() interrupt 1TH0=(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);/* 时间调整*/void keyscan()if(key1=0) /小时加1delay(5);if(key1=0)TR0=0;hour+;if(hour=24)hour=0;write_hms(4,hour);delay(200); /使得调整的时候清晰可见,以免每按一次变化太大TR0=1;if(key2=0)/ 小时减1delay(5);if(key2=0)TR0=0;hour-;if(hour>24)/当减到00时再减的数不是<0,而是一个大于24的数(好像是0xf5)hour=23;write_hms(4,hour);delay(200); TR0=1;if(key3=0) /分钟加1delay(5);if(key3=0)TR0=0;minute+;if(minute=60)minute=0;write_hms(7,minute);delay(200);TR0=1;if(key4=0) /分钟减1delay(5);if(key4=0)TR0=0;minute-;if(minute>24)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;/* 主函数*/void main(void)lcdinit();/调用系统初始化程序while(1)keyscan();专心-专注-专业