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