ds18b20温度计算
书上程序:(T是读取的16位温度)T=T*0.625a[0]=T/1000(百位)a[1]=T/100%10(十位)a[2]=T/10%10(个位)a[3]=T%10问题...
书上程序:
(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倍 。 真心不懂
求指导啊,非常感谢! 展开
(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倍 。 真心不懂
求指导啊,非常感谢! 展开
1个回答
展开全部
这个要看程序是怎么读温度的,用的应该是C语言吧?T应该是声明为整型或者长整型数据,也有可能是浮点型,读的时候应该是每读一位数据一些移位、或之类的运算。所以T就是读出来的数值的10进制表示。DS18B20的温度是用12位表示的,最高位表示正负。但一般8位的单片机只能读两次,共16位,也就是T中有4位是多余的。怎么从读到的数值中得到真实的温度值,你可以尝试一下位运算。
DS18B20的分辨率是0.0625,读到的温度数值要乘以0.0625才能得到真实的温度值。但你的百位、十位、个位都是整数,你计算的过程中必有强制数据类型转换。所以要保留一位小数就要乘以10,也就是把小数点后一位的数值提到个位中,这样在计算中才不至于把小数点后一位的数值丢掉。相应地在计算中也要把分子放大10倍,所以得到百位数要除以1000。
DS18B20的分辨率是0.0625,读到的温度数值要乘以0.0625才能得到真实的温度值。但你的百位、十位、个位都是整数,你计算的过程中必有强制数据类型转换。所以要保留一位小数就要乘以10,也就是把小数点后一位的数值提到个位中,这样在计算中才不至于把小数点后一位的数值丢掉。相应地在计算中也要把分子放大10倍,所以得到百位数要除以1000。
追问
书中T被定义为uint
意思也就是当16位2进制赋值T时,T最后得到的是10进制的数?
追答
uint,也是一样的,是一个10进制数。你好好地了解一下C语言的数据类型
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |