资深版主
 
- 积分
- 12012
- 金钱
- 12012
- 注册时间
- 2013-9-10
- 在线时间
- 427 小时
|
发表于 2014-3-1 08:37:37
|
显示全部楼层
回复【楼主位】feiante:
---------------------------------
我的这么干,能帮我测试一下么,这样算应该是对的,呵呵,主要是没0℃以下这个条件
void DS1820_Read_Temperature(void)
{
u8 Temp_DEC_HEX; //小数部分处理缓存
float Temp_DEC;
DS1820_Init();
DS1820_Write_Byte(DS1820_Ship_ROM); //跳过ROM
DS1820_Write_Byte(DS1820_Read_Scratchpad); //读取温度值命令
Temperature_Display[1] = DS1820_Read_Byte(); //读取LSB
Temperature_Display[2] = DS1820_Read_Byte(); //读取MSB
//温度值处理
if(Temperature_Display[2] > 7)
{
//取补码过程
Temperature_Display[2] = ~Temperature_Display[2]; //高位取反
Temperature_Display[1] = ~Temperature_Display[1] + 0x01; //低位取反加一
Temperature_Display[0] = 0x2d; //置温度‘-’
}
else Temperature_Display[0] = 0x20; //正温度不显示符号,显示正号填0x2b
//小数部分处理
Temperature_Display[8] = Temperature_Display[1] & 0x0f;
Temp_DEC_HEX = Temperature_DEC[Temperature_Display[8]]; //查表得到小数部分的HEX
Temp_DEC = (float)Temp_DEC_HEX * (float)0.0625;
//整数部分处理
Temperature_Display[8] = ((Temperature_Display[1] & 0xf0) >> 4) | \
((Temperature_Display[2] & 0x0f) << 4);
//显示处理
Temperature_Display[1] = Temperature_Display[8] % 1000 /100 + 0x30; //百位
Temperature_Display[2] = Temperature_Display[8] % 100 /10 +0x30; //十位
Temperature_Display[3] = Temperature_Display[8] % 10 + 0x30; //个位
Temperature_Display[5] = (u8)(Temp_DEC * 10) + 0x30; //小数点后一位
Temperature_Display[6] = (u8)(Temp_DEC * 100) % 10 + 0x30; //小数点后二位
// Temperature_Display[7] = (u8)(Temp_DEC * 1000) % 10 + 0x30; //小数点后三位
// Temperature_Display[8] = (u8)(Temp_DEC * 10000) % 10 + 0x30; //小数点后四位
if(Temperature_Display[1] == 0x30) Temperature_Display[1] = 0x20; //百位为0,不显示
if(Temperature_Display[2] == 0x30) Temperature_Display[2] = 0x20; //十位为0,不显示
} |
|