![]() |
發布時間: 2018-1-18 00:09
正文摘要:DS18B20測溫和超聲波測距程序中的問題 DS18B20測溫中,測得的數據需要加0x30 超聲波測距程序中不需要加 用的同一個液晶, 為什么,謝謝 |
+0x30就變成了對應數字的的ASCII碼,也就是數字9變成了字符'9' |
DS18B20 溫度不太溫度 數據精度不行 換其他傳感器吧 |
應該還是要加0x30的,要么就是12864顯示函數里面另有設置識別數字然后加0x30,而且感覺這兩個代碼不是同一個程序啊![]() |
qq1105424012 發表于 2018-1-18 09:56 非常感謝!!!! |
有可能直接定義數組 unsigned char code disbuff[30] = {'0','1','2','3','4','5','6','7','8','9','.','-','M','C','D','I','S','T','A','N','C','E','T','H','E',':'}; 或者在別的地方轉換 自己認真看看把 |
需要看看lcd12864_SCharDisplay的函數。 有可能在其他地方加。 |
ahshmj 發表于 2018-1-18 10:00 同樣的寫液晶程序,為什么超聲波模塊測得的數據就不需要轉換呢 |
這個和=與==在程序中和實際中的狀態不一致時一個道理 |
本帖最后由 ahshmj 于 2018-1-18 10:02 編輯 是將數值轉換成顯示字符的代碼,就是“ASCII”碼。 ACSII碼的從0x30~0x39是0~10 。也可以是 +48(十進制),和+0x30一樣。 你可以網上搜索“ASCII”有詳細的解釋。 因為操作顯示部分時,LCD的內部使用的是ACSII碼,所以需要轉換,而單片機內部處理18b20的數據是不需要轉換的。 |
1+0X30=0X31 即 ASCII 對應的 1 2+0x30=0x32 即 ASCII對應的2 在程序里,我們得到的是BYTE 數組,需要把它轉換成十進制,即07D0H轉換為+125(℃)。 在LCD中,字庫是ASCII值,因此需要+0x30, 即 125/100=1+0x30 對應ASCII 1 LCD顯示百位 ‘1’ 125/10%10=2+0x30 對應ASCII 2 LCD顯示百位 ‘2’ 125%10=5+0x30 對應ASCII 1 LCD顯示百位 ‘5’ ℃可由° 和字母C兩個字符的ASCII碼來顯示,分別為° (0XDF)和 C(0X43) |