用DS18B20采集温度,有段程序不太理解,求大神指教。
答案:1 悬赏:60 手机版
解决时间 2021-03-25 12:13
- 提问者网友:低吟詩仙的傷
- 2021-03-25 08:25
用DS18B20采集温度,有段程序不太理解,求大神指教。
最佳答案
- 五星知识达人网友:舍身薄凉客
- 2021-03-25 09:53
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度
但为了传输方便,又要转成整型,还想保留一位小数,那就乘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度
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