許珂樂
摘 要: 利用Atmel公司的IEEE1149.7仿真器對電子時鐘進行開發(fā),用實驗板實現(xiàn)時間、日期、定時及其設定功能,詳細對軟件編程流程以及調(diào)試進行說明,并對計時誤差進行分析及校正,提出了定時音與顯示相沖突問題及解決方案。由于單片機具有低成本、高性能等特點,在自動控制產(chǎn)品中得到了廣泛的應用。整個電路結構簡單,可靠性能高,易于推廣和移植,具有廣闊的應用前景。
關鍵詞: 單片機; IEEE1149.7仿真器; 電子時鐘; C語言
中圖分類號: TN79?34 文獻標識碼: A 文章編號: 1004?373X(2017)13?0175?03
Abstract: The IEEE1149.7 simulator developed by Atmel Company is used to develop the electronic clock. The test board is adopted to realize the functions of time, date and timing, and their setting functions. The software programming flow and debugging are described in detail. The timing error is analyzed and corrected. The problem that the timing sound is conflicted with the display, and its solution are put forward. Since the single chip microcomputer (SCM) has the characteristics of low cost and high performance, it is widely used in the automatic control products. The whole design has the advantages of simple circuit structure and high reliability, is easy to popularize and transplant, and has broad application prospect.
Keywords: single chip microcomputer; IEEE1149.7 simulator; electronic clock; C programming language
0 引 言
在日常生活和工作中常常用到定時控制,如擴印過程中的曝光定時等。早期常用的一些時間控制單元都使用模擬電路設計制作,其定時準確性和重復精度不是很理想,現(xiàn)在基本上都是基于數(shù)字技術的新一代產(chǎn)品,隨著單片機性價比的不斷提高,新一代產(chǎn)品的應用也越來越廣泛。其功能強大、體積小、質(zhì)量輕、靈活好用,配以適當?shù)慕涌谛酒梢詷嫵筛鞣N各樣、功能各異的微電子產(chǎn)品。
隨著電子技術的飛速發(fā)展,家用電器和辦公電子設備逐漸增多,不同的設備都有自己的控制器,使用起來很不方便。這些具有人們所需的智能化特性產(chǎn)品減輕了人的勞動,擴大了數(shù)字化的范圍,為家庭數(shù)字化提供了可能。根據(jù)這種實際情況,設計了一個單片機多功能時鐘系統(tǒng),它有基本的時間功能,還有秒表、鬧鐘功能,也可擴展為定時對家電等電氣產(chǎn)品的自動控制,可以避免多種控制器的混淆,利用一個控制器對多路電器進行控制;可增加溫度傳感器,進行實時溫度顯示,進一步擴展為利用不同的溫度對某些電氣產(chǎn)品進行自動控制。
1 系統(tǒng)功能及操作
1.1 系統(tǒng)功能的確定
系統(tǒng)具有時間、秒表、鬧鐘功能,并可以對時間、秒表、鬧鐘進行設置,鬧鐘使用蜂鳴器提醒。要求計時精度盡量提高。顯示格式為:
時間:“時”(第1,2位),“分”(第3,4位),“秒”(第5,6位);
秒表:“時”(第1,2位),“分”(第3,4位),“秒”(第5,6位);
鬧鐘:“時”(第1,2位),“分”(第3,4位),“秒”(第5,6位)。
1.2 系統(tǒng)操作說明
(1) 按開始鍵自動進入時間顯示,開始為0,按K1鍵進入更改時間,閃爍位為可更改位,按K2鍵調(diào)整更改位,K3鍵為自增鍵,K4鍵為自減鍵,修改成功之后按K1鍵確定修改成功;
(2) 按K2鍵進入秒表功能,再次按K2鍵秒表開始計時,K3鍵為秒表暫停鍵,繼續(xù)則按K2鍵,K4鍵為清零鍵;
(3) 按K3鍵進入鬧鐘功能,進去之后閃爍位為可更改位,按K2鍵調(diào)整更改位,K3鍵為自增鍵,K4鍵為自減鍵。
2 系統(tǒng)硬件設計
2.1 實驗板電路結構框圖
實驗板電路結構框圖如圖1所示。
2.2 數(shù)碼顯示電路
如圖2所示為數(shù)碼顯示電路,仿真器使用了6個共陽極的數(shù)碼管,P0口為段碼信號線,AD0~AD7為段選,A8~A15為位選。
2.3 蜂鳴器電路
蜂鳴器電路的硬件原理圖如圖3所示。此電路用于定時發(fā)出提示音,可以讓蜂鳴器發(fā)出不同的聲音。此電路用于產(chǎn)生定時器提示音。
3 系統(tǒng)軟件設計
3.1 數(shù)據(jù)單元分配
數(shù)據(jù)存儲單元、標志單元的分配表見表1,表2。
3.2 計時時鐘實現(xiàn)
時鐘的最小計時單位是s,使用定時器的方式1,最大的定時時間也只能達到131 ms??砂讯〞r器的定時時間定為50 ms,這樣,計數(shù)溢出20次即可得到時鐘的最小計時單位。計數(shù)20次可以用軟件實現(xiàn),對定時器溢出次數(shù)進行計數(shù),計滿20次即為1 s。從秒到分,從分到時都是通過軟件累加并進行比較的方法實現(xiàn)的。
(1) 計時子程序模塊的實現(xiàn)
當T0中斷時,執(zhí)行本程序,因T0設為50 ms中斷,故中斷20次為1 s。中斷程序分別有20次計數(shù)(1 s),60次計數(shù)(1 min),60次計數(shù)(1 h),等于24時又重新開始。
(2) 時鐘設定子程序模塊的實現(xiàn)
當設定時間時,斷開T0中斷,秒單元清0,進入時、分單元設定。設定好后重裝T0初值,開T0中斷。
(3) 日期、定時設定子程序模塊的實現(xiàn)
日期、定時的設定同時鐘設定。定時設定時,把時鐘的秒位換成定時標志位,“00”為當路定時關,“01”為當路定時開。
3.3 程序說明
(1) 程序初始化
程序初始化時,清相應內(nèi)存單元(20H~4FH共48個單元),送時間(00時00分00秒),送定時器T0,T1初值,TH0=TH1=4CH,TL0=TL1=00H,特殊寄存器(SP=50H,TMOD=11H)值等。
(2) 誤差分析及校正
當T0中斷時,需重裝定時初值,且要加上從斷開T0中斷到允許T0中斷共有13個周期,以減小誤差,故理論重裝定時初值為(TH0)=4CH,(TL0)=13H。但該外接晶振電路的晶振頻率可調(diào),可能出現(xiàn)誤差,所以實際不是這個值。
經(jīng)調(diào)試,當定時初值為(TH0)=4CH,(TL0)=06H時,24 h約慢2 s,所以每當計時24 h之后,給秒單元(30H)送02H,使秒累加時從2加起,24 h就少加2 s,即可使時間得到校正。
(3) 實現(xiàn)閃動設定
閃動可選用段碼送00H實現(xiàn),也可禁止當前位顯示,選通位送0實現(xiàn)。本設計選用后者實現(xiàn)閃動,用定時器T1進行控制。
(4) 實現(xiàn)連續(xù)加1
先判斷鍵是否松開,若松開,則只執(zhí)行一次加1程序段,進行單次加1;若未松開,則連續(xù)執(zhí)行加1程序段,實現(xiàn)連續(xù)加1。每執(zhí)行一次加1程序段就調(diào)用顯示子程序進行延時,對調(diào)節(jié)速度進行控制。本系統(tǒng)以5 Hz的速度連續(xù)加1,這樣能快速對時間、鬧鐘、蜂鳴器進行設定。
(5) 定時音與顯示相沖突問題及解決方案
由于蜂鳴器響時P3.2口的電平呈高頻變化,頻率1~2 kHz,其間隙時間為0.5~1 ms,小于6 ms,因顯示時每個數(shù)碼管顯示1 ms,至少需要6 ms,故蜂鳴器響時無法進行顯示。為解決此問題,可增加鎖存器,采用靜態(tài)顯示;也可增加一語音芯片,既可解決此問題,也可把定時音換成音樂或語音提示,或增加其他功能,使系統(tǒng)功能更強。
4 系統(tǒng)調(diào)試
該時鐘程序的功能模塊先后實現(xiàn)的順序為:主程序→時間模塊→顯示模塊→時間設定及其顯示模塊→鬧鐘及其顯示模塊→鬧鐘設定及其顯示模塊→定時提示音及與顯示相沖突的協(xié)調(diào)模塊。每完成一個模塊就與前一個已完成的模塊結合起來調(diào)試,直至實現(xiàn)相應功能再編寫下一模塊程序。在與主程序銜接時,主程序和各子程序也需做相應的改動,以便與子程序更好的銜接,特別是顯示子程序需做較大改動,以便對不同內(nèi)容進行顯示。
程序用C語言程序編寫,該軟件還可進行軟件仿真。用C語言編好程序后,先編譯,把C語言編譯成二進制代碼和十六進制代碼。若編譯無法進行,說明程序有語法錯誤,需進行修改。編譯成功后則可進行軟件仿真,仿真可單步運行,也可連續(xù)運行。仿真時應調(diào)出數(shù)據(jù)窗口,看各單元數(shù)據(jù)是否正確,這是軟件仿真的目的。當然,有些錯誤軟件仿真不容易發(fā)現(xiàn),看是否正常,若不正常,再根據(jù)出錯的地方返回軟件仿真,查看相應的數(shù)據(jù)單元,再修改程序,這樣反復調(diào)試,直至程序可用,在實驗板上能正常運行,至此完成系統(tǒng)調(diào)試。
5 結 論
該系統(tǒng)經(jīng)驗證,滿足設計要求。由于加入了計時修正,在精度方面已經(jīng)相當準確,還可以達到更高精度,需要精確計算定時器T0中斷次數(shù)的誤差,再予以修正;在軟件的定時部分可以進行改進,用循環(huán)程序?qū)崿F(xiàn),每次循環(huán)只需更改相應單元即可,這樣會使該設計系統(tǒng)更精簡。
參考文獻
[1] 肖廣兵.ARM嵌入式開發(fā)實例?基于STM32的系統(tǒng)設計[M].北京:電子工業(yè)出版社,2013.
[2] 王永虹.STM32系列ARM CortexM3微控制器原理與實踐[M].北京:北京航空航天大學出版社,2008.
[3] 郭天祥.51單片機C語言教程[M].北京:電子工業(yè)出版社,2008.
[4] 譚浩強.C程序設計[M].4版.北京:清華大學出版社,2011.
[5] 徐曉平,程傳勝.PCB設計標準教程[M].北京:北京郵電大學出版社,2008.
[6] 何立民.單片機應用系統(tǒng)設計[M].北京:北京航空航天大學出版社,2013.
[7] 李廣弟.單片機基礎[M].北京:北京航空航天大學出版社,2014.
[8] 何希才.新型實用電子電路400例[M].北京:電子工業(yè)出版社,2014.
[9] 徐愛鈞.Keil C51單片機高級語言應用編程與實踐[M].北京:電子工業(yè)出版社,2013.
[10] 杜樹春.基于Proteus和Keil C51的單片機設計與仿真[M].北京:電子工業(yè)出版社,2012.
[11] 許維鎣,鄭榮煥.Proteus電子電路設計及仿真[M].北京:中國電力出版社,2014.
[12] 張毅剛.基于Proteus的單片機課程的基礎實驗與課程設計[M].北京:人民郵電出版社,2012.
[13] LOUDON Kyle.算法精解:C語言描述[M].肖翔,陳舸,譯.北京:機械工業(yè)出版社,2012.
[14] 中尾真治.活學活用PIC單片機C語言編程[M].盧伯英,譯.北京:科學出版社,2012.
[15] 內(nèi)格爾.C#高級編程:C# 5.0 & .NET 4.5.1[M].李銘,譯.9版.北京:清華大學出版社,2014.