下載手機(jī)汽配人

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

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

我要提問(wèn)

汽配限時(shí)折扣

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