提問者:z78782013-06-13 00:00
rdbyte(void) //讀取溫度的一個字節(jié) ....... tplsb=rdbyte();//溫度值低位字節(jié) tpmsb=rdbyte();//高位值高位字節(jié) 請問如何將讀到的溫度轉(zhuǎn)換為十進(jìn)制數(shù)?最好還包括一位小數(shù)。用數(shù)碼管顯示。先謝謝了!
把tplsb和tpmsb都是8位的合成一個16位的有符號數(shù)tt;temp為浮點(diǎn)數(shù) t=tpmsb<<8; t=t|tplsb; if(t<0) //負(fù)溫度 { temp=(~t+1)*0.0625*10+0.5; //負(fù)溫度時,取反加1再乘以0.0625得實(shí)際溫度,乘10+0.5顯示小數(shù)點(diǎn)一位,且四舍五入 } else temp=t*0.0625*10+0.5; //正溫度 if(t<0) bai='-'; //負(fù)溫度時百位顯示負(fù)號 else bai=(const) temp/1000+0x30; //百位 shi=((const) temp%1000)/100; //十位 ge=((const) temp%1000)%100/10; //個位 shifen=((const) temp%1000)%100%10; //十分位
回答者:pnhahd2016-06-13 00:00
樓主你在時序上有些錯誤1。在轉(zhuǎn)換時沒有留夠足夠的轉(zhuǎn)換時間。根據(jù)DS18B20芯片手冊,9位精度轉(zhuǎn)換時間為93.75ms。12位精度轉(zhuǎn)換時間為750ms。而DS18B20默認(rèn)為12位精度。所以我加了750ms延時2。在寫函
提問者:rockchunyang2016-12-23
乘以256是為了將讀過來的數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制數(shù),再乘以25,然后在返回值里又左移了2,相當(dāng)于(b*256+a)*0.0625*100!這段程序應(yīng)該沒有判斷正負(fù)的語句!你多看看DS18B20的手冊就會明白了!那里面說的很明白
提問者:nisipm2013-07-16
任何外設(shè)的初始化或者命令如果能夠得到返回值確定完成或者未完成才能讓單片機(jī)選擇是否進(jìn)行下一步,更能讓編程人員得到錯誤信息正確的調(diào)試錯誤
提問者:wangyunfeng1382016-09-20
高五位S為符號位,分辨率為0.0625。正溫度把16進(jìn)制數(shù)轉(zhuǎn)成10進(jìn)制即可;負(fù)溫度把16進(jìn)制數(shù)取反后加1再轉(zhuǎn)成10進(jìn)制數(shù),第一個是00FA是(15*16+10)*0.0625=15.62度,第二個是0032是(3*16+
提問者:e7w9e6o4a22014-11-16
1:第一個劃橫線部分為延時函數(shù)大約為11.4ms,為什么要這么延時?數(shù)據(jù)手冊上說了嗎?我特意看了下英文手冊,10位轉(zhuǎn)換的時間就是187.6ms,12位轉(zhuǎn)換的時間是750ms,你看的那個延時時間還不一定對。2:第二個劃橫線
提問者:ChinaGHT2016-08-05
LCD驅(qū)動程序/*************************************************************//*
提問者:zhangpan6862017-01-10