DS18B20读出温度我想问下面程序返回的temp里面是多少?是二进制么?temp返回给tem能和十进制数比较么?请明白的给解答一下.我考虑好久了~就是想不明白 非常感谢read_temp(){ ow_reset();
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/24 07:45:38
DS18B20读出温度我想问下面程序返回的temp里面是多少?是二进制么?temp返回给tem能和十进制数比较么?请明白的给解答一下.我考虑好久了~就是想不明白 非常感谢read_temp(){ ow_reset();
DS18B20读出温度我想问下面程序返回的temp里面是多少?是二进制么?temp返回给tem能和十进制数比较么?
请明白的给解答一下.我考虑好久了~就是想不明白 非常感谢
read_temp()
{
ow_reset(); //总线复位
delay(200);
write_byte(0xcc); //发命令
write_byte(0x44); //发转换命令
ow_reset();
delay(1);
write_byte(0xcc); //发命令
write_byte(0xbe);
temp_data[0]=read_byte(); //读温度值的低字节
temp_data[1]=read_byte(); //读温度值的高字节
temp=temp_data[1];
temp>4; // 取中间八位,即整数部分的值
display[3]=display[4]/100; // 取百位数据暂存
display[1]=display[4]%100; // 取后两位数据暂存
display[2]=display[1]/10; // 取十位数据暂存
display[1]=display[1]%10;
还有这个语句 tt=temp*0.0625; //得到真实十进制温度值
但是在keil里面不能编译为什么?
如果想把测得的转化为十进制数怎么办?(因为要与25℃比较大小的)
DS18B20读出温度我想问下面程序返回的temp里面是多少?是二进制么?temp返回给tem能和十进制数比较么?请明白的给解答一下.我考虑好久了~就是想不明白 非常感谢read_temp(){ ow_reset();
DS18B20出来的是一个16位的温度值
记得应该是高5位(可能是4位,具体看看手册)是符号位,是1的话表示负值
低4位是小数位
要得到一个真实的温度值的话,先判断高位是不是为1,是的话,为负值,然后把高位屏蔽
temp = temp & 0xf800
然后右移4位,去掉小数位
temp = temp >> 4;
这时候temp就是一个实际的温度值(只有整数部分),可以直接和25比较了