摘 要:人們在觀測時(shí)間的時(shí)候,常常想知道當(dāng)時(shí)的濕度、溫度、日期、星期等與日常生活密切的信息。采用51單片機(jī)設(shè)計(jì)了一種計(jì)時(shí)準(zhǔn)確、功能全面、成本低廉的萬年歷。該電子萬年歷通過定時(shí)中斷和按鍵同時(shí)顯示各種需要的信息,具有電路簡單,顯示直觀、讀取方便、功能多樣的優(yōu)點(diǎn)。
關(guān)鍵詞:電子萬年歷;單片機(jī);定時(shí)中斷;溫濕度
引言
電子萬年歷是一種應(yīng)用非常廣泛的日常計(jì)時(shí)工具,適合各類場合使用。LCD數(shù)字顯示的日歷鐘顯示清晰直觀、走時(shí)準(zhǔn)確、可以進(jìn)行夜視,并且還可以擴(kuò)展出多種功能。功能也越來越齊全,除了公歷年月日、時(shí)分秒、還有星期、溫濕度顯示及鬧鈴。
1 總體設(shè)計(jì)要求
1.1 實(shí)現(xiàn)的功能
此萬年歷主要功能是顯示:時(shí)、分、秒、年、月、日、星期、濕度、溫度、鬧鐘功能、整點(diǎn)報(bào)時(shí)、農(nóng)歷、平閏年。
數(shù)字式溫濕度計(jì)測溫范圍-40~80℃,濕度誤差范圍±3%RH用LCD液晶顯示。
1.2 系統(tǒng)基本方案選擇
KeilC51軟件提供豐富的庫函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,全Windows界面。KeilC51軟件目標(biāo)代碼生成效率很高,大多數(shù)情況下生成的匯編語言代碼都比較容易理解[1]。
1.3 硬件設(shè)計(jì)選定
本設(shè)計(jì)主控制系統(tǒng)采用AT89S52,獨(dú)立按鍵控制;時(shí)鐘電路由ds1302時(shí)鐘電路提供;溫濕度由DHT21數(shù)字式溫濕度傳感器采集;LCD1602液晶屏動(dòng)態(tài)掃描作為顯示。如圖1所示。
2 系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)
2.1 單片機(jī)主控制模塊的設(shè)計(jì)
主控制系統(tǒng)采用AT89S52,這是一種高性能、低功耗微控制器,具有8K的系統(tǒng)可編程Flash存儲(chǔ)器。與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。單片機(jī)的最小系統(tǒng)由單片機(jī)芯片、時(shí)鐘電路、復(fù)位電路組成[2]。
2.2 計(jì)時(shí)芯片
計(jì)時(shí)芯片采用DS1302,這是一種高性能實(shí)時(shí)時(shí)鐘電路[3],DS1302內(nèi)部有一個(gè)31×8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器。如果采用單片機(jī),還需要計(jì)數(shù)器,同時(shí)需要設(shè)置中斷、查詢等,消耗單片機(jī)資源,而采用DS1302時(shí)鐘芯片,就不存在這些問題。
2.3 數(shù)字溫濕度傳感器DHT21
溫濕度選擇DHT21數(shù)字溫濕度傳感器,這是一種溫濕度復(fù)合傳感器,數(shù)字信號(hào)輸出已經(jīng)校準(zhǔn)[4]。產(chǎn)品為4針單排引腳封裝。采樣周期不得低于最小值,否則會(huì)引起錯(cuò)誤。
3 系統(tǒng)的軟件設(shè)計(jì)
3.1 主程序及流程圖
本設(shè)計(jì)實(shí)現(xiàn)功能所用程序主要包含數(shù)字溫、濕度傳感器DHT21讀取數(shù)據(jù)子程序,液晶屏、計(jì)時(shí)芯片DS1302初始化程序、鍵盤按鍵等子程序和一個(gè)主程序。主程序首先執(zhí)行時(shí)鐘芯片和定時(shí)計(jì)數(shù)器T0、T1、T2的初始化程序,LCD1602液晶屏初始化子函數(shù),通過時(shí)鐘芯片DS1302進(jìn)行精確計(jì)時(shí),液晶屏顯示年、月、日、星期、時(shí)、分、秒和溫、濕度,然后通過無限循環(huán)進(jìn)入鍵盤函數(shù)按鍵等待,不斷查詢按鍵狀態(tài)及高溫檢測狀態(tài),溫度若超過30攝氏度,蜂鳴器發(fā)出報(bào)警聲響。通過按鍵子程序執(zhí)行年、月、日及時(shí)鐘設(shè)置,平、閏年查詢,鬧鈴加減設(shè)置及開關(guān),整點(diǎn)報(bào)時(shí)開關(guān)等子程序,執(zhí)行效果通過液晶屏顯示出來,設(shè)置完成后返回主程序。主程序如下所示,流程圖如圖2所示。
3.2 時(shí)間調(diào)整程序流程圖
設(shè)置日期時(shí)間介紹:本設(shè)計(jì)通過時(shí)鐘芯片DS1302控制計(jì)時(shí),該芯片計(jì)時(shí)相對(duì)精確??梢怨?jié)省單片機(jī)資源,具有閏年補(bǔ)償作用。通過按鍵進(jìn)入子程序?qū)崿F(xiàn)設(shè)置時(shí)間等相關(guān)功能,當(dāng)按下set(設(shè)置)鍵,時(shí)間計(jì)數(shù)會(huì)先暫停,溫、濕度暫停讀取更新值,等待設(shè)置完畢又開始正常工作。蜂鳴器會(huì)長響一次,顯示年份位置會(huì)有光標(biāo)閃爍,表示此時(shí)可以調(diào)節(jié)年份,如需調(diào)節(jié)年份,按add(加)鍵,dec(減)鍵即可對(duì)年份進(jìn)行加一、減一調(diào)節(jié)。由于程序設(shè)置公歷年份前兩位為20,所以只能顯示和調(diào)節(jié)21世紀(jì)的年份,年份調(diào)節(jié)完畢后,然后再按一次set(設(shè)置)鍵移位,顯示月份位置會(huì)有光標(biāo)閃爍,同樣的方法可以調(diào)節(jié)月份,同上,再按set鍵分別可設(shè)置日、時(shí)、分、秒。設(shè)置時(shí)間是關(guān)聯(lián)的,如星期會(huì)隨著日期變化而改變,而當(dāng)秒數(shù)加到60,分會(huì)自動(dòng)加一。溫度轉(zhuǎn)換開始命令由溫度轉(zhuǎn)換子程序發(fā)出,本設(shè)計(jì)采用1s顯示程序延時(shí)等待轉(zhuǎn)換的完成。
3.3 溫、濕度采集程序
首先清除收到數(shù)據(jù),接著讀取一次開始信號(hào),這是由傳感器數(shù)據(jù)用戶主機(jī)(MCU)發(fā)送的。DHT21由低功耗模式轉(zhuǎn)換到高速模式,主機(jī)開始信號(hào)結(jié)束后,DHT21送出40bit的數(shù)據(jù),發(fā)送響應(yīng)信號(hào),并觸發(fā)一次信號(hào)采集。從機(jī)的響應(yīng)信號(hào)是一個(gè)80us左右的低電平。溫濕度數(shù)據(jù)每隔2秒由主機(jī)讀取一次,經(jīng)過轉(zhuǎn)換,通過LCD1602液晶屏顯示。
4 指標(biāo)測試
硬件焊接完成后要進(jìn)行指標(biāo)測試,檢查錯(cuò)誤,通過檢查,手工焊接后接入電源,后用萬用表檢查各個(gè)芯片管腳電壓是否正常,再判斷短路現(xiàn)象,進(jìn)而修改完成。每個(gè)模塊都要進(jìn)行程序調(diào)試,先將各個(gè)子程序調(diào)好,檢查子程序運(yùn)行結(jié)果是否符合設(shè)計(jì)預(yù)期,最后逐步將子程序連接起來總調(diào),連接要注意各個(gè)模塊的參數(shù)傳遞是否正確,特別要注意子程序的現(xiàn)場保護(hù)和恢復(fù)。
5 結(jié)束語
本設(shè)計(jì)利用單片機(jī)實(shí)現(xiàn)了溫、濕度與萬年歷的共同顯示。并且可以校準(zhǔn)時(shí)間,查看陰歷日期,設(shè)置鬧鐘等功能。實(shí)現(xiàn)了萬年歷與溫、濕度的顯示,有很好的實(shí)用性。此設(shè)計(jì)還可以更進(jìn)一步完善,如通過按鈕設(shè)置溫、濕度上下限報(bào)警,進(jìn)而擴(kuò)展外圍電路比如控制空調(diào)、加濕器等自動(dòng)工作。
參考文獻(xiàn)
[1]王為青.單片機(jī)KeilcX51應(yīng)用開發(fā)技術(shù)[M].北京:人民郵電出版社,2005:10-16.
[2]謝維成.單片機(jī)原理及應(yīng)用c51程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2010:107-112.
[3]張俊謨.單片機(jī)中級(jí)教程[M].北京:北京航空航天大學(xué)出版社,2006:32-35.
[4]孫雪梅.實(shí)時(shí)時(shí)鐘芯片在單片機(jī)系統(tǒng)中的應(yīng)用[J].沈陽教育學(xué)報(bào),2005,14(2):24-30.