請問各位大佬,我的DS18B20負數顯示時,溫度在0到-15.9就可以正常顯示,到-16就顯示為-0,-17就顯示-1·····這個是怎么回事?大佬們有啥解決方法嗎?附上相關代碼和仿真運行圖。相關代碼:
unsigned char tempL=0; //設全局變量
unsigned char tempH=0;
unsigned char tempA;
unsigned char tempB;
unsigned char tempshi;
unsigned char tempge;
unsigned char xiaoshu1; //小數第一位
unsigned int zb;
bit fg=1; //溫度正負標志
······
//讀溫度值(低位放tempL;高位放tempH;)
void ReadTemperature(void)
{
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳過讀序列號的操作
WriteOneChar(0x44); //啟動溫度轉換
delaynms(250); //轉換需要一點時間,延時
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳過讀序列號的操作
WriteOneChar(0xbe); //讀溫度寄存器(頭兩個值分別為溫度的低位和高位)
tempL=ReadOneChar(); //讀出溫度的低位LSB
tempH=ReadOneChar(); //讀出溫度的高位MSB
tempA=(tempH<<8)|tempL;
if(tempH>0x07) //最高位為1時溫度是負
{
tempA=~tempA+1;
zb=12;
tempB=tempA*(0.625)+0.5;
}
else
{
tempB=tempA*(0.625);
zb=0;
}
tempshi=tempB/100;
tempge=tempB%100/10;
xiaoshu1=tempB%10;
}
-15.9.png (34.66 KB, 下載次數: 27)
下載附件
2020-4-29 16:41 上傳
-16.png (32.91 KB, 下載次數: 45)
下載附件
2020-4-29 16:41 上傳
-17.2.png (31.95 KB, 下載次數: 49)
下載附件
2020-4-29 16:41 上傳
|