《基于51单片机DS1302LCD1602数字时钟显示.docx》由会员分享,可在线阅读,更多相关《基于51单片机DS1302LCD1602数字时钟显示.docx(5页珍藏版)》请在三一文库上搜索。
1、 #include #include #include #define uint unsigned int#define uchar unsigned charuchar code table=I LIKE MCU!;sbit RS=P20;sbit RW=P21;sbit EN=P22;sbit IO=P10;sbit sclk=P11;sbit rst=P12;uchar *week=SUN,*,MON,TUS,WEN,THU,FRI,SAT;uchar lcd_buffer1=TDEA00-00-00 ;uchar lcd_buffer2=TIME 00:00:00;uchar date
2、time7;void delay(uchar ms)uchar i;while(ms-)for(i=0;i120;i+); /忙检测uchar busy()uchar test;RW=1;RS=0;EN=1;test=P0;EN=0;return test;/写 LCD 命令void writecmd(uchar cmd)while(busy()&0x80)=0x80);RS=0;RW=0;P0=cmd;EN=1;delay(5);EN=0;/发送数据void writedata(uchar dat)while(busy()&0x80)=0x80);RW=0;RS=1;P0=dat;EN=1;
3、delay(5);EN=0;void init()writecmd(0x38);delay(5);writecmd(0x01);delay(5);writecmd(0x06); delay(5);writecmd(0x0c);delay(5);void write_a_byte_tods1302(uchar x)uchar i;for(i=0;i1;uchar get_a_byte_fromds1302()uchar i,b=0x00;for(i=0;i8;i+)b|= _crol_(uchar)IO,i);sclk=1;sclk=0;return b/16*10+b%16;uchar rea
4、d_data(uchar addr)uchar dat;rst=0;sclk=0;rst=1;write_a_byte_tods1302(addr);dat=get_a_byte_fromds1302();sclk=1;sclk=0;return dat;void gettime()uchar i,addr=0x81;for(i=0;i8;i+)datetimei=read_data(addr);addr=addr+2; void set_pos(uchar p)writecmd(p|0x80);void dispaly_string(uchar p,uchar *s)uchar i;set_
5、pos(p);for(i=0;i16;i+)writedata(si);delay(5);void zhuanhuan(uchar d,uchar *a)a0=d/10+0;a1=d%10+0;void main()init();while(1)gettime();zhuanhuan(datetime6,lcd_buffer1+5);zhuanhuan(datetime4,lcd_buffer1+8);zhuanhuan(datetime3,lcd_buffer1+11);strcpy(lcd_buffer1+13,weekdatetime5);zhuanhuan(datetime2,lcd_buffer2+5);zhuanhuan(datetime1,lcd_buffer2+8);zhuanhuan(datetime0,lcd_buffer2+11);dispaly_string(0x00,lcd_buffer1);dispaly_string(0x40,lcd_buffer2);