|
由于本論壇禁止直接求程序,禁止伸手黨,所以向大家請教一下大致的實現方法,理清頭緒后我自己來寫程序去實現,謝謝大家
設計要求
所設計的數字溫度計應具有如下功能:
將溫度顯示在LCD1602上。
當溫度超過或低于設定的閾值時,能夠通過LED閃爍報警。
設計思路:
采用單總線數字溫度傳感器DS1302提供溫度值。顯示模塊采用LCD1602,將溫度顯示在第1行。溫度超過或低于設定的閾值,分別用兩個LED進行閃爍報警
DS18B20內有9個字節的高速暫存器RAM單元,說明:第1字節和第2字節是單片機發給DS18B20溫度轉換命令后,經轉換所得的溫度值,以兩字節補碼形式存放其中。一般情況下,用戶多使用第1字節和第2字節。單片機通過單總線可讀得該數據,讀取時低位在前,高位在后。第3、4字節分別是由軟件寫入用戶報警的上下限值TH和TL。第5字節為配置寄存器,用來配置DS18B20的測溫分辨率,第6、7、8字節未用,為全1。第9字節是前面所有8個字節的CRC碼,用來保證正確通信。
配置寄存器(第5字節)各位的定義如下:最高位TM出廠時已被寫入0,用戶不能改變;低5位都為1;R1和R0用來設置分辨率:DS18B20的轉換時間與分辨率有關。當設定分辨率為9位時,轉換時間為93.75ms;……;當設定分辨率為12位時,轉換時間為750ms。
DS18B20內有9個字節的高速暫存器RAM單元,說明:第1字節和第2字節是單片機發給DS18B20溫度轉換命令后,經轉換所得的溫度值,以兩字節補碼形式存放其中。一般情況下,用戶多使用第1字節和第2字節。單片機通過單總線可讀得該數據,讀取時低位在前,高位在后。第3、4字節分別是由軟件寫入用戶報警的上下限值TH和TL。第5字節為配置寄存器,用來配置DS18B20的測溫分辨率,第6、7、8字節未用,為全1。第9字節是前面所有8個字節的CRC碼,用來保證正確通信。配置寄存器(第5字節)各位的定義如下:最高位TM出廠時已被寫入0,用戶不能改變;低5位都為1;R1和R0用來設置分辨率:DS18B20的轉換時間與分辨率有關。當設定分辨率為9位時,轉換時間為93.75ms;……;當設定分辨率為12位時,轉換時間為750ms。
當DS18B20采集的溫度為+125℃時,輸出為07D0H,則有:
實際溫度=(07D0H)/16=(0×163 +7×162 +13×161 +0×160)/16= 125℃當DS18B20采集的溫度為− 55℃時,輸出為FC90H,由于是補碼,需要先將11位數據(符號位不變,也不參加運算)減1取反得0370H。則有:
實際溫度=(0370H)/16=(0×163+ 3×162+ 7×161 + 0×160)/16=55℃
注意:負號則需要對采集的溫度的結果數據進行判斷后,再予以顯示。
|
|