DS18B20延時(shí)函數(shù)版
//---------讀1字節(jié)函數(shù)------------
uchar readbyte()
{
uchar i,byte=0;
for(i=0;i<8;i++)
{
Dq=0;
byte>>=1;
Dq=1;
if(Dq)
{
byte=byte|0x80;
}
delay34us();
}
return byte;
}
//-----------寫(xiě)1字節(jié)函數(shù)--------
void writebyte(uchar byt)
{
uchar i;
for(i=0;i<8;i++)
{
Dq=0;
Dq=byt&0x01;
delay34us();
Dq=1;
byt>>=1;
}
}
//---------溫度讀取函數(shù)--------
uint readtemp()
{
uint temp=0;
uchar TH,TL;
if(init18b20()!=3)return 1;//啟動(dòng)失敗返回值1
writebyte(0xcc);
writebyte(0x44);
;;
if(init18b20()!=3)return 1; //啟動(dòng)失敗返回值1
writebyte(0xcc);
writebyte(0xbe);
TL=readbyte();
TH=readbyte();
temp=TH;
temp<<=8;
temp=temp+TL;
temp=temp*0.0625*10; //乘以10取出小數(shù)部分
return temp;
}
//------------主函數(shù)----------
void main()
{
uint num=0;
TMOD=0x50;
TH1=0xff;
TL1=0x60;
EA=1;
ET1=1;
TR1=1;
rst(); //看門(mén)狗
while(1)
{
start:num=readtemp();
if(num==1) //啟動(dòng)失敗數(shù)碼管最高位設(shè)置為1
{
warning=1; //啟動(dòng)失敗報(bào)警變量設(shè)置為 1
P0=seg7[1];
P2=0xfe;
delay(40);
goto start; //啟動(dòng)失敗重新啟動(dòng)判斷,直到成功才顯示溫度數(shù)值,然后啟動(dòng)判斷失敗1消失。
}
rst();//看門(mén)狗
warning=num;
P0=seg7[num/100];
P2=0xdf;
delay(10);
P0=seg7[num%100/10];
dec=0;
P2=0xbf;
delay(10);
P0=seg7[num%100%10];
dec=1;
P2=0x7f;
delay(10);
}
}
評(píng)論