譚艷春 朱又敏
摘? 要:51系列單片機(jī)以系統(tǒng)架構(gòu)開放、工作性能靈活可靠、價(jià)格低廉的優(yōu)勢,在工業(yè)自動(dòng)化、交通控制、智能儀表等眾多領(lǐng)域得到了廣泛的應(yīng)用。為了進(jìn)一步研究并拓展其應(yīng)用場景,本文利用STC89C52單片機(jī)、KeilC51和Proteus軟件對多功能體育用計(jì)時(shí)器進(jìn)行了完整的軟硬件開發(fā)與設(shè)計(jì)。Proteus在線仿真驗(yàn)證了系統(tǒng)設(shè)計(jì)的正確性及合理性,具有較強(qiáng)的實(shí)際指導(dǎo)意義和應(yīng)用價(jià)值。
關(guān)鍵詞:KeilC51;Proteus;STC89C52;計(jì)時(shí)器
中圖分類號:TP399? ? ?文獻(xiàn)標(biāo)識碼:A
Abstract:MCS-51 has been widely used in industrial automation,traffic control,intelligent instruments and many other fields because of its open system structure,flexible and reliable performance and low price.In order to further study the SCM and expand its application,the paper designs and develops the software and hardware of multi-functional sports timer through MCU STC89C52,KeilC51 and Proteus.The online simulation of Proteus verifies the validity and rationality of the system design,proving its considerable guiding significance and practical value.
Keywords:KeilC51;Proteus;STC89C52;timer
1? ?引言(Introduction)
STC89C52單片機(jī)使用經(jīng)典的MCS-51內(nèi)核,但又做了很多改進(jìn)使該芯片具有傳統(tǒng)51單片機(jī)不具備的功能,它以低功耗、高性能可為眾多嵌入式控制應(yīng)用系統(tǒng)提供靈活、智能、有效的解決方案[1-3]。
Proteus和Keil是目前比較流行的單片機(jī)仿真軟件和集成開發(fā)軟件。其中,Proteus不僅具有其他EDA工具軟件的仿真功能,還能仿真單片機(jī)及外圍器件,是目前世界上唯一將電路仿真軟件、PCB設(shè)計(jì)軟件和虛擬模型仿真軟件三合一的設(shè)計(jì)平臺(tái);而Keil支持51單片機(jī)的所有兼容機(jī)。所以將Proteus和Keil應(yīng)用于單片機(jī)的前期開發(fā)設(shè)計(jì)與仿真,可以充分檢驗(yàn)系統(tǒng)設(shè)計(jì)的合理性及可靠性,避免直接搭建硬件電路帶來的一些不可逆的嚴(yán)重后果,如因設(shè)計(jì)問題導(dǎo)致芯片燒毀等,因此用Proteus和Keil進(jìn)行系統(tǒng)的前期開發(fā)仿真對硬件電路的搭建具有實(shí)際指導(dǎo)意義和作用[4-6]。
2? ?硬件電路設(shè)計(jì)(Design of hardware circuit)
該系統(tǒng)的硬件電路主要包括STC89C52最小電路模塊、鎖存電路模塊、按鍵模塊和顯示模塊四部分,電路方框圖如圖1所示。
各電路模塊的具體說明如下:
2.1? ?STC89C52最小電路模塊
該模塊采用內(nèi)部時(shí)鐘方式,晶振頻率選為12MHz,由此可知一個(gè)機(jī)器周期為1us。設(shè)計(jì)時(shí)器的最小計(jì)時(shí)單位為tmin ms,因此定時(shí)器T0的初始值計(jì)算公式為:TH0=(65535-tmin)/256;TL0=(65535-tmin)%256。
2.2? ?鎖存電路模塊
鎖存電路模塊采用2塊74HC573,它是一種包含八路3態(tài)輸出的非反轉(zhuǎn)透明鎖存器。
2.3? ?按鍵模塊
用K1—K4四個(gè)按鍵分別實(shí)現(xiàn)計(jì)時(shí)器的啟動(dòng)/停止、存儲(chǔ)、回顯和清零的功能,具體電路如圖3所示。
2.4? ?顯示模塊
計(jì)時(shí)器從左到右依次顯示為:分鐘(2位,最多計(jì)時(shí)59分鐘)、空1位、秒(2位,最多計(jì)時(shí)59秒)、空1位、10毫秒(2位,最多計(jì)時(shí)100個(gè)10毫秒)。
3 KeilC51環(huán)境下的編程(Programming in the KeilC51)
3.1? ?軟件編程要點(diǎn)及難點(diǎn)分析
(1)啟動(dòng)/停止按鍵、計(jì)時(shí)按鍵、回顯按鍵和清零按鍵信息分別通過STC89C52單片機(jī)的P3.2—P3.5的四個(gè)引腳輸入。
(2)通過P0口將位選信息,以及需要顯示的數(shù)字信息同時(shí)送給兩個(gè)74HC573鎖存器。
(3)1個(gè)74HC573鎖存器接數(shù)碼管的A-G,DP引腳,另1個(gè)74HC573鎖存器接8個(gè)數(shù)碼管的公共端,并通過STC89C52的P1.4和P1.5引腳控制兩個(gè)鎖存器的使能。
(4)該計(jì)時(shí)器最小計(jì)時(shí)單位tmin的選擇:雖然人的手眼協(xié)調(diào)與反應(yīng)時(shí)間和人當(dāng)時(shí)的狀態(tài)有很大關(guān)系,如興奮的時(shí)候比沮喪的時(shí)候反應(yīng)快,但大量的統(tǒng)計(jì)數(shù)據(jù)表明,正常人的反應(yīng)時(shí)間一般不會(huì)低于100ms,因此本文設(shè)計(jì)的體育用計(jì)時(shí)器的最小計(jì)時(shí)單位選為10ms完全可以滿足實(shí)際需求和應(yīng)用,而沒有必要再過分地細(xì)化。
(5)該系統(tǒng)的設(shè)計(jì)難點(diǎn)在于如何實(shí)現(xiàn)計(jì)時(shí)數(shù)據(jù)在正確位置的顯示。因?yàn)樗械臅r(shí)間(本設(shè)計(jì)包括分、秒、100ms)都是通過并行I/O口送出,因此需要通過軟件編程控制數(shù)據(jù)應(yīng)在其對應(yīng)的數(shù)碼管上顯示,即分顯示在左數(shù)1位和2位、秒顯示在左數(shù)4位和5位、100ms顯示在左數(shù)7位和8位。
3.2? ?程序流程圖
該系統(tǒng)的程序流程圖如圖2所示。
3.3? ?系統(tǒng)源代碼
該多功能體育用計(jì)時(shí)器系統(tǒng)的代碼比較多,因篇幅所限,故本文只介紹以下幾個(gè)主要源代碼模塊[7,8]。
3.4? ?系統(tǒng)的應(yīng)用拓展
本文設(shè)計(jì)的多功能體育用計(jì)時(shí)器的最多存儲(chǔ)計(jì)時(shí)個(gè)數(shù)、回顯個(gè)數(shù)及顯示模式可根據(jù)實(shí)際情況進(jìn)行調(diào)整。
(1)計(jì)時(shí)器最多存儲(chǔ)計(jì)時(shí)個(gè)數(shù)及回顯個(gè)數(shù)的調(diào)整。
如果要改變該計(jì)時(shí)器的最大存儲(chǔ)計(jì)時(shí)個(gè)數(shù)及回顯個(gè)數(shù),實(shí)現(xiàn)方法特別簡單,可通過重新定義變量temp_buf進(jìn)行改變。例如將該數(shù)組的定義由temp_buf[10][3]變?yōu)閠emp_buf[20][3],則意味著該計(jì)時(shí)器的最大存儲(chǔ)計(jì)時(shí)個(gè)數(shù)及回顯個(gè)數(shù)由10個(gè)變?yōu)?0個(gè)。
(2)計(jì)時(shí)器顯示模式的調(diào)整。
計(jì)時(shí)器的顯示模式應(yīng)和實(shí)際需求相匹配,因此需要根據(jù)不同的應(yīng)用場合進(jìn)行適當(dāng)?shù)恼{(diào)整。例如有些應(yīng)用場景不需要很高的精度(最小計(jì)時(shí)單位為秒即可),但要求計(jì)時(shí)較長(長達(dá)數(shù)個(gè)小時(shí)),此時(shí)可以選取這樣的顯示模式:小時(shí)(2位,最多計(jì)時(shí)99小時(shí))、空1位、分(2位,最多計(jì)時(shí)59分)、空1位、秒(2位,最多計(jì)時(shí)59秒)。以上功能可以通過調(diào)整源代碼中的void t0_server(void)interrupt 1和void display(u8 which_bit,u8 which_number)這兩個(gè)函數(shù)來實(shí)現(xiàn)。當(dāng)然如果8位顯示還不能夠滿足實(shí)際需求,則可以通過增加硬件來實(shí)現(xiàn)。
4? 程序加載及仿真演示(Program loading and simulation demonstration)
將調(diào)試過沒有語法錯(cuò)誤的代碼文件*.HEX加載到Proteus原理仿真圖的STC89C52單片機(jī)中,點(diǎn)擊運(yùn)行后,依次按下K1~K4,可以觀察到與預(yù)期一致的計(jì)時(shí)效果,即可以實(shí)現(xiàn)啟動(dòng)、停止、記錄、回顯和清零的功能。具體操作過程是先按下K1,啟動(dòng)系統(tǒng),然后間隔隨機(jī)的時(shí)間按下K2共10次,即記錄存儲(chǔ)了10個(gè)數(shù)據(jù),再按下K3(10次),依次顯示第10個(gè)、第9個(gè)……第1個(gè)的時(shí)間,最后按下K4,實(shí)現(xiàn)清零功能。而且經(jīng)過多次反復(fù)實(shí)驗(yàn),該系統(tǒng)都可以正常運(yùn)行,說明系統(tǒng)有很好的穩(wěn)定性和可靠性。由于文本的限制,無法演示系統(tǒng)運(yùn)行的動(dòng)態(tài)過程,這里只截取了仿真過程中的一張圖。圖3展示的是存儲(chǔ)鍵K2第1次按下時(shí),記錄的時(shí)間(0'6.26''),當(dāng)再按下回顯鍵K3時(shí),以倒序依次顯示存儲(chǔ)的時(shí)間數(shù)據(jù),倒數(shù)第二個(gè)數(shù)據(jù)顯示的和圖3完全一致,即0'6.26''。這里要注意一個(gè)問題:若存儲(chǔ)鍵K2鍵連續(xù)按下的次數(shù)超過系統(tǒng)設(shè)置的上限值,則以后的存儲(chǔ)操作不會(huì)被系統(tǒng)執(zhí)行,例如本文設(shè)置的計(jì)時(shí)數(shù)組為temp_buf[10][3],即最多可以存儲(chǔ)10組時(shí)間。所以在使用系統(tǒng)之前,要根據(jù)實(shí)際需求進(jìn)行合理設(shè)置,避免存儲(chǔ)過程中因設(shè)置不足導(dǎo)致數(shù)據(jù)的丟失。
5? ?結(jié)論(Conclusion)
本文所設(shè)計(jì)的多功能體育用計(jì)時(shí)器通過Proteus軟件在線仿真驗(yàn)證了該系統(tǒng)設(shè)計(jì)的正確性,以及運(yùn)行的可靠性和穩(wěn)定性。此外,該系統(tǒng)還可以根據(jù)不同應(yīng)用場合的實(shí)際需求對計(jì)時(shí)器的最多存儲(chǔ)個(gè)數(shù)、回顯個(gè)數(shù)及顯示格式通過簡單修改軟件中的一些函數(shù)和變量參數(shù)來實(shí)現(xiàn),因此該系統(tǒng)具有很好的拓展性,以及較強(qiáng)的實(shí)際指導(dǎo)意義和應(yīng)用價(jià)值。
參考文獻(xiàn)(References)
[1] 于博,楊曉慶.基于KeilC51與Proteus仿真聯(lián)合的單片機(jī)應(yīng)用研究[J].軟件工程師,2015,18(9):51-52.
[2] 郭文會(huì).基于單片機(jī)與RS485通信芯片的智能家居控制系統(tǒng)設(shè)計(jì)[J].自動(dòng)化與儀器儀表,2016(09):244-246.
[3] 譚玉琪,王超,湯吉昀.基于Proteus的單片機(jī)多機(jī)通信的設(shè)計(jì)與仿真[J].電子設(shè)計(jì)工程,2019(3):164-168.
[4] 譚艷春,朱又敏,劉目磊.基于KeilC51和Proteus花樣流水燈系統(tǒng)的設(shè)計(jì)[J].軟件工程,2018,21(11):14-16.
[5] 鄧力.基于Keil時(shí)序邏輯和Proteus的電路仿真[J].實(shí)驗(yàn)室研究與探索,2017,36(01):80-83.
[6] 朱敏玲,張偉,侯凌燕.基于Proteus的微機(jī)原理與接口技術(shù)教學(xué)改革[J].實(shí)驗(yàn)室研究與探索,2016,35(01):155-160.
[7] 林立等.單片機(jī)原理及應(yīng)用——基于Proteus和Keil C[M].北京:電子工業(yè)出版社,2018.
[8] 杜樹春.基于Proteus和KeilC51的單片機(jī)設(shè)計(jì)與仿真[M].北京:電子工業(yè)出版社,2012.
作者簡介:
譚艷春(1980-),女,碩士,講師.研究領(lǐng)域:系統(tǒng)設(shè)計(jì),信號處理.
朱又敏(1966-),男,碩士,工程師.研究領(lǐng)域:射頻通信.本文通訊作者.