温度的测量18b20.docx
《温度的测量18b20.docx》由会员分享,可在线阅读,更多相关《温度的测量18b20.docx(9页珍藏版)》请在冰点文库上搜索。
![温度的测量18b20.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/1e5fa205-afa4-4b7f-b643-b91716da2b11/1e5fa205-afa4-4b7f-b643-b91716da2b111.gif)
温度的测量18b20
#include
#include
//*****************引脚配置************************************************
sbitIO=P3^7;
sbitRS=P2^6;
sbitRW=P2^5;
sbitE=P2^7;
//**************************************变量
unsignedchart;
unsignedcharfh;
unsignedcharno[]={"NO18B20!
"};
unsignedcharyes[]={"wenduwei:
"};
unsignedchari;
unsignedcharTL;
unsignedcharTH;
voiddelay(charx)//***延时函数;
{
inti,j;
for(j=0;jfor(i=110;i>0;i--);
}
voidwrite_com(unsignedcharcom)//*********1602写指令函数
{
RS=0;
RW=0;
P0=com;
delay(5);
E=1;
delay(5);
E=0;
}
voidwrite_date(unsignedchardate)//1602写数据函数;
{
RS=1;
RW=0;
P0=date;
delay(5);
E=1;
delay(5);
E=0;}
voidinit1602(void)//1602初始化函数
{
write_com(0x38);
delay(5);
write_com(0x38);
delay(5);
write_com(0x38);
delay(5);
write_com(0x08);
delay(5);
write_com(0x01);
delay(5);
write_com(0x06);
delay(5);
write_com(0x0c);
delay(5);
}
voidput_str(chari,charj,unsignedchardat)//1602显示器显示定位显示数字;
{
if(i==1)
write_com(0x80+j-1);
elsewrite_com(0xc0+j-1);
write_date('0'+dat);
}
voidput_str1(chari,charj,unsignedchardat)//1602显示器显示定位显示字符;
{
if(i==1)
write_com(0x80+j-1);
else
write_com(0xc0+j-1);
write_date(dat);
}
voidwritep(unsignedcharh[])//****显示字符串
{
chari=0;
while(h[i])
{
write_date(h[i]);
delay(5);
i++;
}
}
voidDelayMS(unsignedintT)//*****微秒延时
{
for(;T>0;T--);
}
bitini()//****18B20初始化函数
{
bitflag=0;
IO=1;
for(t=0;t<=2;t++);
IO=0;
for(t=0;t<=200;t++);
IO=1;
for(t=0;t<=10;t++);
flag=IO;
for(t=0;t<=200;t++);
returnflag;
}
unsignedcharreadonechar()//*******读一个字节;
{
unsignedchardat;
for(i=0;i<8;i++)
{
IO=1;
_nop_();
IO=0;
_nop_();
IO=1;
for(t=0;t<2;t++);
dat>>=1;
if(IO==1)
dat|=0x80;
else
dat|=0x00;
for(t=0;t<8;t++);
}
returndat;
}
voidwriteonechar(unsignedchardat)//****18B20写指令
{
for(i=0;i<8;i++)
{
IO=1;
_nop_();IO=0;
IO=dat&0x01;
for(t=0;t<10;t++);
IO=1;
for(t=0;t<1;t++);
dat>>=1;
}
for(t=0;t<4;t++);
}
voidread18b20()//*读18B20;
{
ini();
writeonechar(0xcc);
//initDS18B20();
writeonechar(0x44);
DelayMS(500);
ini();
writeonechar(0xcc);
//initDS18B20();
writeonechar(0xbe);
TL=readonechar();
TH=readonechar();
}
voidmain()
{
floatTN;
unsignedchartn;
unsignedinttd;
unsignedcharge,shi,bai,qian,m,n;
init1602();
while
(1)
{
if(ini()==1)
{
write_com(0x01);
writep(no);
delay(100);
continue;
}
else{
write_com(0x01);
writep(yes);
}
while
(1)
{
fh=0;
read18b20();
if(TH>7)
{
fh=1;
TL=~TL;
TH=~TH;
TL+=1;
if(TL==0);
TH++;
}
TN=TH*256+TL;
TN/=16.0;
tn=(unsignedchar)TN;
TN-=tn;
TN*=1000;
td=(unsignedint)TN;
qian=tn/100;
m=tn/10%10;
bai=tn%10;
shi=td/100;
n=td/10%10;
ge=td%10;
if(fh==1)
put_str1(2,1,'-');
else
put_str(2,1,qian);
put_str(2,2,m);
put_str(2,3,bai);
put_str1(2,4,'.');
put_str(2,5,shi);
put_str(2,6,n);
put_str(2,7,ge);
}
}
}