当前位置:文档之家› 基于51单片机的简易电子表

基于51单片机的简易电子表

基于51单片机的简易电子表/***************************************************************** 阿斌独家制作:电子表1602液晶显示带有闹钟功能每天到指定时间后闹钟提醒闹钟响后按s4键关闭闹钟如果闹钟响后大约20秒未检测到s4键按下,则闹钟自动关闭******************************************************************/ 主程序:#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit lcden=P2^2;sbit lcdrw=P2^1;sbit lcdrs=P2^0;sbit s1=P3^0;sbit s2=P3^1;sbit s3=P3^2;sbit s4=P3^3;sbit rd=P3^7;sbit beep=P1^2;uint nian,a;uchar count,s1num,i,xq,ri,yue,flag;char shi,fen,miao,shia,fena,miaoa;uchar code table[]=" 2012-11-19 MON"; uchar code table1[]=" 00:00:00"; uchar code xq1[]="MON";uchar code xq2[]="TUE";uchar code xq3[]="WED";uchar code xq4[]="THU";uchar code xq5[]="FRI";uchar code xq6[]="SA T";uchar code xq7[]="SUN";void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void didi(){beep=1;delay(5);beep=0;delay(5);beep=1;delay(5);beep=0;delay(5);}void write_com(uchar com) {lcdrs=0;lcden=0;lcdrw=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_date(uchar date) {lcdrs=1;lcden=0;lcdrw=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){uchar num;lcden=0;xq=1;ri=19;yue=11;nian=2012;a=1000;flag=0;shia=00;fena=00;miaoa=05;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num<16;num++){write_date(table[num]);delay(5);}write_com(0x80+0x40);for(num=0;num<12;num++){write_date(table1[num]);delay(5);}TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void write_sfm2(uchar add,uint date) {uchar qian,bai,shi,ge;qian=date/1000;bai=date%1000/100;shi=date%100/10;ge=date%10;write_com(0x80+add);write_date(0x30+qian);write_date(0x30+bai);write_date(0x30+shi);write_date(0x30+ge);}void write_sfm1(uchar add,uchar date) {uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);}void write_sfm(uchar add,uchar date) {uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);}void write_xq(){write_com(0x80+13);switch(xq){case 1: for(i=0;i<3;i++){write_date(xq1[i]);delay(5);} break;case 2: for(i=0;i<3;i++){write_date(xq2[i]);delay(5);} break;case 3: for(i=0;i<3;i++){write_date(xq3[i]);delay(5);} break;case 4: for(i=0;i<3;i++){write_date(xq4[i]);delay(5);} break;case 5: for(i=0;i<3;i++){write_date(xq5[i]);delay(5);} break;case 6: for(i=0;i<3;i++){write_date(xq6[i]);delay(5);} break;case 7: for(i=0;i<3;i++){write_date(xq7[i]);delay(5);} break;default: break;}}void keyscan1(){if(s4==0){delay(5);if(s4==0){while(!s4);flag=1;}}}void keyscan(){rd=0;if(s1==0){delay(5);if(s1==0){s1num++;while(!s1);if(s1num==1){TR0=0;write_com(0x80+0x40+10);write_com(0x0f);}}if(s1num==2){write_com(0x80+0x40+7);}if(s1num==3){write_com(0x80+0x40+4);}if(s1num==4){write_com(0x80+13);}if(s1num==5){write_com(0x80+10);}if(s1num==6){write_com(0x80+7);}if(s1num==7){write_com(0x80+2);}if(s1num==8){s1num=0;write_com(0x0c);TR0=1;}}if(s1num!=0){if(s2==0){delay(5);if(s2==0){while(!s2);if(s1num==1){miao++;if(miao==60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num==2){fen++;if(fen==60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);}if(s1num==3){shi++;if(shi==24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);}if(s1num==4){xq++;if(xq==8)xq=1;write_xq();write_com(0x80+13);}if(s1num==5){ri++;switch(yue){case 1: case 3: case 5: case 7:case 8: case 10: case 12: if(ri==32) ri=1; break;case 4: case 6: case 9: case 11: if(ri==31) ri=1; break;case 2:if(nian%4==0&&nian%100!=0||nian%400==0){if(ri==30)ri=0;}else if(ri==29)ri=0;break;}write_sfm1(10,ri);write_com(0x80+10);}if(s1num==6){yue++;if(yue==13)yue=1;write_sfm1(7,yue);write_com(0x80+7);}if(s1num==7){nian++;if(nian==2100)nian=2000;write_sfm2(2,nian);write_com(0x80+2);}}}if(s3==0){delay(5);if(s3==0){while(!s3);if(s1num==1){miao--;if(miao==-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num==2){fen--;if(fen==-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7); }if(s1num==3){shi--;if(shi==-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+4); }if(s1num==4){xq--;if(xq==0)xq=7;write_xq();write_com(0x80+13);}if(s1num==5){ri--;switch(yue){case 1: case 3: case 5: case 7:case 8: case 10: case 12: if(ri==0) ri=31; break;case 4: case 6: case 9: case 11: if(ri==0) ri=30; break;case 2: if(nian%4==0&&nian%100!=0||nian%400==0){if(ri==0)ri=29;}else if(ri==0)ri=28;break;}write_sfm1(10,ri);write_com(0x80+10);}if(s1num==6){yue--;if(yue==0)yue=12;write_sfm1(7,yue);write_com(0x80+7);}if(s1num==7){nian--;if(nian==1999)nian=2099;write_sfm2(2,nian);write_com(0x80+2);}}}}}void set_alarm(){if(shi==shia&&fen==fena&&miao==miaoa) {while(a--){didi();keyscan1();if(flag==1){flag=0;break;}}a=1000;}}void main(){init();while(1){keyscan();set_alarm();}}void timer0() 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;shi++;if(shi==24){shi=0;xq++;if(xq=8){xq=1;}write_xq();ri++;switch(yue){case 1: case 3: case 5: case 7:case 8: case 10: case 12: if(ri==32) ri=1; break;case 4: case 6: case 9: case 11: if(ri==31) ri=1; break;case 2: if(nian%4==0&&nian%100!=0||nian%400==0){if(ri==30)ri=0;}else if(ri==29)ri=0;break;default: break;}if(ri==31||ri==30||ri==29||ri==28){yue++;if(yue==13){yue=1;nian++;if(nian==2099)nian=2000;write_sfm2(2,nian);}write_sfm1(7,yue);}write_sfm1(10,ri);}write_sfm(4,shi);}write_sfm(7,fen);}write_sfm(10,miao);}}。

相关主题