王剛
摘要: 本文設計了一款數字時鐘,通過在Keil軟件進行程序設計,在Proteus搭建仿真電路,系統聯調,最終實現了數字時鐘顯示、計時、定時、鬧鈴、設置等功能。本設計具有電路結構簡單、成本低廉、精度較高、性能穩定等優點。通過數字時鐘的設計,對虛擬設備的教學展示及應用系統的設計開發、功能擴展具有較大的作用。
Abstract: In this paper, a digital clock is designed. Through the Keil software program design, the simulation circuit is built in Proteus, and the system is jointly adjusted. Finally, the functions of digital clock display, timing, alarm, and setting are realized. This design has the advantages of simple circuit structure, low cost, high precision, and stable performance. The design of the digital clock plays a great role in the teaching display of virtual equipment and the design, development and function expansion of application systems.
關鍵詞: 單片機;Proteus;Keil;虛擬設備;功能擴展
Key words: single chip microcomputer;Proteus;Keil;virtual device;function expansion
中圖分類號:TP368.1 文獻標識碼:A 文章編號:1006-4311(2018)18-0242-02
0 引言
數字時鐘是利用數字電子技術實現計時的電子設備,它可以采用晶振、計數器、譯碼器、顯示器和電源等硬件電路實現。該方法設計的數字時鐘電路結構較復雜、穩定性較差、體積較大,因此逐步被以單片機為核心的數字時鐘取代。基于單片機AT89S51的數字時鐘具有體積小、精度高、穩定性好、性價比高,便于功能擴展等優點,為今后嵌入式數字時鐘的智能化發展提供了可行性的參考方案。
1 系統總體設計
系統設計分為硬件設計及軟件設計。硬件設計分為五個部分:單片機最小系統、顯示模塊、鬧鐘指示、鬧鐘鬧鈴、功能設置。程序設計分為三個部分:時鐘顯示、時鐘調節、鬧鈴設置。系統組成框圖如圖1所示。該數字時鐘功能包括:顯示時間、手動更改時間、手動開啟/關閉鬧鈴功能、手動設置鬧鐘、時鐘鬧鈴、鬧鈴狀態指示。
2 硬件仿真設計
本系統采用Proteus進行硬件仿真,該軟件能夠準確展示單片機的仿真效果,是單片機開發常用而有效的仿真軟件。仿真電路如圖2所示,包括如下幾個部分:
①單片機最小系統:單片機能夠正常工作的最小配置。因最小系統模式固定,方便查閱學習,這里不再詳述。本設計中的最小系統硬件連接可參看圖2中單片機時鐘電路(XTAL1、XTAL2)、復位電路(RST)、存儲器選擇電路(EA)部分,電源電路是將單片機VCC(40#引腳)、VSS(20#引腳)分別接DC+5V,GND。本著嵌入式系統開發適用、夠用的原則,根據系統功能要求,選用單片機AT89S51作為核心控制芯片,該款芯片能夠滿足本系統要求,運行穩定,性價比高。
②顯示模塊:選用八位一體的共陰極數碼管構成(亦可采用八位一體的共陽極數碼管),用于顯示數字時鐘當前時間、時間調節和鬧鈴時間,顯示格式為hh-mm-ss(時-分-秒)。段選信號a~h由單片機P1.0~P1.7控制;位選信號WEI0~WEI7由P2.0~P2.7控制。具體連接方式參看圖2中數碼管及其對應的網絡標號部分。
③鬧鈴指示燈:采用一個發光二極管作為鬧鈴指示燈,灌電流方式。LED亮,表示鬧鈴功能開啟;LED滅,表示鬧鈴功能關閉,由單片機P3.1引腳控制。其中200Ω電阻起到限流作用,防止因電流過大燒壞發光二極管。具體連接方式參看圖2中的發光二極管部分。
④鬧鐘鬧鈴:鬧鈴采用蜂鳴器裝置,由單片機P3.0引腳控制。當鬧鐘時間到,蜂鳴器發出聲音。具體連接方式參看圖2中的蜂鳴器及其對應的網絡標號。
⑤功能設置:根據系統功能,本數字時鐘需要5個按鍵,因此可以采用獨立式按鍵。由五個非自鎖按鍵分別與單片機P3.2~P3.6連接。按鍵定義及功能如表1所示。
3 系統軟件設計
本系統選用C語言編寫源程序。C語言在功能性、結構性、可讀性、可維護性上有明顯的優勢,具有較強的可移植性。程序在Keil軟件平臺進行設計,編譯、調試、運行。Keil提供了包括C編譯器、宏匯編、鏈接器、庫管理和一個功能強大的仿真調試器等在內的完整開發方案,無論用C語言還是匯編語言編程,Keil方便易用的集成環境、強大的軟件仿真工具使程序調試運行事半功倍。程序通過主函數調用子函數實現數字時鐘的相關功能。
①主函數:主函數將定時/計數器、中斷初始化后,無限循環時間顯示函數xianshi()、時間調節函數tiaojie()、鬧鈴函數naoling()。初始化過程中,外部中斷0、1開中斷,采用下降沿觸發方式。定時/計數器0選用工作方式1,定時時間單位為50ms。PT0置1是設置內部定時中斷優先級大于外部中斷優先級。參考程序如下:
void main( )
{TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;ET0=1;IT1=1;
IT0=1;EX1=1;EX0=1;PT0=1;EA=1;
while(1){xianshi();tiaojie();naoling();}}
②時間顯示函數:考慮單片機I/O口數量有限,數字時鐘顯示時間位數較多,與硬件連接相對應,顯示函數采用動態顯示。動態顯示是利用人的視覺暫留效應,按位輪流點亮數碼管,對于八位一體的共陰數碼管,每一位輪流顯示,如果每位LED閃動的頻率足夠高,就可以給人一種穩定顯示的視覺效果。程序中通過數組zixing[ ]賦值0~9的字形代碼。單片機P1口控制段選信號a~h,P2口控制位選信號,變量h、m、s分別為時計數、分計數、秒計數。時間顯示格式:hh-mm-ss。參考程序如下:
void xianshi( )
{unsigned char zixing[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned int j; P1=zixing[s%10]; P2=0x7f;for(j=0;j<100;j++);
P1=zixing[s/10]; P2=0xbf; for(j=0;j<100;j++);
P1=0x40; P2=0xdf; for(j=0;j<100;j++);
P1=zixing[m%10]; P2=0xef; for(j=0;j<100;j++);
P1=zixing[m/10]; P2=0xf7; for(j=0;j<100;j++);
P1=0x40; P2=0xfb; for(j=0;j<100;j++);
P1=zixing[h%10]; P2=0xfd; for(j=0;j<100;j++); P1=zixing[h/10]; P2=0xfe;}
③時間調節函數:判斷是否有調節時間的按鍵按下。按下INC_H的調節小時按鍵,小時加1,當小時等于24時,顯示為0。按下INC_F的調節分鐘按鍵,分鐘加1,如果分鐘等于60時,顯示為0。參考程序如下:
void tiaojie()
{if(INC_H==0){ xianshi( );if(INC_H==0){if(s==23) s=0;else s++;
while(!INC_H)xianshi( )}}else if(INC_F==0)
{ xianshi( ));if(INC_F==0){if(f==59)f=0;else f++;while(!INC_F) xianshi( );}}}
④鬧鈴函數:當程序判斷鬧鈴時間與時鐘時間的分、時一致時,數字時鐘鬧鈴20秒,參考程序如下:
void naoling()
{if(flag_nao){if(f==f_nao&&s;==s_nao)
{while(m<=20&&flag;_nao){BEEP=!BEEP;xianshi();}}}}
4 運行結果
仿真電路、程序設計完成后,經過系統聯調,數字時鐘具備正確顯示當前時間、調整時間、鬧鐘鬧鈴功能,達到了設計指標。系統仿真運行結果見圖3。
5 總結
通過對數字時鐘的總體設計、搭建仿真電路、程序設計、系統聯調,成功設計了基于單片機的數字時鐘,最終的運行結果符合設計要求。該數字時鐘具備功能可靠、性價比高、結構簡單等優點。本設計適合應用于虛擬儀器的教學演示和實際的應用系統功能設計等方面,為數字時鐘的智能化發展及功能擴展提供了可行性參考方案。
參考文獻:
[1]尹毅峰,劉龍江.單片機原理及應用[M].北京:北京理工大學出版社,2010.
[2]倪志蓮.單片機應用技術[M].北京:北京理工大學出版社,2010.
[3]彭偉.單片機C語言程序設計實訓100例[M].北京:電子工業出版社,2012.
[4]孫佳玲.基于單片機的多功能數字時鐘系統設計分析[J].吉林工程技術師范學院學報,2009(10):25-26.