周 婷
(廣東理工職業學院,廣東廣州 510030)
數字鐘是可以實現時、分、秒計時的鐘表,應用非常廣泛,它與傳統的機械時鐘相比較,數字鐘擁有更加直觀、精度高且使用壽命更長等優點[1]。數字鐘給人們的生活工作帶來了非常多的便利,而且增加了很多實用功能,比如整點報時、按時打鈴、各種家用電器的自啟動等,所以研究數字鐘有著非常重要的意義。
數字鐘的設計方法有很多,可以使用數字電路中的觸發器、計數器等組成數字鐘,也可以采用專用的電子時鐘芯片加上外圍電路組成,還可以使用單片機實現,這些方法各有優勢[2-3],由數字電路組成的數字鐘主要由振蕩器、分頻器、計數器、譯碼顯示電路、校時電路等組成,還可以增加擴展功能,如整點報時電路、倒計時電路等。本文采用單片機AT89C51 實現,單片機式數字鐘編程更加靈活、功能也更方便擴展。
單片機設計的數字鐘主要包括AT89C51 單片機、晶體振蕩電路、數碼顯示電路和秒分時調整電路。AT89C51 能提供4k 字節,Flash 閃速存儲器,256 字節片內數據存儲器,三十二個IO 口,兩個十六位定時/計數器,一個五向量兩級中斷結構,一個全雙工串行通信口,片內振蕩器及時鐘電路。AT89C51 因其性能優良和價格低廉而被廣泛應用,數字鐘的整體原理方框圖如圖1 所示。

圖1 數字鐘的原理圖
目前頻率發生器主要分兩種:(1)采用555 定時器構成的多諧振蕩器作為數字鐘的頻率發生器,靈敏度非常高且穩定,同時對電源電壓和環境溫度的影響較小,但是不方便調節頻率占空比,且頻率一般不能太高;(2)采用石英晶體振蕩器作為頻率發生器。晶體振蕩電路采用壓電材料振動晶體的機械共振,創建給定頻率的電信號,采用晶體振蕩電路發出的頻率非常穩定,且受溫度影響小,所以本設計采用晶體振蕩電路用于提供穩定的時鐘信號。晶體振蕩電路和復位上電電路如圖2 所示。

圖2 晶體振蕩電路和復位上電電路
時鐘顯示電路模塊采用八個共陽極八段數碼管,其中P1.0~P1.7 控制數碼管的八段LED 燈的亮滅,即輸入段碼;P3.0~P3.7 控制具體一位數碼管顯示,即輸入位碼,而AT89C51 對P3.0~P3.7 端口進行動態掃描。
當數字鐘運行一段時間后,存在一定誤差,采用按鍵電路可以分別對時、分、秒進行調節。本數字鐘用P1.0、P1.1、P1.2 三個端口分別控制時、分、秒三個按鍵。當按鍵中某個端口輸入低電平時,AT89C51 單片機讀取此時按鍵狀態,并采用軟件去抖,時鐘按鍵每按下一次時鐘加一,當累加到二十四時,重新從零開始計數;分鐘按鍵每按下一次時鐘加一,當累加到六十時,重新從零開始計數;秒鐘同理。
1.數字鐘開機時,顯示12:00:00 的時間開始計時。
2.校正功能:P0.0 控制“秒”的調整,每按一次加1 秒;P0.1 控制“分”的調整,每按一次加1 分;P0.2 控制“時”的調整,每按一次加1 小時。
1.初始化使顯示時間的位全為12:00:00,其他都不點亮;首先建立兩個數組,dispcode[]存放0~f 的段碼,dispbitc ode[]存放位碼,通過dispbuf[8]顯示12:00:00。如果把dispbitcode[2]、dispbitcode[3]對應的16 改為X(10~15 中的一個),并將其指向dispcode[16]即0x00 改為dispcode[X]即0x40。時分秒的間隔就為“—”。

2.秒顯示程序,每來一個脈沖信號,second 自加一,當second 等于60 時,重新計數,并且在數碼管上分別顯示秒的十位和個位。時鐘和分鐘也是類似的編寫方式。


本文以PROTUES 作為仿真軟件,在PROTUES 中搭建數字鐘電路,再用Keil 仿真軟件編寫程序,導出.HEX 文件,再把.HEX 文件導入到PROTUES 仿真運行。Proteus 軟件是英國Lab Center Electronics 公司出版的EDA 軟件工具,它不僅具有其它EDA 工具軟件的仿真功能,而且還能從原理圖布圖、代碼調試到單片機與外圍電路協同仿真,一鍵切換到PCB 設計,真正實現了從概念到產品的完整設計[4-5]。
在仿真過程中要注意以下幾點:
(1)要認真檢查元器件型號、位置以及引腳是否正確;
(2)檢查電源電壓是否正確,常用的工作電壓有5V、12V、15V 等;
(3)仿真時注意要修改晶振頻率為12MHZ,否則可能不能運行。如圖3 所示為數字鐘仿真圖。

圖3 數字鐘仿真圖
本文基于Proteus 仿真軟件和 Keil 開發環境設計出數字鐘,在產品投入實驗前,先用軟件仿真,減少了成本,也提高了產品設計的工作效率,縮短了周期。數字鐘在生活和工作中也非常常用,我們還可以給數字鐘增加鬧鐘、整點報時等功能,增加數字鐘的應用范圍。