文档详情

基于51单片机-DS1302-LCD1602数字时钟显示.doc

发布:2019-09-15约2.23千字共5页下载文档
文本预览下载声明
#include reg51.h #include intrins.h #include string.h #define uint unsigned int #define uchar unsigned char uchar code table[]=I LIKE MCU!; sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2; sbit IO=P1^0; sbit sclk=P1^1; sbit rst=P1^2; uchar *week[]={SUN,****,MON,TUS,WEN,THU,FRI,SAT}; uchar lcd_buffer1[]={DATE 00-00-00 }; uchar lcd_buffer2[]={TIME 00:00:00 }; uchar datetime[7]; 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; 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;i8;i++) { IO=x0x01; sclk=1; sclk=0; x=x1; } } 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 read_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++) { datetime[i]=read_data(addr); addr=addr+2; } } void set_pos(uchar p) { writecmd(p|0x80); } void dispaly_string(uchar p,uchar *s) { uchar i; set_pos(p); for(i=0;i16;i++) { writedata(s[i]); delay(5); } } void zhuanhuan(uchar d,uchar *a) { a[0]=d/10+0; a[1]=d%10+0; } void main() { init(); while(1) { gettime(); zhuanhuan(datetime[6],lcd_buffer1+5); zhuanhuan(datetime[4],lcd_buffer1+8); zhuanhuan(datetime[3],lcd_buffer1+11); strcpy(lcd_buffer1+13,week[datetime[5]]); zhuanh
显示全部
相似文档