江海職業(yè)技術學院機電汽車學院 張麗紅 張國祥
本文圍繞51單片機設計了電子鐘控制系統(tǒng),利用8位數(shù)碼管顯示“時”“分”“秒”,利用DS1302時鐘芯片、DS18B20溫度傳感器等芯片,實現(xiàn)了具有聲光報時、按鍵調(diào)時、鬧鐘響鈴、實時測溫的功能。本文電子鐘控制系統(tǒng)設計硬件結構簡單,軟件編程思路清晰明了,通過硬件的調(diào)試仿真,達到了設計要求。此電子鐘人機界面簡單、功能全,時間精準、穩(wěn)定性高、性價比高,易于市場推廣。
電子鐘已是生活中很常見的必需品(https://baike.baidu.com/ite m/%E7%94%B5%E5%AD%90%E9%92%9F/5999091?fr=aladdin),與傳統(tǒng)時鐘相比,具有準確性、直觀性、壽命長等特點?,F(xiàn)市場上大部分電子鐘產(chǎn)品都是由計數(shù)器、譯碼器等數(shù)字電路搭建而成的硬件產(chǎn)品。本文設計了利用廉價的51單片機作為控制器,簡化硬件結構,利用C51編程實現(xiàn)了軟硬件電子鐘產(chǎn)品。
圖1 硬件框圖
此電子鐘的硬件電路,是基于每年舉行的全國藍橋杯大賽單片機設計與開發(fā)項目指定的單片機開發(fā)板搭建的電路,即CT107D單片機綜合實訓平臺。此平臺上的單片機是IAP15F2K61S2單片機,此單片機是與51系列的AT89C51單片機兼容的。其電子鐘控制系統(tǒng)硬件框圖如圖1所示,以IAP15F2K61S2單片機為核心控制器,外圍電路包括由共陽極8位數(shù)碼管組成的數(shù)碼管顯示模塊;由LED指示燈和揚聲器組成的聲光報時模塊;由4個獨立按鍵組成的按鍵控制模塊;由時鐘芯片DS1302和32.768KHz晶振組成的時鐘模塊;由溫度傳感器DS18B20組成的溫度測量模塊。
電子鐘控制系統(tǒng)的電路原理圖如圖2所示,8位數(shù)碼管的段碼和位碼都接到P0口上,段碼的選通地址是P2=0xE0,位碼的選通地址是P2=0xC0;指示燈LED也由P0口提供信號,其地址是P2=0x80;揚聲器通過三極管接到P1.0口;4個獨立按鍵分別連接在P3.0、P3.1、P3.2、P3.3上;時鐘芯片DS1302的CE引腳接P1.3口,I/O引腳接P2.3口,SCLK引腳接P1.7口;溫度采集芯片DS18B20的數(shù)據(jù)DQ引腳接P1.4口。本次設計的電子鐘具有時鐘設置、鬧鐘設置、溫度顯示等功能。
圖2 電路原理圖
基于51單片機的電子鐘系統(tǒng)軟件程序編制采用的是C語言,遵循模塊化的編程思想(史永哲.計算機編程思想分析[J].陜西師范大學學報(自然科學版),2008,36(S1):179-181),以方便系統(tǒng)的調(diào)試、維護和升級,能夠保障程序的穩(wěn)定性,提高程序的設計效率。編程思路如圖3所示,其中把具有獨立功能的程序段編制成一個函數(shù),如顯示、按鍵讀取、按鍵處理等功能模塊,分別編制了顯示函數(shù)、按鍵讀取函數(shù)、按鍵處理函數(shù),逐步編寫調(diào)試,易于閱讀修改。此程序用了T0和T1兩個定時/計數(shù)器,數(shù)碼管動態(tài)顯示、獨立按鍵的鍵值讀入、溫度的采集都用定時器T0進行定時溢出中斷掃描,數(shù)碼管1毫秒動態(tài)掃描一次,按鍵10毫秒鍵盤掃描一次,溫度100毫秒讀一次,采用中斷方式以節(jié)省CPU的時間,時鐘設置與鬧鐘設置時的0.2秒的閃爍用定時器T1實現(xiàn),其它時間的定時用軟件實現(xiàn),讀時鐘DS1302、讀溫度傳感器DS18B20分別用單獨的C文件實現(xiàn)。
根據(jù)電子鐘的控制系統(tǒng)要求,先搭建程序框架,包括初始化、定時計數(shù)器的初值設定,主函數(shù)、顯示函數(shù)等。根據(jù)電路圖,采用存儲器編程方式,數(shù)碼管的段碼地址是0xC000,位碼地址是0xE000,共陽極數(shù)碼管的段碼先存放于數(shù)組中,把要顯示的數(shù)據(jù)也放于全局緩存數(shù)組里,這樣顯示函數(shù)與其它函數(shù)的通信就可通過緩存數(shù)組實現(xiàn),顯示函數(shù)就可成為一個獨立模塊。如圖4所示為數(shù)碼管顯示程序的調(diào)試結果,8位數(shù)碼管動態(tài)顯示12-00-02。
圖3 主函數(shù)流程圖
圖4 數(shù)碼管顯示調(diào)試結果
DS1302是美國的Dallas公司推出的一種高性能、低功耗、帶RAM的實時時鐘芯片(黃明強.DS1302在單片機系統(tǒng)中的應用[J].保定師范專科學校學報,2004(02):30-33)。DS1302的應用比較多,廣泛地應用于各種數(shù)字時鐘中(楊陽,李華.基于DS1302芯片的數(shù)字時鐘設計[J].無線互聯(lián)科技,2017(03):77-78)。本程序根據(jù)電子鐘控制系統(tǒng)的要求及硬件電路,編制了讀取時鐘信號的程序,以文件的形式加入控制系統(tǒng)中,DS的驅動代碼可直接在網(wǎng)上查到,只要用它的讀寫函數(shù)。初始化的寫函數(shù)如下:
讀函數(shù)是:Read_Ds1302(0x85);Read_Ds1302(0x83);Read_Ds1302(0x82);
讀DS1302時鐘信號程序調(diào)試結果如5所示,按“時”“分”“秒”顯示。
圖5 時鐘信號讀取結果
根據(jù)DS18B20的溫度寄存器格式(齊婉玉.用DS18B20進行溫度檢測的方法與技巧[A].中國儀器儀表學會.首屆信息獲取與處理學術會議論文集[C].中國儀器儀表學會,2003:2),分兩個字節(jié),高8位和低8位。讀取數(shù)據(jù)時需放到兩個8位的變量中。實際使用時,需給DS18B20發(fā)出指令代碼(吳嘉穎.基于單片機的地鐵低壓設備觸點溫度監(jiān)測系統(tǒng)的設計與實現(xiàn)[D].西南交通大學,2017),用以確定它的工作狀態(tài),其中分ROM指令和RAM指令,如果跳過ROM,則約定代碼為0xCC;RAM指令中,溫度變換約定代碼是0x44,可啟動DS18B20進行溫度轉換,結果存入內(nèi)部RAM中,讀RAM約定代碼是0xBE,可讀出RAM中的數(shù)據(jù)內(nèi)容。所以讀取溫度數(shù)據(jù)的代碼如下所示。
然后在主函數(shù)里調(diào)用rd_temperature()函數(shù),送顯示即可,如:wendu=rd_temperature();
讀DS18B20溫度值程序調(diào)試結果如圖6所示,采集溫度值是室溫實時溫度為15攝氏度。
圖6 讀DS18B20溫度值調(diào)試結果
根據(jù)電子鐘的控制系統(tǒng)要求,先搭建了程序框架,包括初始化、定時計數(shù)器的初值設定,主函數(shù)等,然后逐步實現(xiàn)顯示功能、按鍵讀取功能、按鍵處理功能、時鐘讀取功能、溫度采集功能的調(diào)試,最終達到電子鐘的控制系統(tǒng)要求,調(diào)試結果如圖7所示,左圖是電子鐘的初始狀態(tài),顯示0時、0分、0秒的同時,進行整點的聲光報時,右圖是通過按鍵進行調(diào)時。
圖7 基于51單片機的電子鐘調(diào)試結果
本文設計的基于51單片機的電子鐘控制系統(tǒng)通過2個月的試運行,時間誤差不到20秒,達到設計要求,此控制系統(tǒng)硬件設計結構簡單、成本低,軟件程序設計清晰明了,此電子鐘人機界面簡單,方便鬧鐘時間的調(diào)整,功能全,系統(tǒng)準確、穩(wěn)定性高,易于市場推廣。