lcd1602显示实时时钟及模块化编程Word文档格式.docx
《lcd1602显示实时时钟及模块化编程Word文档格式.docx》由会员分享,可在线阅读,更多相关《lcd1602显示实时时钟及模块化编程Word文档格式.docx(18页珍藏版)》请在冰点文库上搜索。
{
for(m=0;
m<
40;
m++);
}
}
unsignedcharbusy()
unsignedcharf;
rs=0;
rw=1;
e=1;
delay
(1);
f=P0;
e=0;
busy1=f&
0x80;
returnbusy1;
voidlcd_write_com(unsignedcharcom1)//写命令
while(busy()==0x80);
rw=0;
P0=com1;
delay(5);
voidlcdreset()//初始化
delay(10);
lcd_write_com(0x38);
//设置显示模式
lcd_write_com(0x0c);
lcd_write_com(0x06);
lcd_write_com(0x01);
lcd_write_com(0x80);
voidlcd_write_data(unsignedchardata1)//写数据
rs=1;
P0=data1;
voidds1302_write(ucharaddr,uchardat)
ucharn;
sclk=0;
_nop_();
rst=1;
for(n=0;
n<
8;
n++)
dsio=addr&
0x01;
addr>
>
=1;
sclk=1;
_nop_();
sclk=0;
dsio=dat&
dat>
rst=0;
uchards1302_read(ucharaddr)
ucharn,dat,dat1;
dat1=dsio;
//dat=dat>
1;
//dat|=dat1<
<
7;
dat=(dat1<
7)|(dat>
1);
sclk=1;
dsio=0;
dsio=1;
returndat;
voidds1302_init()
ds1302_write(0x8e,0x00);
ds1302_write(write_addr[n],time[n]);
ds1302_write(0x8e,0x80);
voidds1302_readtime()
time[n]=ds1302_read(read_addr[n]);
voiddisplay()
lcd_write_com(0x80+0x40);
lcd_write_data('
0'
+time[2]/16);
+(time[2]&
0x0f));
-'
);
+time[1]/16);
+(time[1]&
+time[0]/16);
+(time[0]&
2'
+time[6]/16);
+(time[6]&
+time[4]/16);
+(time[4]&
+time[3]/16);
+(time[3]&
voidmain()
//ds1302_init();
//使用这条语句就可以显示设定的时间,不时用就会使用实时时钟。
lcdreset();
while
(1)
ds1302_readtime();
display();
模块化编程
Ds1302.h
#ifndef__DS1302_H__
#define__DS1302_H__
uchardatatime[7],write_addr[7];
sbitio=P3^4;
voidds1302_write(ucharaddr,uchardat);
uchards1302_read(ucharaddr);
voidds1302_init();
voidds1302_readtime();
#endif
Ds1302.c
ds1302.h>
uchardatatime[7]={0,0x10,0x16,0x21,0x02,0x07,0x16};
//存取数据
io=addr&
io=dat&
dat1=io;
io=0;
io=1;
ucharn,addr=0x80;
ds1302_write(addr,datatime[n]);
addr+=2;
ucharn,addr=0x81;
datatime[n]=ds1302_read(addr);
Lcd1602.h
#ifndef__LCD1602_H__
#define__LCD1602_H__
sbiten=P2^7;
voiddelay(ucharms);
voidbusy_wait();
voidwrite_lcd_command(ucharcmd);
voidwrite_lcd_data(uchardat);
voidinit_lcd();
voidlcd_showstring(ucharr,ucharc,uchar*str);
Lcd1602.c
lcd1602.h>
codeucharddram[]={0x80,0xc0};
voiddelay(ucharms)
uchari;
while(ms--)
for(i=0;
i<
10;
i++);
voidbusy_wait()
ucharlcd_status;
do
P0=0xff;
en=0;
rs=0;
rw=1;
en=1;
lcd_status=P0;
}while(lcd_status&
0x80);
voidwrite_lcd_command(ucharcmd)
busy_wait();
en=0;
rw=0;
P0=cmd;
en=1;
_nop_();
en=0;
voidwrite_lcd_data(uchardat)
rs=1;
P0=dat;
voidinit_lcd()
write_lcd_command(0x38);
write_lcd_command(0x01);
write_lcd_command(0x06);
write_lcd_command(0x0c);
voidlcd_showstring(ucharr,ucharc,uchar*str)
uchari=0;
write_lcd_command(ddram[r]|c);
16;
i++)
write_lcd_data(str[i]);
//for(;
//write_lcd_data('
'
Main.c
string.h>
#defineuintunsignedint
uchar*week[]={"
sun"
"
mon"
tus"
wen"
thu"
fri"
sat"
};
ucharlcd_buf_1[]="
data00-00-00"
;
ucharlcd_buf_2[]="
time00:
00:
00"
externvoidds1302_readtime();
externds1302_init();
externvoidinit_lcd();
externvoidlcd_showstring(ucharr,ucharc,uchar*str);
externuchardatatime[7];
voidformat_datatime(uchard,uchar*a)
*a=(d>
4)+'
*(a+1)=(d&
0x0f)+'
voidmain()
init_lcd();
//ds1302_init();
format_datatime(datatime[6],lcd_buf_1+5);
format_datatime(datatime[4],lcd_buf_1+8);
format_datatime(datatime[3],lcd_buf_1+11);
strcpy(lcd_buf_1+13,week[datatime[5]-1]);
//
format_datatime(datatime[2],lcd_buf_2+5);
format_datatime(datatime[1],lcd_buf_2+8);
format_datatime(datatime[0],lcd_buf_2+11);
lcd_showstring(0,0,lcd_buf_1);
lcd_showstring(1,0,lcd_buf_2);