DS1302+DS18B20+LCD1602单片机c语言驱动程序案例Word文件下载.docx
《DS1302+DS18B20+LCD1602单片机c语言驱动程序案例Word文件下载.docx》由会员分享,可在线阅读,更多相关《DS1302+DS18B20+LCD1602单片机c语言驱动程序案例Word文件下载.docx(20页珍藏版)》请在冰点文库上搜索。
ucharrl=0;
uintqq,time,yy;
uintTEMPL,TEMPH,aa,bb;
ucharcodezimo[]={
0x00,0x0E,0x00,0x0E,0x00,0x1F,0x00,0x00,//三
0x00,0x1F,0x15,0x15,0x1B,0x11,0x1F,0x00,//四
0x00,0x1E,0x08,0x1E,0x0A,0x0A,0x1F,0x00,//五
0x00,0x04,0x00,0x1F,0x0A,0x11,0x00,0x00,//六
0x04,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02,//年
0x0F,0x09,0x0F,0x09,0x0F,0x09,0x13,0x00,//月
0x1F,0x11,0x11,0x1F,0x11,0x11,0x1F,0x00,//日
0x04,0x0E,0x1C,0x1F,0x1C,0x0E,0x04,0x00
};
ucharcodelcdadd[]={0x86,0x8a,0x8e,0xc8,0xcb,0xce,0x82};
ucharcodesz[]={"
0123456789"
};
voidkeyer(void)
{
p20=1;
p21=0;
if(!
p22){while(!
p22);
key=0x01;
}
p23){while(!
p23);
key=0x02;
p24){while(!
p24);
key=0x03;
p25){while(!
p25);
key=0x04;
}
p20=0;
p21=1;
p22){while(!
key=0x05;
key=0x06;
key=0x07;
key=0x08;
}
}/**************盼键*************/
voidinto0init(void)
{
TMOD=0X01;
TH0=15536/256;
TL0=5536%256;
IE=0X82;
TR0=1;
}/************INTO0INITIALIZTION***/
voidinto0deal(void)interrupt1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time=time+1;
if(time==8){time=0;
san=!
san;
}
}
voiddelayus(ucharn)
while(--n);
}/************USDELAY*************/
voiddelay(uintm)
uinti,j;
for(i=0;
i<
m;
i++)
for(j=0;
j<
125;
j++);
}/************MSDELAY************/
voidLCD_WC(uchari)
{
LCDRS=0;
LCDE=1;
P0=i;
delay(5);
LCDE=0;
delay
(1);
}/************LCDWTIRECOMMAND****/
voidLCD_WD(uchari)
{
LCDRS=1;
LCDE=1;
P0=i;
delay(5);
LCDE=0;
delay
(2);
}/***********LCDWTIREDATA*******/
voidLCD_WB(void)
uchari;
LCD_WC(0x40);
64;
i++)LCD_WD(zimo[i]);
}/************LCDWTIREWORD******/
voidLCD_CS(void)
{
LCD_WC(0x01);
LCD_WC(0x02);
LCD_WC(0x06);
LCD_WC(0x0C);
LCD_WC(0x14);
LCD_WC(0x38);
delay(10);
LCD_WB();
}/************LCDINITIALIZTION**/
bitDS18b20_CS(void)
bitdp;
DQ=0;
delayus(237);
DQ=1;
delayus(27);
dp=DQ;
return(dp);
}/***********DS18b20INITIALIZTION*/
voidwbit(bitbp)
delayus(3);
if(bp)DQ=bp;
delayus(20);
}/***********DS18b20WRITEBIT*****/
voidwbyte(ucharm)
8;
wbit(m&
0x01);
m=m>
>
1;
}
}/***********DS18b20WRITEBYTE***/
bitrbit(void)
bitbp;
if(DQ)bp=1;
elsebp=0;
return(bp);
}/***********DS18b20READBIT*****/
ucharrbyte(void)
uchari,m=0;
{
m=m>
if(rbit())m=m|0x80;
return(m);
}/***********DS18b20READBYTE****/
voidSTARTUPDS18b20(void)
while(DS18b20_CS());
wbyte(0xcc);
wbyte(0x44);
//delay(750);
for(yy=0;
yy<
10;
yy++){keyer();
if(key!
=0xaa)break;
}/***********STARTUPDS18b20******/
voidREADTEMP(void)
STARTUPDS18b20();
//delay
(1);
wbyte(0xbe);
TEMPL=rbyte();
TEMPH=rbyte();
n=(TEMPL+TEMPH*256)*0.0625;
n=n*100;
}/***********READTEMPINDS18b20*/
voidDISPDS18b20(void)
uintm;
READTEMP();
LCD_WC(0x0c0);
m=(uint)n;
LCD_WD(sz[m/1000]);
aa=sz[m/1000];
m=m%1000;
LCD_WD(sz[m/100]);
bb=sz[m/100];
m=m%100;
LCD_WD('
.'
);
LCD_WD(sz[m/10]);
m=m%10;
LCD_WD(sz[m]);
C'
if((aa>
=sz[2])&
&
(bb>
=sz[5])){p17=!
p17;
}
(bb==sz[5]))p17=0;
if((aa<
(bb<
sz[4]))p17=1;
}/*DS18b20TEMPDEALWITHANDRENOVATE*/
ucharDS1302read(ucharaddress)
uintb,c,e;
e=address;
SCLK=0;
REST=0;
REST=1;
for(b=0;
b<
b++)
{
SCLK=0;
IO=(bit)(e&
0x01);
SCLK=1;
e=e>
1;
}
{
c=c>
if(IO)c=c|0x80;
REST=0;
SCLK=1;
return(c);
voidDS1302wirte(ucharaddress,uchardataes)
uinta,adddat;
adddat=address;
for(a=0;
a<
a++)
IO=(bit)(adddat&
//adddat&
0x01;
////ddress&
adddat=adddat>
adddat=dataes;
//dataes&
0x01;
}
voidDS1302readrealtime(void)
sec=DS1302read(0x81);
min=DS1302read(0x83);
hour=DS1302read(0x85);
day=DS1302read(0x87);
month=DS1302read(0x89);
year=DS1302read(0x8d);
week=DS1302read(0x8b);
voidDS1302init(void)
DS1302wirte(0x8e,0x00);
DS1302wirte(0x90,0xa9);
DS1302wirte(0x80,seccs);
DS1302wirte(0x82,mincs);
DS1302wirte(0x84,hourcs);
DS1302wirte(0x86,daycs);
DS1302wirte(0x88,monthcs);
DS1302wirte(0x8a,weekcs);
DS1302wirte(0x8c,yearcs);
voidOnlyMeSee(void)
seccs=sec;
mincs=min;
hourcs=hour;
weekcs=week;
daycs=day;
monthcs=month;
yearcs=year;
}
voidrealtimedisplay(void)
LCD_WC(0x80);
2'
0'
if(sanyear==0){
LCD_WD(sz[year/16]);
LCD_WD(sz[year%16]);
}
else
{LCD_WD('
'
LCD_WD('
LCD_WC(0x84);
LCD_WD(4);
if(sanmonth==0){
LCD_WD(sz[month/16]);
LCD_WD(sz[month%16]);
LCD_WC(0x88);
LCD_WD(5);
if(sanday==0){
LCD_WD(sz[day/16]);
LCD_WD(sz[day%16]);
}
LCD_WC(0x8C);
LCD_WD(6);
<
'
if(sanweek==0){
if(1==week%16)LCD_WD('
-'
if(2==week%16)LCD_WD('
='
if(3==week%16)LCD_WD(0);
if(4==week%16)LCD_WD
(1);
if(5==week%16)LCD_WD
(2);
if(6==week%16)LCD_WD(3);
if(7==week%16)LCD_WD(6);
else
LCD_WC(0xc8);
if(sanhour==0){
LCD_WD(sz[hour/16]);
LCD_WD(sz[hour%16]);
LCD_WC(0xca);
:
if(sanmin==0){
LCD_WD(sz[min/16]);
LCD_WD(sz[min%16]);
LCD_WC(0xcd);
if(sansec==0){
LCD_WD(sz[sec/16]);
LCD_WD(sz[sec%16]);
}
voidOnlyMeSee1(void)
EA=0;
sanyear=0;
sanmonth=0;
sanday=0;
sanweek=0;
sanhour=0;
sanmin=0;
sansec=0;
voidkeywith(void)
keyer();
if(key==0x08)
key=0xaa;
EA=1;
while
(1)
loop:
realtimedisplay();
if(rl==0){sanyear=san;
sanmonth=0;
sanweek=0;
if(rl==1){sanmonth=san;
sanyear=0;
if(rl==2){sanday=san;
if(rl==3){sanweek=san;
if(rl==4){sanhour=san;
if(rl==5){sanmin=san;
if(rl==6){sansec=san;
keyer();
if(key==0x08){break;
if(key==0x03){OnlyMeSee();
DS1302init();
break;
if(key==0x05){key=0xaa;
rl=rl-1;
if(rl==255)rl=6;
gotoloop;
if(key==0x07){key=0xaa;
rl=rl+1;
if(rl==7)rl=0;
if(key==0x02)
{key=0xaa;
switch(rl)
{
case0:
{
LCD_WC(0x82);
year=year+0x01;
switch(year)
{
case0x0a:
year=0x10;
break;
case0x1a:
year=0x20;
case0x2a:
year=0x30;
case0x31:
year=0x00;
}
LCD_WD(sz[year/16]);
LCD_WD(sz[year%16]);
LCD_WC(0x82);
}
case1:
LCD_WC(0x86);
month=month+0x01;
switch(month)
month=0x10;
case0x13:
month=0x01;
LCD_WD(sz[month/16]);
LCD_WD(sz[month%16]);
LCD_WC(0x86);
case2:
LCD_WC(0x8a);
day=day+0x01;
switch(day)
day=0x10;
day=0x20;
day=0x30;
case0x32:
day=0x01;
LCD_WD(sz[day/16]);
LCD_WD(sz[day%16]);
LCD_WC(0x8a);
case3:
LC