DS18B20温度转换问题

来源:百度知道 编辑:UC知道 时间:2024/06/12 18:44:26
rdbyte(void) //读取温度的一个字节
.......
tplsb=rdbyte();//温度值低位字节
tpmsb=rdbyte();//高位值高位字节
请问如何将读到的温度转换为十进制数?最好还包括一位小数。用数码管显示。先谢谢了!

把tplsb和tpmsb都是8位的合成一个16位的有符号数tt;temp为浮点数
t=tpmsb<<8;
t=t|tplsb;
if(t<0) //负温度
{
temp=(~t+1)*0.0625*10+0.5; //负温度时,取反加1再乘以0.0625得实际温度,乘10+0.5显示小数点一位,且四舍五入
}
else
temp=t*0.0625*10+0.5; //正温度
if(t<0)
bai='-'; //负温度时百位显示负号
else
bai=(const) temp/1000+0x30; //百位
shi=((const) temp%1000)/100; //十位
ge=((const) temp%1000)%100/10; //个位
shifen=((const) temp%1000)%100%10; //十分位