吳光明
(陜西中醫(yī)藥大學(xué),陜西 咸陽 712046)
信息時代, 計算機技術(shù)引領(lǐng)著產(chǎn)學(xué)研的發(fā)展潮流, 單片微機的應(yīng)用更是充斥生產(chǎn)、 生活的各個角落。 以51 系列單片機為代表的微型計算機具有高性能、低成本、強通信的優(yōu)點。 伴隨加工技術(shù)的不斷飛躍, 單片機的可用范圍愈來愈廣,在信息技術(shù)領(lǐng)域占有舉住輕重的地位。 自人類需要計時就誕生的秒表,有較長的歷史。最初靠機械驅(qū)動的模擬式秒表,從關(guān)鍵性能看有較大缺陷。高精度高分辨力的數(shù)字化秒表,大大拓寬了秒表原先的功能。 基于數(shù)字電路的數(shù)顯秒表,可用元件多,結(jié)構(gòu)也各不同。本文從虛擬仿真的設(shè)計角度,選擇Proteus 和Keil 軟件交互配合,成功實現(xiàn)了一種基于AT89C51 單片機的00-59 數(shù)顯秒表的整套設(shè)計。
(1)計時范圍0~59 秒。
(2)由兩位七段LED 數(shù)碼管顯示。
(3)三鍵實現(xiàn)開始、中暫、復(fù)位功能。
基于單片機最小系統(tǒng),即電源電路、時鐘電路和復(fù)位電路,附加二極管顯示電路,構(gòu)成計秒實時顯現(xiàn)系統(tǒng)。
系統(tǒng)采用兩位七段共陰極數(shù)碼管, 數(shù)據(jù)口與AT89C51 單片機的P0 和P2 端口相接,P0 口驅(qū)動顯示秒的十位,而P2 口驅(qū)動顯示秒時間的個位。該電路可滿足對計時時間的顯示,精度為1s,溢出后向前進位,計時的范圍為0 到59 秒。P3 口的低三位連接3 個功能按鈕,實現(xiàn)系統(tǒng)的初始、中暫和清零。 系統(tǒng)的整體結(jié)構(gòu)框圖如圖1 所示。
圖1 系統(tǒng)結(jié)構(gòu)框圖
由于本系統(tǒng)對處理速度和I/O 資源無過多要求,只借助單片機實現(xiàn)兩位時間顯示、 附加定時/計數(shù)的中斷,Atmel 公司出產(chǎn)的AT89C51 單片機就滿足要求[1]。 AT89C51 具備在線調(diào)試功能,經(jīng)過JTAG 接口下載、調(diào)試和固化控制程序,可結(jié)合軟件實時仿真和在線或離線編程,還能在線升級、維護。 本設(shè)計選取MSC-51 系列AT89C51 單片機,物美價廉,經(jīng)濟便推廣。
時鐘電路為系統(tǒng)提供工作的時間基準(zhǔn)[2]。 在AT89C51 單片機的XTAL1 和XTAL2 兩個管腳, 接兩只電容并一只晶振就構(gòu)成了本系統(tǒng)的時鐘電路,如圖2 所示。 電路中, 對振蕩頻率起微調(diào)作用的C1 和C2, 選用30pF。 石英晶體震蕩器頻率選用12MHz。它具有很強的抗外界干擾和穩(wěn)頻率能力[3]。
圖2 時鐘電路
為使CPU 和系統(tǒng)中的其他功能模塊都能從一個確定的初始狀態(tài)開始,需要復(fù)位電路。即在系統(tǒng)剛通電時,或斷電斷氣產(chǎn)生故障后都需復(fù)位。從RST 引腳輸入到芯片的施密特觸發(fā)器中完成AT89C51 的復(fù)位信號傳輸[4]。當(dāng)振蕩器穩(wěn)定且系統(tǒng)已開始正常工作時,如果RST引腳有一個高電平而且維持24 個振蕩周期,則CPU 響應(yīng)實現(xiàn)系統(tǒng)復(fù)位。 系統(tǒng)復(fù)位電路如圖3 所示。
圖3 復(fù)位電路
顯示電路由LED 顯示器、 段位驅(qū)動電路組成,本設(shè)計使用了2 個共陰極數(shù)碼管,擇取的是動態(tài)控制方式。 把單片機系統(tǒng)區(qū)域中的P0.0/AD0-P0.7/AD7 端口用8 芯排線連接到四路靜態(tài)數(shù)碼顯示模塊區(qū)域中的任一個a-h(huán) 端口上; 要求:P0.0/AD0 對應(yīng)著a,P0.1/AD1 對應(yīng)著b,……,P0.7/AD7 對應(yīng)著h。 把單片機系統(tǒng)區(qū)域中的P2.0/A8-P2.7/A15 端口用8 芯排線連接到四路靜態(tài)數(shù)碼顯示模塊區(qū)域中的任一個a-h(huán) 端口上;要求:P2.0/A8 對應(yīng)著a,P2.1/A9 對應(yīng)著b,……,P2.7/A15 對應(yīng)著h。 顯示電路連線如圖4 所示。
圖4 LED 顯示電路
系統(tǒng)軟件由主程序板塊、 延時板塊、 鍵盤掃描板塊以及數(shù)碼管驅(qū)動板塊組成[5]。當(dāng)功能按鍵按下時,轉(zhuǎn)入相應(yīng)板塊程序。
(1)在設(shè)計過程中我們用一個存儲單元作為秒計數(shù)單元,當(dāng)一秒鐘到來時,就讓秒計數(shù)單元加1,當(dāng)秒計數(shù)達到60 時,就自動返回到0,重新秒計數(shù)。
(2)對于秒計數(shù)單元中的數(shù)據(jù)要把它十位數(shù)和個數(shù)分開,方法采用對10 整除和對10 求余。
(3)在數(shù)碼上顯示,通過查表的方式完成。
(4)一秒時間的產(chǎn)生在這里我們采用軟件精確延時的方法來完成, 經(jīng)過精確計算得到1 秒時間為1.002 秒。
DELY1S:MOV R5,#100
D2: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,D2
RET
其主程序流程圖如圖5 所示。
圖5 程序流程圖
在keil 環(huán)境下編譯程序生成.hex 文件加載到proteus 中運行。 圖6 為初始狀態(tài),圖7 截取的系統(tǒng)13秒暫停界面。
圖6 系統(tǒng)零點狀態(tài)
圖7 系統(tǒng)運行仿真圖
本文利用Proteus 和Keil 軟件,基于AT89C51 單片機設(shè)計了具有起、 停及清零功能的數(shù)字化計時秒表。在制造前進行了仿真,預(yù)期效果完美。硬件電路結(jié)構(gòu)簡單,計時精度高,為后續(xù)開發(fā)類似更大范圍計時儀器提供了參考。