基于51单片机的1602液晶时钟设计的C程序(闰年补偿,月份调整)

上传人:豆*** 文档编号:128932095 上传时间:2022-08-02 格式:DOC 页数:16 大小:51KB
收藏 版权申诉 举报 下载
基于51单片机的1602液晶时钟设计的C程序(闰年补偿,月份调整)_第1页
第1页 / 共16页
基于51单片机的1602液晶时钟设计的C程序(闰年补偿,月份调整)_第2页
第2页 / 共16页
基于51单片机的1602液晶时钟设计的C程序(闰年补偿,月份调整)_第3页
第3页 / 共16页
资源描述:

《基于51单片机的1602液晶时钟设计的C程序(闰年补偿,月份调整)》由会员分享,可在线阅读,更多相关《基于51单片机的1602液晶时钟设计的C程序(闰年补偿,月份调整)(16页珍藏版)》请在装配图网上搜索。

1、#include#define uchar unsigned char#define uint unsigned intuchar code table= -02-29 MON;uchar code table1= 23:59:55;uchar num,count,shi,fen,miao,nian,yue,ri,xingqi,s1num,flag;sbit lcden=P25; sbit lcdrs=P10;sbit lcdrw=P11;sbit s1=P30;sbit s2=P31;sbit s3=P32;sbit s4=P33;sbit feng=P23;/*延迟函数*/void del

2、ay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);/*写命令*/void write_com(uchar com)lcdrs=0;lcdrw=0; P0=com;lcden=1; delay(5);lcden=0;/*写数据*/void write_data(uchar date)lcdrs=1;lcdrw=0;P0=date;lcden=1;delay(5);lcden=0;/*时分秒调节函数*/ void write_sfm(uchar add,uchar date) uchar shi,ge;shi=date/10;ge=date%10;

3、write_com(0x80+0x40+add);write_data(0x30+shi);write_data(0x30+ge); /*年月日调节函数*/ void write_nyr(uchar ad,uchar dat) uchar shi,ge;shi=dat/10;ge=dat%10;write_com(0x80+0x00+ad);write_data(0x30+shi);write_data(0x30+ge); /*星期显示函数*/ void display_week() switch (xingqi) case 1: write_data(M); write_data(O); w

4、rite_data(N); write_com(0x80+0x00+14); break; case 2: write_data(T); write_data(U); write_data(E); write_com(0x80+0x00+14); break;case 3: write_data(W); write_data(E); write_data(D); write_com(0x80+0x00+14); break;case 4: write_data(T); write_data(H); write_data(U); write_com(0x80+0x00+14); break; c

5、ase 5: write_data(F); write_data(R); write_data(I); write_com(0x80+0x00+14); break; case 6: write_data(S); write_data(A); write_data(T); write_com(0x80+0x00+14); break; case 7: write_data(S); write_data(U); write_data(N); write_com(0x80+0x00+14); break;void keycan() /*光标左移*/if(s1=0)delay(5);if(s1=0)

6、 s1num+;while(!s1);if(s1num=1)TR0=0;write_com(0x80+0x40+11);write_data();write_com(0x80+0x40+10);/光标重新回到闪烁点,写光标地址同样加一write_com(0x0f); /光标闪烁 if(s1num=2) write_com(0x80+0x40+11);write_data( );write_com(0x80+0x40+8);write_data();write_com(0x80+0x40+7);if(s1num=3) write_com(0x80+0x40+8);write_data(:);wr

7、ite_com(0x80+0x40+5);write_data();write_com(0x80+0x40+4); if(s1num=4) write_com(0x80+0x40+5);write_data(:);write_com(0x80+15);write_data();write_com(0x80+14);if(s1num=5) write_com(0x80+15);write_data( );write_com(0x80+11);write_data();write_com(0x80+10); if(s1num=6) write_com(0x80+11);write_data( );

