用DS18B20采集温度,有段程序不太理解,求大神指教。

2024-12-20 14:14:56
推荐回答(1个)
回答1:

temp*0.0625 就是实际温度值
但为了传输方便,又要转成整型,还想保留一位小数,那就乘10,
因为temp是整型的,temp=f_temp*10+0.5的时候,会发生强制类型转换,等号后面的数据的小数会直接被砍掉,不管是.1还是.9都会别忽略掉,+0.5是为了将≥0.5的小数部分进位到整数部分,实现四舍五入。

例如通过读DS08B20,将12位温度值0x19C赋值给temp
f_temp = temp * 0.0625 相当于412*0.0625=25.75
temp = f_temp*10 + 0.5 相当于25.75 * 10 + 0.5 = 257.5 + 0.5 = 258
这样最终得到temp = 258,传输到另一边直接在十位后面加小数点就得到25.8度