//从ds18b20得到温度值
//精度:0.1C
//返回值:温度值 (-550~1250)
short DS18B20_Get_Temp(void)
{
u8 temp;
u8 TL,TH;
short tem;
DS18B20_Start (); // ds1820 start convert
DS18B20_Rst();
DS18B20_Check();
DS18B20_Write_Byte(0xcc);// skip rom
DS18B20_Write_Byte(0xbe);// convert
TL=DS18B20_Read_Byte(); // LSB
TH=DS18B20_Read_Byte(); // MSB
if(TH>7)
{
TH=~TH;
TL=~TL;
temp=0;//温度为负
}else temp=1;//温度为正
tem=TH; //获得高八位
tem<<=8;
tem+=TL;//获得底八位
tem=(float)tem*0.625;//转换
if(temp)return tem; //返回温度值
else return -tem;
}
int main(void)
{
while (DS18B20_Init())//初始化DS18B20,兼检测18B20
{
printf("DS18B20 Check Failed!\n\n");
delay_ms(100);
break;
}
while (1)
{
temp = DS18B20_Get_Temp();//获取温度值
printf("temp=%d\n\n", temp);
}
retun 0;
}
用手指压着ds18b20的打印结果:
temp=31
temp=34
temp=41
temp=45
temp=49
temp=52
temp=54
temp=56
temp=58
temp=59
temp=60
temp=62
temp=63
temp=64
temp=65
temp=65
temp=66
temp=67
temp=67
temp=68
temp=69
temp=69
temp=70
问题:这温度值显然不正确啊,为啥呢?
不过mini板自带的例程在lcd上显示的温度是正常的,用手指压着ds18b20自带例程工作也正常!!
|