|
温度传感器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); 返回值
|
评分
-
查看全部评分
|