|
溫度傳感器18B20是我用的最多的數字式溫度傳感器。
以前別人給的程序老是碰到兩個問題,要么是負溫度出不來,要么是不準。
最后還是要自己調程序。自己調的用著放心,看得安逸。
我現在調的程序如下:
//當得到低字節和高字節后,能顯示負溫度和精確到0.1度的程序如下:
read_temp()/*讀取溫度值并轉換*/
{uchar a,b;
ds1820rst(); //初始化18B20
ds1820wr(0xcc);//跳過讀序列號
ds1820wr(0x44);//啟動溫度轉換
ds1820rst();
ds1820wr(0xcc);//跳過讀序列號
ds1820wr(0xbe);//讀取溫度
a=ds1820rd(); //得到的低字節在a
b=ds1820rd(); //得到的高字節在b
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x0fff)
tflag=0; //正溫度時tflag為0
else
{tvalue=~tvalue+1;
tflag=1; //負溫度時tflag為1
}
tvalue=tvalue*(0.62487)+0.5; //溫度值擴大10倍,精確到1位小數
// 注意不能用書上說的0.625,否則在-50.0度至+150.0度之間總有不準的地方
//經過反復實驗,確定為0.62487,這樣全部的溫度都準了!
//不信?你就0.1度地一個一個數值去試試吧。
return(tvalue); 返回值
|
評分
-
查看全部評分
|