ds18b20温度计算书上程序:(T是读取的16位温度)T=T*0.625 a[0]=T/1000 (百位)a[1]=T/100%10(十位)a[2]=T/10%10 (个位)a[3]=T%10T不是2进制数么,怎么除以1000,比如125度为0000 0111 1101 0000,它怎么除1000啊?
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/16 08:34:16
ds18b20温度计算书上程序:(T是读取的16位温度)T=T*0.625 a[0]=T/1000 (百位)a[1]=T/100%10(十位)a[2]=T/10%10 (个位)a[3]=T%10T不是2进制数么,怎么除以1000,比如125度为0000 0111 1101 0000,它怎么除1000啊?
ds18b20温度计算
书上程序:
(T是读取的16位温度)
T=T*0.625
a[0]=T/1000 (百位)
a[1]=T/100%10(十位)
a[2]=T/10%10 (个位)
a[3]=T%10
T不是2进制数么,怎么除以1000,比如125度为0000 0111 1101 0000,它怎么除1000啊?
T=T*0.625 书上说是保留1位小数,扩大10倍 .真心不懂
ds18b20温度计算书上程序:(T是读取的16位温度)T=T*0.625 a[0]=T/1000 (百位)a[1]=T/100%10(十位)a[2]=T/10%10 (个位)a[3]=T%10T不是2进制数么,怎么除以1000,比如125度为0000 0111 1101 0000,它怎么除1000啊?
这个要看程序是怎么读温度的,用的应该是C语言吧?T应该是声明为整型或者长整型数据,也有可能是浮点型,读的时候应该是每读一位数据一些移位、或之类的运算.所以T就是读出来的数值的10进制表示.DS18B20的温度是用12位表示的,最高位表示正负.但一般8位的单片机只能读两次,共16位,也就是T中有4位是多余的.怎么从读到的数值中得到真实的温度值,你可以尝试一下位运算.
DS18B20的分辨率是0.0625,读到的温度数值要乘以0.0625才能得到真实的温度值.但你的百位、十位、个位都是整数,你计算的过程中必有强制数据类型转换.所以要保留一位小数就要乘以10,也就是把小数点后一位的数值提到个位中,这样在计算中才不至于把小数点后一位的数值丢掉.相应地在计算中也要把分子放大10倍,所以得到百位数要除以1000.