下載手機汽配人

52單片機和DS18B20溫度傳感器,用數碼管顯示,共陽(4位),小數要求一位,還有個位和十位。十位老是0。

不知道怎么回事, while(1) { // int i; uchar shi=0; uchar ge=0; uchar xiaoshu=0; shi=tab[temp/1000]; //十位溫度 ge=tab[temp%1000/100]; //個位溫度 xiaoshu=tab[(temp%100)/10]; if(flag_get==1) //定時讀取當前溫度 { temp=ReadTemperature(); flag_get=0; } P0=shi; seg1=0; delay(20); seg1=1; P0=ge; seg2=0; delay(10); seg2=1; delay(20); P0=xiaoshu; seg3=0; delay(20); seg3=1; } //讀取溫度 unsigned char ReadTemperature(void) { unsigned char a=0; unsigned char b=0; int t=0; float tt=0; Init_DS18B20(); WriteOneChar(0xCC); // 跳過讀序號列號的操作 WriteOneChar(0x44); // 啟動溫度轉換 delay(200); Init_DS18B20(); WriteOneChar(0xCC); //跳過讀序號列號的操作 WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度 a=ReadOneChar(); b=ReadOneChar(); t=b; t<<=8; t|=a; tt=t*0.0625; t= tt*100+5; //放大10倍輸出并四舍五入 return(t); } 求大俠看看怎么回事!謝謝
提問者:網友 2018-08-26
最佳回答
程序錯在這句話上: unsigned char ReadTemperature(void) 返回值是uchar型,也就是8位數,返回的高位數據都被丟棄了。所以改成 unsigned int ReadTemperature(void)就可以了。
回答者:網友
產品精選
搜索問答
還沒有汽配人賬號?立即注冊

我要提問

汽配限時折扣

本頁是網友提供的關于“52單片機和DS18B20溫度傳感器,用數碼管顯示,共陽(4位),小數要求一位,還有個位和十位。十位老是0?!钡慕獯穑瑑H供您參考,汽配人網不保證該解答的準確性。