基于51單片機(jī)的數(shù)字秒表的設(shè)計(jì)
本設(shè)計(jì)的數(shù)字秒表采用AT89S52單片機(jī)為主要器件,利用其定時(shí)器的原理,結(jié)合顯示電路、LED數(shù)碼管以及外部外部中斷電路來(lái)設(shè)計(jì)計(jì)時(shí)器。將軟硬件結(jié)合起來(lái),使得系統(tǒng)能實(shí)現(xiàn)0~99.99秒的計(jì)時(shí),計(jì)時(shí)精度位0.01秒。硬件系統(tǒng)利用proteus仿真,在仿真中就能觀察到系統(tǒng)的實(shí)際運(yùn)行情.
一 硬件設(shè)計(jì)
1、1 總體方案的設(shè)計(jì)
數(shù)字秒表具有顯示直觀、讀取方便、精度高等優(yōu)點(diǎn),在計(jì)時(shí)中廣泛應(yīng)用。本設(shè)計(jì)中用單片機(jī)和數(shù)碼管組成數(shù)字秒,表力求結(jié)構(gòu)簡(jiǎn)單。
設(shè)計(jì)中包括硬件電路的設(shè)計(jì)和系統(tǒng)程序的設(shè)計(jì)。硬件電路主要有主控制器、控制按鈕與顯示電路組成。主控制器采用單片機(jī)AT89S52,顯示電路采用四位共陰極數(shù)碼管顯示計(jì)時(shí)時(shí)間。
本設(shè)計(jì)利用AT89S52單片機(jī)的定時(shí)器,使其能精確計(jì)時(shí)。利用中斷系統(tǒng)使其實(shí)現(xiàn)啟動(dòng)和暫停的功能,P0口輸出段碼數(shù)據(jù),P2.0~P2.2連上譯碼器作為位選,P3.2和P3.3接口的兩個(gè)按鈕分別實(shí)現(xiàn)啟動(dòng)和暫停功能。設(shè)計(jì)的基本要求是正確性。硬件電路按下圖進(jìn)行設(shè)計(jì)。
本地圖片,請(qǐng)重新上傳
計(jì)時(shí)器采用T0中斷實(shí)現(xiàn),定時(shí)溢出中斷周期為1ms,當(dāng)溢出中斷后向CPU發(fā)出溢出中斷請(qǐng)求,每發(fā)出10次中斷請(qǐng)求就對(duì)10ms位(即最后一位)加一,達(dá)到100次就對(duì)100ms位加一,以此類推,直到99.99s為止。
再看按鍵的處理。兩個(gè)按鍵采用中斷的方法,設(shè)置外部中斷0和外部中斷1位脈沖邊沿觸發(fā)方式,這樣一來(lái)每當(dāng)按鍵按下時(shí)便會(huì)觸發(fā)中斷,從而實(shí)現(xiàn)啟動(dòng)和暫停。
1.2 單片機(jī)的選擇
本設(shè)計(jì)在選取單片機(jī)時(shí),充分借鑒了許多成型產(chǎn)品使用單片機(jī)的經(jīng)驗(yàn)。并根據(jù)自己的實(shí)際情況,選用了ATMEL公司的AT89S52。
ATMEL公司的89系列單片機(jī)以其卓越的性能、完善的兼容性、快捷便利的電擦寫操作、低廉的價(jià)格完全替代了87C51/62和8751/52,低電壓、低功耗,有DIP、PLCC、QFP封裝,是目前性能最好、價(jià)格最低、最受歡迎的單片機(jī)之一。
AT89S52為40腳雙列直插封裝的8位通用微處理器,采用工業(yè)標(biāo)準(zhǔn)的C51內(nèi)核,在內(nèi)部功能及管腳排布上與通用的8XC52相同,其主要用于匯聚調(diào)整時(shí)的功能控制。功能包括對(duì)匯聚主IC內(nèi)部寄存器、數(shù)據(jù)RAM及外部接口等功能部件的初始化,匯聚調(diào)整控制,匯聚測(cè)試圖控制等。
單片機(jī)外部結(jié)構(gòu)
AT89S52單片機(jī)采用40腳的DIP封裝,如下所示。
本地圖片,請(qǐng)重新上傳
(1)主電源引腳Vss和Vcc
a、 Vss接地
b、 Vcc正常操作時(shí)為+5V接地
外接晶振引腳XTAL1和XTAL2
a、XTAL1內(nèi)部振蕩電路反相放大器的輸出端,是外接晶體的一個(gè)引腳。當(dāng)采用外部振蕩時(shí),此引腳接地。
b、XTAL2內(nèi)部振蕩電路反相放大器的輸出端,是外接晶體的的另一端。當(dāng)采用外部振蕩時(shí),此引腳接外部振蕩源。
(2)控制或與其他電源復(fù)用引腳
a、RST/VPD 當(dāng)振蕩器運(yùn)行是,在此引腳上出現(xiàn)兩個(gè)機(jī)器周期的高電平(由低到高跳變),將使單片機(jī)復(fù)位在Vcc掉電期間,此引腳可接上備用電源,由VPD向內(nèi)部提供備用電源,
以保持內(nèi)部RAM中的數(shù)據(jù)。
b、ALE/PROG 正常操作時(shí)為ALE功能(允許地址鎖存)提供把地址的低字節(jié)鎖存到外部存儲(chǔ)器,ALE引腳以不變的頻率(振蕩器頻率的1/6)周期性的發(fā)出正脈沖信號(hào)。因此,它可以用作對(duì)外輸出的時(shí)鐘,或用于定時(shí)目的。
c、PSEN 外部程序存儲(chǔ)器讀選通信號(hào)輸出端,在從外部程序存儲(chǔ)取指令(或數(shù)據(jù))期間,PSEN在每個(gè)機(jī)器周期內(nèi)兩次有效。
d、EA/Vpp 內(nèi)部程序存儲(chǔ)器和外部程序存儲(chǔ)器選擇端。當(dāng)EA/Vpp位高電平時(shí),訪問(wèn)內(nèi)部程序存儲(chǔ)器,當(dāng)EA/Vpp為低電平時(shí),則訪問(wèn)外部程序存儲(chǔ)器。對(duì)于EPROM編程期間,此引腳上加21VEPROM編程電源(Vpp)。
(3)輸入/輸出引腳P0.0~P0.7,P1.0~P1.7,P2.0~P2.7,P3.0~P3.7。
a、P0口(P0.0~P0.7)是一個(gè)8位漏極開路型雙向I/O口,在訪問(wèn)外部存儲(chǔ)器時(shí),它是分時(shí)傳送的低字節(jié)地址和數(shù)據(jù)總線,P0口能以吸收電流的方式驅(qū)動(dòng)八個(gè)LSTTL負(fù)載。
b、P1口(P1.0~P1.7)是一個(gè)帶有內(nèi)部上拉電阻的8位準(zhǔn)雙向I/O口。能驅(qū)動(dòng)四個(gè)LSTTL負(fù)載。
c、P2口(P2.0~P2.7)是一個(gè)帶有內(nèi)部上拉電阻的8位準(zhǔn)雙向I/O口,在訪問(wèn)外部存儲(chǔ)器時(shí),它輸出高8位地址。P2口可以驅(qū)動(dòng)四個(gè)LSTTL負(fù)載。
d、P3口(P3.0~P3.7)是一個(gè)帶有內(nèi)部上拉電阻的8位準(zhǔn)雙向I/O口。能驅(qū)動(dòng)四個(gè)LSTTL負(fù)載。
1.3 顯示電路的選擇與設(shè)計(jì)
對(duì)于數(shù)字顯示電路,通常采用液晶顯示或數(shù)碼管顯示。對(duì)于一般的段式液晶屏,需要專門的驅(qū)動(dòng)電路,而且液晶顯示作為一種被動(dòng)顯示,可視性差,不適合遠(yuǎn)距離觀看;對(duì)于具有驅(qū)動(dòng)電路和單片機(jī)接口的液晶顯示模塊,一般多采用并行接口,對(duì)單片機(jī)的接口要求較高,占用資源多;另外,AT89S52單片機(jī)本身沒有專門的液晶驅(qū)動(dòng)接口。而數(shù)碼管作為一種主動(dòng)顯示器件,具有亮度高、響應(yīng)速度快、價(jià)格便宜、易于購(gòu)買等優(yōu)點(diǎn),而且有遠(yuǎn)距離視覺效果,很適合夜間或者遠(yuǎn)距離操作。因此在本設(shè)計(jì)中,我們采用7段數(shù)碼管作為顯示介質(zhì)。
數(shù)碼管顯示可以分為靜態(tài)顯示和動(dòng)態(tài)顯示兩種。由于本設(shè)計(jì)需要采用四位數(shù)碼管顯示時(shí)間,如果靜態(tài)顯示則占用的口線多,硬件電路復(fù)雜,所以采用動(dòng)態(tài)顯示。
動(dòng)態(tài)顯示是一位一位地輪流點(diǎn)亮各位數(shù)碼管,這種逐位點(diǎn)亮顯示器的方式稱為位掃描。通常各位數(shù)碼管的段選線相應(yīng)并聯(lián)在一起,由一個(gè)8位的I/O口控制;各位的公共陰極位選線由另外的I/O口線控制。動(dòng)態(tài)方式顯示時(shí),各數(shù)碼管輪流選通,要使其穩(wěn)定顯示必須采用掃描方式,即在某一時(shí)刻只選通一位數(shù)碼管并送出相應(yīng)的段碼,在另一時(shí)刻選通另一數(shù)碼管,并送出相應(yīng)的段碼,依次規(guī)律循環(huán),即可以使各位數(shù)碼管顯示將要顯示的字符,雖然這些字符是在不同時(shí)刻分別顯示,但由于人眼存在視覺暫留效應(yīng),只要每位顯示間隔足夠短就可以給人同時(shí)顯示的感覺。
本地圖片,請(qǐng)重新上傳
1.4系統(tǒng)總體電路的設(shè)計(jì)
系統(tǒng)總體電路如下圖所示
AT89S52單片機(jī)為主電路的核心部分,各個(gè)電路均與單片機(jī)相連,由單片機(jī)統(tǒng)籌協(xié)調(diào)各個(gè)電路的運(yùn)行工作。
開始鍵和暫停鍵使用了外部中斷,所以需要連到單片機(jī)的P3.2和P3.3引腳上,這兩個(gè)I/O口的第二功能是單片機(jī)的外部中斷0端口和外部中斷1端口。
顯示電路由四位數(shù)碼管組成,采用動(dòng)態(tài)顯示方式,因此有8位段控制和4位位控制,8位段接控制接P0口,P0.0~P0.7分別控制數(shù)碼管的a b c d e f g dp顯示,位控制接在P2.0和P2.1兩個(gè)口,在通過(guò)一個(gè)2—4譯碼器實(shí)現(xiàn)位控制。
本地圖片,請(qǐng)重新上傳
二 軟件設(shè)計(jì)
2.1主程序設(shè)計(jì)
本系統(tǒng)程序主要模塊由主程序、定時(shí)中斷服務(wù)程序、外部中斷0服務(wù)程序和外部中斷1服務(wù)程序組成。其中主程序是整個(gè)程序的主體??梢詫?duì)各個(gè)中斷程序進(jìn)行調(diào)用。協(xié)調(diào)各個(gè)子程序之間的關(guān)系。
主程序主要是設(shè)置定時(shí)器大的工作模式,對(duì)定時(shí)器賦初值,開總中斷、兩個(gè)外部中斷以及定時(shí)器溢出中斷。并設(shè)置外部中斷為脈沖邊沿觸發(fā)方式。
2.2中斷程序設(shè)計(jì)
本方案中用到了三個(gè)中斷:外部中斷0、外部中斷1和定時(shí)器T0溢出中斷。CPU在響應(yīng)中斷時(shí),先處理高級(jí)中斷,后處理低級(jí)中斷,若有多個(gè)同級(jí)中斷時(shí),則應(yīng)按自然優(yōu)先順序處理。例如當(dāng)CPU正在處理一個(gè)中斷申請(qǐng)時(shí),又出現(xiàn)了另一個(gè)優(yōu)先級(jí)比它高的中斷請(qǐng)求,這時(shí),CPU就暫停對(duì)當(dāng)前優(yōu)先級(jí)較低的中斷源的服務(wù),轉(zhuǎn)去響應(yīng)優(yōu)先級(jí)比它高的中斷請(qǐng)求,并為其服務(wù)。待服務(wù)結(jié)束,再繼續(xù)執(zhí)行原來(lái)較低級(jí)的中斷服務(wù)程序。而當(dāng)CPU為級(jí)別高的中斷服務(wù)程序服務(wù)時(shí),如果級(jí)別低的中斷發(fā)出中斷請(qǐng)求,此時(shí)CPU是不會(huì)響應(yīng)的,所以為了避免開始和暫停兩個(gè)按鍵中的一個(gè)出現(xiàn)沒有響應(yīng)的情況,在進(jìn)行編程是要注意中斷的使用,避免出現(xiàn)中斷的嵌套。合理分配中斷對(duì)本設(shè)計(jì)是很重要的。
(1)外部中斷0服務(wù)程序
外部中斷0服務(wù)程序結(jié)合外部P3.2鍵實(shí)現(xiàn)數(shù)字秒表的啟動(dòng)功能。流程如下圖所示。
本地圖片,請(qǐng)重新上傳
評(píng)論