1樓:
//溫度值小數部分對照表
code uchar table_tempfh=;
//讀取ds18b20當前溫度
void read_temp(void)
上面的程式採用12位精度,查閱18b20手冊,lsb的最低四位代表小數,msb的最高5位為符號位,其餘的7位為整數部分,其解析度為0.0625°,根據此規律,整數就是兩位元組湊在一起,而小數部分則是最低四位的值,乘以0.0625,看你取幾位小數,再取整即可。
上述的對照表是取1位小數的結果,取四捨五入。比如現在lsb的最低四位是0111,那麼小數部分就是0.0625*7=0.
4375,如果取1位小數,就是「4」,兩位小數就是「44」..依次類推。
2樓:無知非罪
假如讀出的數值是:0000 0000 1111 1111,那麼該值的前五位表示溫度的符號,0000 0表示正溫度,1111 1表示負溫度,然後將值乘以0.0625,那麼得出的值就是溫度的實際值。
後9位000 1111 1111為256,256乘0.0625=?就是實際溫度值。
3樓:做而論道
很簡單,兩次讀出16位數,把它當成一個數來看。
其高5位是相同的,代表符號。
後面11位,是溫度的二進位制數,7位整數、4位小數。
就是這些,就是這麼簡單。
有很多程式,是故弄玄虛。
我想用微控制器寫個ds18b20溫度感測器的程式 但是讀出來的是二進位制 怎麼轉換成十進位制呢 5
4樓:匿名使用者
先解決一個18b20,不用系列號的。再解決一個18b20,使用系列號的。最後,再解決二個18b20,使用系列號的。現在,你弄的規模這麼大,難說在那一個步驟,有問題。
5樓:
舉例說明:八位二進位制為一位元組,那最大為(1111 1111)255.,先將這個數除100得到百位2,然後100取餘為55,將取餘後的值55再除以10得到十位5,再用10取餘得到個位數字5,那十進就為255;
再比如說二進位制為(0001 1101)29,先將這個數除100得到百位0,然後100取餘29,將取餘後的值再除以10得到十位2,再用10取餘得到個位數字9。不知道聽懂了沒有?
當然ds18b20輸出的溫度值為兩個位元組,即16位,其中高位元組的高5位為溫度符號位,即溫度為正還是負(零下),下來高位元組的低位與低位元組的高四位組成溫度的整數部分,低位元組的低四位為溫度值的小數部分。把11位的2進位制溫度值轉化為10進位制後在乘以0.0625便為所測的溫度,
好好看下ds18b20的資料手冊應該都能瞭解,希望對你有幫助。不懂可以再問!
51微控制器DS18B20溫度控制問題
我現在也在做有關ds18b20的程式,你說的在keil軟體中沒問題是指編譯沒問題?如果你的程式沒問題,你可以看看你的開發板的數碼管是共陰還是共陽的,也許你的段碼不正確也是有可能的。如果沒問題,你就要看看你的開發板晶振是多少的,你寫的軟體的時序是否配得上ds18b20的時序要求了。最後就是六位數碼管和...
c語言與微控制器
正如bai樓上的話,微控制器要du學模電數電,它還要學計zhi算機組成原理的,單dao片版機其實是大學的一個專業,要學權四年,要學得精並且能找到工作的話,恐怕你還是得看一下大學的課程包括什麼了。c語言的話理解容易但說學熟的話恐怕也不是一年半載的事情,你對電腦不熟這個是個很大的麻煩,我看過很多對電腦不...
微控制器C語言問題,微控制器C語言的一個問題 static bit a 什麼意思
c語言也不難,如果閣下肯花20小時,把c語言最基本的東西弄懂,肯定沒有什麼問題。我覺得微控制器開發中c語言用到最多的幾個部分基礎知識 比如資料型別,運算子,格式轉換 順序控制 if語句 switch語句 迴圈控制 while語句 for語句 陣列指標 其他一些c語言中的東西微控制器上用不了,也就大概...