《单片机液晶1602-24c02时钟》由会员分享,可在线阅读,更多相关《单片机液晶1602-24c02时钟(18页珍藏版)》请在金锄头文库上搜索。
1、单片机液晶单片机液晶 1602-24C021602-24C02 时钟时钟#include#define uchar unsigned char#define uint unsigned intsbit LCD_RS = P26; sbit LCD_RW = P25;sbit LCD_EP = P27;sbit SDA=P21;sbit SCL=P20;sbit s1=P30;sbit s2=P31;sbit s3=P32;sbit beep=P15;uchar count=0,s1num=0,week=5;int second,minute,hour,year1=20,year2=10,mou
2、th=12,day=25;unsigned char code mouth_0=31,28,31,30,31,30,31,31,30,31,30,31; /设置闰年和非闰年每个月的天数unsigned char code mouth_1=31,29,31,30,31,30,31,31,30,31,30,31;void delay0();void delay(uint z) /延时函数uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void di()beep=0;delay(100); /扬声器beep=1;void start()/24c02 开始信号SDA=1
3、;delay0();SCL=1;delay0();SDA=0;delay0();void stop() /24c02 停止信号SDA=0;delay0();SCL=1;delay0();SDA=1;delay0();void respons() /应答uchar i;SCL=1;delay0();while(SDA=1)write_week(week);write_add(4,week);break;case 5: day+;if(year%4=0|(year%100=0 else if(daymouth_0mouth-1) /不是闰年,判断是否大于当前月的天数,是则置 1day=1;writ
4、e_nyr(8,day);write_add(5,day);break;case 6: mouth+;if(mouth12)mouth=1;write_nyr(5,mouth);write_add(6,mouth);break;case 7: year2+;if(year299)year2=0;year1+;write_nyr(0,year1);write_add(8,year1);write_nyr(2,year2);write_add(7,year2);break; if(s3=0)delay(5);if(s3=0)while(!s3);di();switch (s1num) case 1
5、: second-;if(second7)week=1;write_week(week);write_add(4,week);if(year%4=0|(year%100=0mouth+;if(mouth12)mouth=1;year2+;if(year2100)year1+;write_nyr(0,year1);write_nyr(2,year2);write_nyr(5,mouth);write_nyr(8,day);else if(daymouth_0mouth-1)day=1;mouth+;if(mouth12) mouth=1;year2+;if(year2=100) year2=0;year1+;write_nyr(0,year1);write_nyr(2,year2);write_add(7,year2);write_nyr(5,mouth);write_add(6,mouth);write_nyr(8,day);write_add(5,day);write_sfm(0,hour);write_add(3,hour);write_sfm(3,minute);write_add(2,minute);write_sfm(6,second);write_add(1,second);