《基于51单片机的1602液晶时钟设计的C程序(闰年补偿,月份调整)》由会员分享,可在线阅读,更多相关《基于51单片机的1602液晶时钟设计的C程序(闰年补偿,月份调整)(31页珍藏版)》请在金锄头文库上搜索。
1、.专业整理.#include#define uchar unsigned char#define uint unsigned intuchar code table= 2012-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;/*延迟函数
2、*/void delay(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;g
3、e=date%10;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_
4、data(O); write_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)
5、; break; case 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
6、);if(s1=0) 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_
7、data(:);write_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);writ
8、e_data( );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
9、;write_com(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(0x80+0x40+5); if(s1num=4) write_com(0x80+0x40+5);write_data(:);write_com(0x80+15);