本帖最后由 JerryWu75 于 2013-1-3 11:46 编辑
你的问题提得有问题,你是想知道DS18B20送过来的数据怎样解析,而不是怎样显示!
你需要查看DS18B20的数据手册,DS18B20的暂存寄存器有9个字节:温度值的LSB,温度值的MSB,TH,TL,配置寄存器,保留,保留,保留,CRC.你需要取出温度值LSB和MSB,装配成一个16位整数uT=MSB<<8|LSB,然后检查高5位,如果高5位为11111,则表示温度是负,如果为00000表示温度为正,然后将负值通过补码运算后,得到T,然后乘以0.0625得到实际温度
uT=(unsigned int)温度值的MSB<<8|温度值的LSB
if((uT&0xf800)==0xf800){ //负温度;
uT=65536-uT;
uT*=0.0625; //得到实际温度;
显示负的实际温度;//这里用我之前给你的程序就可以显示温度了,不过你自己需要增加-号的显示,以及需要处理小数点的显示;
} else {
uT*=0.0625;
显示正的实际温度;//这里用我之前给你的程序就可以显示温度了,不过你自己需要增加+号的显示,以及需要处理小数点的显示;
}
关于小数点的显示可以考虑将实际温度值放大100倍或者10倍,取决于你希望显示到小数点后几位!
|