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