|
關(guān)鍵程序:
void readtemp_ds18b20() //讀取溫度
{
uint temp32;
uchar templ,temph;
EA=0;
rest_ds18b20();//復(fù)位
write_ds18b20(0xcc); //跳過讀序列號的操作
write_ds18b20(0x44); //啟動溫度轉(zhuǎn)換
delay_50us(15);
rest_ds18b20();//復(fù)位
write_ds18b20(0xcc); //跳過讀序列號的操作
write_ds18b20(0xbe); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
templ=read_ds18b20();//低八位
temph=read_ds18b20();//高八位
temp32=(temph<<8)|templ;//合并為十六位
if((temph&0xf0))//判斷溫度的正負(fù)性
{
temp32=~temp32+1;
temp32=temp32*0.625;//溫度值擴大10倍
temp=-temp32;//溫度為負(fù)數(shù)
}
else//為正數(shù)
{
temp=temp32*0.625; //溫度值擴大10倍
}
EA=1;
}
void show_18B20()//顯示18B20的溫度
{
uchar i;
LcdSetCursor(2,7); //顯示位置
i=temp/100;
write_LCD_data(tex[ i]);// //顯示百位,即溫度十位
i=temp/10%10;
write_LCD_data(tex[i ]);// //顯示十位,即溫度個位
write_LCD_data('.');//顯示小數(shù)點
i=temp%10;
write_LCD_data(tex[i ]);//顯示個位,即溫度小數(shù)部分
}
|
|