18b20默认分辨率位0.0625,但是我测出来的温度每次变化都是0.5,这样的话分辨率应该是0.5的, 这不是相矛盾了么?关键程序如下:
unsigned int get_one_temperature(void)
{
int Temp_l,Temp_h,Temp;
DS18b20_Init();
DS18b20_write_byte(Skip_ROM);
DS18b20_write_byte(Convert_Temperature);
__delay_cycles(500);
DS18b20_Init();
DS18b20_write_byte(Skip_ROM);
DS18b20_write_byte(Read_Scratchpad);
Temp_l=DS18b20_read_byte();
Temp_h=DS18b20_read_byte();
Temp_h<<=8;
Temp=Temp_h|Temp_l;
if(Temp<0) //负温度
{
Temp=(~Temp+1)*0.0625*10+0.5; //负温度时,取反加1再乘以0.0625得实际温度,乘10+0.5显示小数点一位,且四舍五入
}
else
Temp=Temp*0.0625*10+0.5; //正温度
return Temp;
} |