温度传感器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); 返回值 |
更多回帖