8、write_com(0x80+8);write_data();write_com(0x80+7); if(s1num=7) write_com(0x80+8);write_data(-);write_com(0x80+5);write_data();write_com(0x80+4); if(s1num=8)s1num=0;write_com(0x80+5);write_data(-);write_com(0x0c);TR0=1; /*光标右移*/ /* if(s2=0)delay(5);if(s2=0) s1num-;while(!s2);if(s1num=1)TR0=0;write_com

9、(0x80+0x40+11);write_data();write_com(0x80+0x40+11);/光标重新回到闪烁点,写光标地址同样加一write_com(0x0f); /光标闪烁 if(s1num=2) write_com(0x80+0x40+11);write_data( );write_com(0x80+0x40+8);write_data();write_com(0x80+0x40+8);if(s1num=3) write_com(0x80+0x40+8);write_data(:);write_com(0x80+0x40+5);write_data();write_com(0

10、x80+0x40+5); if(s1num=4) write_com(0x80+0x40+5);write_data(:);write_com(0x80+15);write_data();write_com(0x80+15);if(s1num=5) write_com(0x80+15);write_data( );write_com(0x80+11);write_data();write_com(0x80+11); if(s1num=6) write_com(0x80+11);write_data( );write_com(0x80+8);write_data();write_com(0x80

11、+8); if(s1num=7) write_com(0x80+8);write_data(-);write_com(0x80+5);write_data(29&flag=1)/当为闰年时,如果ri=30,但是月份已经加到2,这种状况ri必须等于29 ri=29; write_nyr(9,ri); if(yue=2&ri28&flag=0) /当为平年时,如果ri=30,但是月份已经加到2,这种状况ri必须等于28 ri=28; write_nyr(9,ri); if(yue=4|yue=6|yue=9|yue=11)&(ri=31|ri=29|ri=28) ri=1; write_nyr(9

12、,ri); if(yue=13) yue=1; nian+; if(nian%40) write_nyr(9,28); write_nyr(3,nian); write_nyr(6,yue); write_com(0x80+0x00+7);if(s1num=7) nian+; if(nian=100) nian=0; flag=0; if(nian%4=0) flag=1; write_nyr(3,nian); write_com(0x80+0x00+4);/*按键减*/if(s4=0)delay(5);if(s4=0)while(!s4);if(s1num=1)miao-;if(miao=-

13、1)miao=59;write_sfm(9,miao);write_com(0x80+0x40+10);if(s1num=2)fen-;if(fen=-1)fen=59;write_sfm(6,fen);write_com(0x80+0x40+7);if(s1num=3)shi-;if(shi=-1)shi=23;write_sfm(3,shi);write_com(0x80+0x40+4);if(s1num=4)xingqi-; if(xingqi=0)xingqi=7;write_com(0x80+0x00+12); display_week();if(s1num=5)ri-; if(ri

14、=0&(yue=1|yue=3|yue=5|yue=7|yue=8|yue=10|yue=12) ri=30; /避免当yue=12时,当yue减到11时,ri任然等于31时这种不容许状况浮现 yue-; if(yue=2) if(flag=1) ri=29; else ri=28; write_nyr(6,yue); if(yue=0) yue=12; ri=31; write_nyr(9,ri); write_nyr(6,yue); if(ri=0&(yue=4|yue=6|yue=9|yue=11) ri=31;/按下减小按钮,yue减到3或5或8或10,为大月 yue-; write_

15、nyr(6,yue); if(flag=1) /闰年标志位 if(ri=0&yue=2) ri=29;yue-; write_nyr(6,yue); if(flag=0) /平年标志位 if(ri=0&yue=2) ri=28; yue-; write_nyr(6,yue); write_nyr(9,ri); write_com(0x80+0x00+10);if(s1num=6) yue-; if(yue=2&ri29&flag=1) ri=29; write_nyr(9,ri); if(yue=2&ri28&flag=0) ri=28; write_nyr(9,ri); if(yue=0)

16、yue=12; nian-; write_nyr(3,nian); write_nyr(6,yue); if(yue=4|yue=6|yue=9|yue=11)&(ri=31|ri=29|ri=28) ri=1; write_nyr(9,ri); write_com(0x80+0x00+7); if(s1num=7) nian-;if(nian=-1)nian=99;flag=0; /清除标志位if(nian%4=0) flag=1; write_nyr(3,nian);write_com(0x80+0x00+4); /*初始化*/void init()write_com(0x38);writ

17、e_com(0x0c);write_com(0x06);write_com(0x01); write_com(0x80+0x00); for(num=0;num15;num+)write_data(tablenum);delay(5); write_com(0x80+0x40);for(num=0;num11;num+)write_data(table1num);delay(5); shi=23; fen=59; miao=55; xingqi=1; ri=29; yue=2; nian=12; if(nian%4=0) flag=1; TMOD=0x01; TH0=(65536-50000)

18、/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; /*主函数*/ void main() init();/初始化 while(1) keycan(); /*启动定期器*/void timer() interrupt 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256;count+; if(count=18) count=0; miao+; if(miao=60) miao=0;fen+; if(fen=60) fen=0; feng=0; delay(500); feng=1; shi+; if(shi=

19、24) shi=0; ri+; xingqi+; if(xingqi=8) xingqi=1; write_com(0x80+0x00+12); display_week(); if(ri=32&(yue=1|yue=3|yue=5|yue=7|yue=8|yue=10|yue=12) ri=1; yue+; if(yue=13) yue=1; nian+; if(nian=99) nian=0; if(nian%4=0) flag=1;flag=0; write_nyr(3,nian); write_nyr(6,yue); if(ri=31&(yue=4|yue=6|yue=9|yue=11) ri=1; yue+; write_nyr(6,yue); if(flag=1) if(ri=30&yue=2) ri=1; yue+; write_nyr(6,yue); if(flag=0) if(ri=29&yue=2) ri=1; yue+; write_nyr(6,yue); write_nyr(9,ri); write_sfm(3,shi); write_sfm(6,fen); write_sfm(9,miao);

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!