久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > DS18B20延時函數版

DS18B20延時函數版

作者: 時間:2016-11-30 來源:網絡 收藏

//---------讀1字節函數------------
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;
}

//-----------寫1字節函數--------
void writebyte(uchar byt)
{
uchar i;
for(i=0;i<8;i++)
{
Dq=0;
Dq=byt&0x01;
delay34us();
Dq=1;
byt>>=1;
}
}

//---------溫度讀取函數--------
uint readtemp()
{
uint temp=0;
uchar TH,TL;
if(init18b20()!=3)return 1;//啟動失敗返回值1
writebyte(0xcc);
writebyte(0x44);
;;
if(init18b20()!=3)return 1; //啟動失敗返回值1
writebyte(0xcc);
writebyte(0xbe);
TL=readbyte();
TH=readbyte();
temp=TH;
temp<<=8;
temp=temp+TL;
temp=temp*0.0625*10; //乘以10取出小數部分
return temp;
}


//------------主函數----------

void main()
{
uint num=0;
TMOD=0x50;
TH1=0xff;
TL1=0x60;
EA=1;
ET1=1;
TR1=1;
rst(); //看門狗
while(1)
{
start:num=readtemp();
if(num==1) //啟動失敗數碼管最高位設置為1
{
warning=1; //啟動失敗報警變量設置為 1
P0=seg7[1];
P2=0xfe;
delay(40);
goto start; //啟動失敗重新啟動判斷,直到成功才顯示溫度數值,然后啟動判斷失敗1消失。
}
rst();//看門狗
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);
}
}


上一頁 1 2 下一頁

關鍵詞: DS18B20延時函

評論


技術專區

關閉