1、新1602下的闹钟程序1602下的闹钟程序#includereg52.h#define uchar unsigned char#define uint unsigned int#define n1 15#define n2 14#define y 0x01#define e 5sbit wela=P27;sbit dula=P26;sbit rs=P35;sbit lcden=P34;sbit rd=P37;sbit s0=P30; /the mode setnum:one-the time two-the alarmsbit s1=P31; /the mode when the setnum
2、=one sbit s2=P32; /up sbit s3=P33; /downsbit beep=P23; /the beepuchar i;uchar code table=0000-00-00 MON;uchar code table1=00:00:00 11C o;uchar code nmon=0,31,28,31,30,31,30,31,31,30,31,30,31; /the common yearuchar code lmon=0,31,29,31,30,31,30,31,31,30,31,30,31; /the leap yearuchar tt,sec,min,hour,d
3、ay,week,mon;uchar t0,sec1,min1,hour1;uchar num,setnum,bnum; /for the modeint year;void delay(uchar z) uchar i,j; for(i=125;i0;i-) for(j=z;j0;j-); void write_cmd(uchar cmd)/write commond rs=0; P0=cmd; delay(5); lcden=1; delay(5); lcden=0;void write_data(uchar dat)/write data rs=1; P0=dat; delay(5); l
4、cden=1; delay(5); lcden=0;void lcd_init() /the init wela=0; dula=0; lcden=0; write_cmd(0x38); write_cmd(0x0f); write_cmd(0x06); write_cmd(0x01); write_cmd(0x80); for(i=0;in1;i+) write_data(tablei); / one 0x write_data(0x38) one 0x the same delay(2); write_cmd(0x80+0x40); for(i=0;in2;i+) write_data(t
5、able1i); delay(2); void timer_init() TMOD=0x11; TH0=(65536-50000)/256; TL0=(65536-50000)%6; TH1=(65536-50000)/256; TL1=(65536-50000)%6; EA=1; ET0=1; ET1=1; TR0=1;void lcd_yeardisplay() /display the year int a1,a2,a3,a4; write_cmd(0x80); a1=year/1000; a2=year/100; a3=year/10; a4=year; write_data(0x30
6、+a1); write_data(0x30+a2); write_data(0x30+a3); write_data(0x30+a4);void lcd_mddisplay(uchar add,uchar date) /display the month and day uchar d1,d2; write_cmd(0x80+add); d1=date/10; d2=date; write_data(0x30+d1); write_data(0x30+d2); void lcd_hmsdisplay(uchar add,uchar date) uchar t1,t2; write_cmd(0x
7、80+0x40+add); t1=date/10; t2=date; write_data(0x30+t1); write_data(0x30+t2);void time_display() if(setnum=0|setnum=1) lcd_yeardisplay(); lcd_mddisplay(0x05,mon); lcd_mddisplay(0x08,day); lcd_hmsdisplay(0x00,hour); lcd_hmsdisplay(0x03,min); lcd_hmsdisplay(0x06,sec); void alarm_display() if(setnum=2)
8、lcd_hmsdisplay(0x00,hour1); lcd_hmsdisplay(0x03,min1); lcd_hmsdisplay(0x06,sec1); void set_1display() if(num=6) /the year write_cmd(0x80); write_cmd(0x0f); if(num=5) /the month write_cmd(0x80+0x05); write_cmd(0x0f); if(num=4) /the day write_cmd(0x80+0x08); if(num=3) /the hour write_cmd(0x80+0x40); i
9、f(num=2) /the minute write_cmd(0x80+0x40); if(num=1) /the second write_cmd(0x80+0x40+0x03); if(num=1) write_cmd(0x80+0x40+0x06); write_cmd(0x0f); write_cmd(0x0f);void timekeeper() if(tt=20) tt=0; sec+; if(sec=60) sec=0; min+; if(min=60) min=0; hour+; if(hour=24) hour=0; day+; week+; if(week=8) week=
10、0; if(year%4=0&year0!=0)|year0=0) /the leap year if(day=lmonmon+1) day=1; mon+; if(mon=13) mon=1; year+; else if(day=nmonmon+1) day=1; mon+; if(mon=13) mon=1; year+; void time_keyscan() if(setnum=1) if(s1=0) delay(5); if(s1=0) while(!s1); / year=1111; /for the debug / mon=11; / day=11; num+; TR0=0;
11、if(num=7) num=0; TR0=1; write_cmd(0x0c); set_1display(); if(num!=0) if(s2=0) delay(5); if(s2=0) if(num=1) /the second sec+; if(sec=60) sec=0; if(num=2) /the minute min+; if(min=60) min=0; if(num=3) /the hour hour+; if(hour=24) hour=0; if(num=4) /the day day+; if(year%4=0&year0!=0)|year0=0) if(day=lm
12、onmon+1) day=1; else if(day=nmonmon+1) day=1; if(num=5) /the month mon+; if(mon=13) mon=1; if(num=6) /the year year+; if(year=10000) year=0; write_cmd(0x0f); if(s3=0) delay(5); if(s3=0) if(num=1) /the second sec-; if(sec=-1) sec=59; if(num=2) /the minute min-; if(min=-1) min=59; if(num=3) /the hour
13、hour-; if(hour=-1) hour=23; if(num=4) /the day day-; if(year%4=0&year0!=0)|year0=0) if(day=0) day=lmonmon; else if(day=0) day=nmonmon; if(num=5) /the month mon-; if(mon=0) mon=12; if(num=6) /the year year-; if(year=-1) year=9999; void alarm_keyscan() if(setnum=2) if(s1=0) delay(5); if(s1=0) while(!s
14、1); year=0; /for the debug, if setnum=2 and s1=0 this word will work or will not mon=0; day=0; num+; TR0=0; if(num=4) num=0; TR0=1; write_cmd(0x0c); set_1display(); if(num!=0) if(s2=0) delay(5); if(s2=0) if(num=1) /the second sec1+; if(sec1=60) sec1=0; if(num=2) /the minute min1+; if(min1=60) min1=0
15、; if(num=3) /the hour hour1+; if(hour1=24) hour1=0; if(s3=0) delay(5); if(s3=0) if(num=1) /the second sec1-; if(sec1=-1) sec1=60; if(num=2) /the minute min1-; if(min1=-1) min1=59; if(num=3) /the hour hour1-; if(hour1=-1) hour1=23; void set() if(s0=0) delay(5); if(s0=0) setnum+; if(setnum=3) setnum=0
16、; void main() timer_init(); lcd_init(); year=0000; mon=2; day=28; hour=23; min=59; sec=58; hour1=0; min1=0; sec1=3; while(1) set(); time_keyscan(); alarm_keyscan(); / time_alarm(); time_display(); alarm_display(); void timer0() interrupt 1 TH0=(65536-50000)/256; TL0=(65536-50000)%6; tt+; timekeeper();void timer1() interrupt 3 TH0=(65536-50000)/256; TL0=(65536-50000)%6; t0+; if(t0=40) beep=1;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1