沈陽市第二十中學 鮑春光
東北大學信息科學與工程學院 許 楠
多功能時鐘的研制
沈陽市第二十中學 鮑春光
東北大學信息科學與工程學院 許 楠
設計了一個基于單片機80C51的電子時鐘。時鐘系統(tǒng)通過搭建硬件平臺實現(xiàn)模塊化軟件編程,完成了中斷模塊、顯示模塊、鬧鐘模塊、時間調整等模塊的設計,具有顯時、調時、三組定時以及整點報時功能,同時電子鐘還設計了掉電保護電路,當電源斷電時能保存時鐘當前定時設計的全部數據。本系統(tǒng)通過實際運行與測試,達到設計要求。
多功能時鐘;80C51;時鐘控制;中斷程序;數碼管
單片機[1]誕生于20世紀70年代末,經歷了SCM、MCU、SOC[2]三大階段。隨著微電子技術、IC設計、EDA工具的發(fā)展,單片機已滲透到我們生活的各個領域。
單片機中最常見的是數字鐘[3],數字鐘是一種采用數字電路技術,通過顯示模塊,來顯示年、月、日、時、分、秒的計時裝置[4],是人們日常生活中不可少的必需品,廣泛應用于各種場合。現(xiàn)如今,數字時鐘已經飛速發(fā)展,已不單單只滿足于簡單顯示時間,而是在數字鐘的基礎上,增加各種傳感器,實現(xiàn)定時自動報警[5]、整點報時、學校里的自動打鈴或定時自動響音樂等。所有這些,都是以鐘表數字化為基礎的。基于以上的研究基礎,設計了一種顯時、調時、定時以及具有整點報時功能的電子鐘。本文將從硬件設計、軟件設計和系統(tǒng)調試等方面詳細論述。
1.1功能要求
硬件功能設計:時鐘系統(tǒng)采用單片機80C51芯片[6]為主CPU,搭配時鐘日歷芯片DS1302及晶振電路等構成最小系統(tǒng)。系統(tǒng)由單片機80C51、晶振電路、按鍵電路、時鐘芯片DS1302電路、復位電路、數碼管顯示及驅動電路和報時電路等模塊組成。利用單片機內部的定時器/計數器編程定時方法,能夠完成的功能包括:時間實時顯示、時分秒的調整、任意時段鬧鐘定時和整點報時等。而且在硬件電路設置四個按鍵,在軟件功能上分別定義四個按鍵為SET、ALM、UP和DOWN,利用按鍵可以很方便的對時鐘和鬧鐘進行調整。
在使用調時功能時,主要利用SET 鍵、UP 鍵和DOWN 鍵進行操作。具體操作方法如下:
(1)按SET鍵一下,可以調整“時”的單元,“時”單元區(qū)域閃爍,按UP 鍵或DOWN 鍵,調整當前時間;
(2)按SET鍵兩下,調整顯示“分”的單元;按SET 鍵三下,調整顯示“秒”的單元;按SET鍵四下,調整時間結束,“時、分、秒”區(qū)域都沒有閃爍,時鐘系統(tǒng)進入正常走時程序。
利用ALM鍵、UP 鍵和DOWN 鍵來調整鬧鐘單元。調整方法與調時功能基本一致。其中ALM鍵相當于時鐘設置里的SET鍵功能。另外兩個按鍵UP 鍵和DOWN 鍵分別為加1 鍵和減1功能鍵,其中利用加1功能時,“時”單元以24 為限,“分”、“秒”單元以60 為限,調整時間時超出限值則返回數值0,從限值開始重新算起。當使用DOWN 鍵來實現(xiàn)減 1 功能時,“時”、“分”、“秒”三個單元都是以0為限,超出限值時,由于“時”單元以24小時制計數,因此減1操作低于0時返回數字23,“分”、“秒”單元則返回數字59,從限值開始重新算起。 當時間到達設置的鬧鐘時間時,蜂鳴器啟動,響聲4秒(或響起一段音樂),以起到提示作用。整點報時功能的設置是當時鐘走到整點時,蜂鳴器響2秒,以提示當前時間為整點。
1.2電子時鐘系統(tǒng)設計方案
采用基于單片機的數字時鐘設計通常有三種方法:
(1)硬件電路方式設計時鐘。
(2)采用軟件編程實現(xiàn)時鐘功能。
(3)通過單片機內部的定時器/計數器實現(xiàn)時鐘功能。三種方案詳細優(yōu)缺點對比如下表:
方 案 特 點硬件電路即采用主CPU和時鐘芯片,利用主芯片外圍的晶振電路,給時鐘系統(tǒng)提供很高精度的時基信號??梢缘竭_精確計時,編程簡單,使用非常方便。但是硬件成本相對較高且調試參數不方便。軟件編程這種實現(xiàn)方法依靠基本的編程語言實現(xiàn)時鐘功能,硬件電路要求簡單,但僅依靠軟件編程很難控制時間精度。缺點是通過軟件延時程序實現(xiàn)秒的加1功能,占用過多的CPU 的時間。單片機定時器/計數器功能硬件電路采用普通單片機最小系統(tǒng),利用單片機內部定時器功能,編寫中斷函數實現(xiàn)時鐘計數。特點是硬件電路比較常見,定時器函數定時精準。
綜合比較上述三種方案,本文采用第三種,即利用單片機80C51內部的定時器/計數器功能實現(xiàn)計時。不僅設置參數簡單,方案容易實現(xiàn),而且不占用CPU 工作時間。其中定時器概念:是對單片機內部的標準時鐘脈沖進行計數。單片機定時器實現(xiàn)原理如下:單片機內部的16位定時器由高8位和低8位兩個寄存器組成,分別是T0和T1。定時器溢出后標志位TF0(或TF1)由0變1,由此引發(fā)定時器中斷。本文電路設計采用12MHz晶振,對應的脈沖周期是1微秒,計滿65536個脈沖所對應的時間就是65.536ms,因此要根據設定的時間長短,來設置相應的定時器初值。定時器的工作方式也有四種,當定時器T0(或T1)啟動后,按設定的工作方式獨立進行計數,不再占用CPU時間。當定時器計滿溢出時,TF0(或TF1)置1,向CPU發(fā)出中斷請求信號。
在具體進行程序設計時,主程序中只需對定時器/計數器初始化,時鐘的形成就在中斷服務程序中實現(xiàn),并調用顯示子程序和控制子程序。其中顯示模塊是采用數碼管動態(tài)顯示的方法,利用三極管作為驅動電路,軟件控制段選位選信號??刂颇K包括對按鍵和蜂鳴器的編程控制,使對時鐘的使用更加便捷。
多功能時鐘系統(tǒng)硬件電路設計包括:主芯片模塊,數碼顯示模塊、按鍵控制電路、時鐘電源模塊、蜂鳴器控制模塊等幾部分。硬件電路設計框圖如圖1所示。
圖1 硬件系統(tǒng)功能框圖
本文時鐘系統(tǒng)以單片機80C51為核心,結合時鐘日歷芯片DS1302[7],來完成電子時鐘的主要功能。顯示模塊使用通用的8段共陰極數碼管。P0口輸出段數碼數據P2.0~P2.5口作列掃描輸出,P1.0,P1.1和P1.2口接三個按鈕開關以實現(xiàn)調時、調分功能。下面詳細介紹時鐘電路設計。
圖2 時鐘系統(tǒng)電路圖
時鐘基準電路設計:單片機工作的時間基準是由時鐘電路來完成的,本文設計的時基電路基本組成是在主芯片的XTAL1和XTAL2引腳間接一只12M晶振及兩只30pF電容,為電路提供時鐘頻率。時鐘以單位秒計時,本文程序設計時,1秒定時的實現(xiàn)方法為,首先把定時器的定時時間定為50ms,注意初始值的設置,然后采用中斷方式進行次數累計,程序循環(huán)運行20次,最后得到1秒的準確計時。
數碼顯示電路設計:數碼顯示模塊采用4位共陽極LED數碼管顯示器,與單片機P0端口相連接,即數碼管的各引腳依次連接到單片機的P0.1、P0.2、P0.3、P0.4、P0.5、P0.6、P0.7,R是限流電阻。其中數碼管的驅動電路由V1~V4三極管組成,四個三極管的集電極分別與4位LED數碼管的共陽極引腳相連接,而三極管的基極通過限流電阻分別接在單片機P2端口的P2.0~P2.3引腳上。其驅動電路工作過程如下:P2.0輸出為低電平時,V4三極管導通,與其相連的共陽極數碼管顯示器開始工作;P2.0輸出為高電平時,V4三極管截止,與其相連的數碼管顯示器停止工作。時鐘系統(tǒng)電路如圖2所示。
本文時鐘系統(tǒng)的軟件設計主要包括:
(1)主程序設計;
(2)顯示程序設計,其中又由顯示主函數、LED顯示子程序、定時器中斷函數、鍵盤掃描程序和其他功能函數組成;
(3)系統(tǒng)子程序設計,包括:鬧鐘功能子程序設計和其他指示標志的程序設計等。
在整個軟件設計流程中,各功能模塊都采用子程序設計方法,也是為了后期軟件系統(tǒng)維護方便,增加了程序的通用性。在主函數中,先對單片機內部的各寄存器等進行初始化設置,然后根據需求循環(huán)調用各子函數。在子函數的設計中,分別編寫了按鍵處理子函數、數碼顯示子函數和定時器中斷服務子函數等。這里需要重點說明的是,在硬件電路設計時,使用按鍵操作進行時鐘和鬧鐘的調整。在編寫按鍵處理子函數時,程序通過判斷鍵盤的輸入情況調用不同的子程序功能函數,達到友好的人機交互功能。
3.1系統(tǒng)主程序設計
軟件主程序的設計流程如下:
(1)定義頭文件、主函數的相關變量和常量;
(2)初始化單片機內部的各種寄存器和定時器參數;
(3)循環(huán)程序的編寫,這里根據需要調用不同的子程序函數,如有按鍵按下或者到達整點時間時,程序就轉入相應的處理函數,實現(xiàn)相應功能。
主程序通過調用子程序,將各部分功能有機地組合到一起,并不斷循環(huán)掃描K1~K4功能鍵。在此主程序里只有K1鍵賦予了設置目前時間的功能,而其他K2~K4鍵為空鍵,預留以后使用。如果按下K1鍵,則執(zhí)行相應按鍵控制程序,按鍵控制程序執(zhí)行完畢后,仍然回到主程序循環(huán)掃描。
3.2系統(tǒng)顯示程序設計
本設計中計時采用定時器T0中斷完成,其余狀態(tài)循環(huán)調用顯示子程序函數及鍵盤掃描子函數,當端口開關按下時,轉入相應調時功能。
LED顯示子程序:利用DS1302芯片提供時間數據,通過單片機的指令調用,將時間數據送到數碼管模塊顯示,其程序實現(xiàn)流程圖如圖3所示。
圖3 顯示子程序流程圖
其中工作指示閃爍子程序如下:
1. LED_BL:
2. MOV R4,#6;閃爍次數
3. LE1: CPL WLED;位反向輸出
4. MOV R5,#25
5. ACALL DELAY;延時50ms
6. DJNZ R4,LE1
7. RET ;子程序返回
第2行語句是賦予閃爍次數,即每調用一次該子程序,工作指示燈閃爍6次,第3行語句位反向輸出,即原來截止,現(xiàn)在導通;原來導通,現(xiàn)在截止。第4行語句通過對R5賦值來調節(jié)DELAY的延時時間,其延時時間為50ms。第5行語句調用DELAY延時子程序使工作燈亮(或滅)后停一段時間。
定時器[8]中斷函數:本文定時器函數的設計,采用定時器/計數器T0,工作方式1,定時時間設為50ms,這里要注意初值的設定,然后程序循環(huán)在不停的對數碼管動態(tài)掃描,同時等待中斷的發(fā)生。在中斷服務程序設計中,分別對秒、分、時單元進行控制,設置初值使計數器對50ms計數,循環(huán)20次則到整秒,對秒單元加1;當秒單元累計循環(huán)60次后則對分單元加1,同時秒單元清0;分單元方法同秒單元;當時單元加到24時則對時單元清0,即為一整天計數周期。
定時器子程序由INIT_TIMER函數實現(xiàn),它可以實現(xiàn)每隔5ms產生一次中斷信號,它是時鐘標準時間的來源和保證。下面是定時器子程序INIT_TIMER:
INIT_TIMER;定時器T0初始化
MOV TMOD,#00000000B;設置定時器T0工作模式0
MOV TLO,#(8192-5000)MOD 32;加載低字節(jié)計數初值
MOV TH0,#(8192-5000)/32;加載高字節(jié)計數初值
MOV IE, #10000010B;啟用定時器T0中斷
SETB TRO ;啟用定時器T0中斷計時
RET ;子程序返回
定時器T0設置為工作模式0狀態(tài),定時器每隔5ms中斷一次,在晶振頻率為12MHz時,此5ms的初值為5000,但實際上程序還要作其他運算,使得時間偏長,因此此值需經實驗做些調整。
系統(tǒng)調試主要分為硬件電路檢測和軟件程序調試兩部分。硬件電路檢測時,先從外觀查看電路板的連線是否正確,各使能端的接線是否牢固,再用萬用表測試電路板是否有短接現(xiàn)象、電源部分是否都連接正常,這些部分都檢查無誤后方可接通電源,接通電源后,如果發(fā)現(xiàn)有芯片燒毀或冒煙等現(xiàn)象要立即切斷電源進行處理,然后重新檢查硬件電路。硬件電路檢查無誤后,仍然沒有指示燈亮或者顯示時鐘不正常,再檢查軟件編程問題,多次修改后,直至時鐘電路正常工作。
在系統(tǒng)調試過程中主要遇到幾個關鍵性問題。例如檢測部分信號不穩(wěn)定,經檢查該問題與周圍的干擾有密切關系,將檢測部分的外圍電路進行了整理,使檢測信號很準確的檢測到。還有鬧鈴模塊的方案起初采用了三極管進行控制,但是這樣設計影響了控制的精度,因此改為采用單片機I/O口直接控制指示燈及開關。不僅節(jié)省了硬件資源,還提高了系統(tǒng)的穩(wěn)定性。
經過系統(tǒng)硬件模塊的改進和軟件的優(yōu)化后,再將程序下載到硬件電路,設置初始時間為14:28。上電后LED數碼管顯示“14:28”,之后開始走時。觀察32分鐘之后,數碼管顯示“15:00”,證明電子鐘電路系統(tǒng)正常運行。實際實物電路如圖4所示。
本文設計的時鐘系統(tǒng),經過查閱大量的資料和反復的調試,到達了日常使用的標準,經過長時間的系統(tǒng)測試,數字時鐘系統(tǒng)走時準確,并且硬件成本較小,充分發(fā)揮了軟件編程的優(yōu)點。在本次設計中,也學到很多電子產品開發(fā)的基本知識和技能,提高了動手能力,也有興趣可以進一步實現(xiàn)更多功能,;例如下一步要實現(xiàn)遙控調時、校時和顯示農歷日期、節(jié)氣等功能。但局限于本人的水平,本系統(tǒng)還有需要改進和提高的地方,例如選用更高級的主芯片系統(tǒng),增加更多的傳感器類型,而且在軟件算法上還需要做進一步的優(yōu)化與改進等。
[1]王守中,聶元銘.51單片機開發(fā)入門與典型實例[M].北京:人民郵電出版社,2009.
[2]Baekseok Ko; Joowon Kim.Simplified Chip Power Modeling Methodology Without Netlist Information in Early Stage of SoC Design Process[J].Published in: IEEE Transactions on Components, Packaging and Manufacturing Technology,2016,99:1-9.
[3]馬慶勇,吳中明.基于單片機的多功能時鐘控制電路[J].電子科技,2009,22(3):56-59.
[4]魯廣英.基于單片機電子萬年歷的設計與實現(xiàn)[J]. 硅谷,2010(12):57-57.
[5]李昊然,陳曉鈺,劉玉玲,王曉萍.基于80C51 的智能報警系統(tǒng)設計[J].計算機技術與發(fā)展,2012,22(5):226-228.
[6]楊金巖等.8051單片機數據傳輸接口擴展技術與應用實例[M].人民郵電出版社,2005,(7)143-147.
[7]李偉躍.基于時鐘芯片DS1302 的萬年歷的設計[J].科技創(chuàng)新導報,2012,9:20-21.
[8]冉秦翠,蒲利春,彭厚德,汪海軍.多功能電子時鐘[J].物理實驗,2014,34(4):36-40.
鮑春光(1999—),男,山東乳山人,研究方向:電子技術等。
國家自然科學基金資助項目(11273001)。