//从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; }
//UPDATE: //修正输出值分辨率,修改返回属性为double //从ds18b20得到温度值 //精度:0.0625C //返回值:温度值 (-55~125) double DS18B20_Get_Temp(void) { u8 zhengfu; u8 TL,TH; short temRaw; double finalTemp; 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; zhengfu=0;//温度为负 }else zhengfu=1;//温度为正 temRaw=TH; //获得高八位 temRaw<<=8; temRaw+=TL;//获得底八位 finalTemp=(double)temRaw*0.0625;//转换 return zhengfu?finalTemp:-finalTemp; }