單片機(jī)秒表的課程設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩18頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  目錄</b></p><p><b>  引言1</b></p><p><b>  1 系統(tǒng)簡(jiǎn)介2</b></p><p><b>  2 硬件設(shè)計(jì)2</b></p><p>  2.1 總體方案的設(shè)計(jì)2</

2、p><p>  2.2 單片機(jī)的選擇3</p><p>  2.3 顯示電路的選擇與設(shè)計(jì)5</p><p>  2.4 復(fù)位電路的選擇與設(shè)計(jì)6</p><p>  2.5 系統(tǒng)總電路的設(shè)計(jì)8</p><p>  3 系統(tǒng)軟件設(shè)計(jì)9</p><p><b>  總結(jié)11

3、</b></p><p><b>  參考文獻(xiàn)13</b></p><p>  附錄A 程序13</p><p><b>  引言</b></p><p>  秒表計(jì)時(shí)器是電器制造,工業(yè)自動(dòng)化控制、國(guó)防、實(shí)驗(yàn)室及科研單位理想的計(jì)時(shí)儀器,它廣泛應(yīng)用于各種繼電器、電磁開(kāi)關(guān),控制器、延時(shí)

4、器、定時(shí)器等的時(shí)間測(cè)試。</p><p>  2004年8月28日15點(diǎn)15分,中國(guó)選手孟關(guān)良/楊文軍在雅典奧運(yùn)會(huì)男子500米劃艇決賽中,以1分40秒278的成績(jī)獲得中國(guó)在雅典奧運(yùn)會(huì)的第28金。這是中國(guó)皮劃艇項(xiàng)目的第一枚奧運(yùn)金牌,也是中國(guó)水上項(xiàng)目在歷屆奧運(yùn)會(huì)上所獲得的第一枚金牌。孟關(guān)良/楊文軍的成績(jī)比獲得銀牌的古巴選手只快了 0.072秒,以至于兩人在奪冠之后還不敢相信。</p><p>

5、  在現(xiàn)在的體育競(jìng)技比賽中,隨著運(yùn)動(dòng)員的水平不斷提高,差距也在不斷縮小。有些運(yùn)動(dòng)對(duì)時(shí)間精度的要求也越來(lái)越高,有時(shí)比賽冠亞軍之間的差距只有幾毫秒,因此就需要高精度的秒表來(lái)記錄成績(jī)。</p><p><b>  1 系統(tǒng)簡(jiǎn)介</b></p><p>  本設(shè)計(jì)的設(shè)計(jì)思路是使用單片機(jī),設(shè)計(jì)秒表,能顯示分分秒秒;有計(jì)時(shí)、暫停、調(diào)時(shí)間等功能。利用AT80C51單片機(jī)的定時(shí)器/計(jì)

6、數(shù)器定時(shí)和記數(shù)的原理,使其能精確計(jì)時(shí)。利用中斷系統(tǒng)使其能實(shí)現(xiàn)開(kāi)始暫停的功能。P0口輸出段碼數(shù)據(jù),P2.0-P2.4口作列掃描輸出,可以實(shí)現(xiàn)開(kāi)始、暫停、清零和修改時(shí)間的功能。顯示電路由八位共陰極數(shù)碼管組成。</p><p>  初始狀態(tài)下計(jì)時(shí)器顯示0.00.000,當(dāng)按下開(kāi)始鍵時(shí),外部中斷INT1向CPU發(fā)出中斷請(qǐng)求,CPU轉(zhuǎn)去執(zhí)行外部中斷1服務(wù)程序,即開(kāi)啟定時(shí)器T0。</p><p>  

7、此秒表精確到毫秒,滿1000毫秒向秒位進(jìn)1,滿60秒向分鐘位進(jìn)1。依次類推,直到9.59.99秒重新復(fù)位。在計(jì)時(shí)過(guò)程中,只要按下模式鍵,則數(shù)碼管顯示暫停,若按下加1鍵,則加1毫秒再按下加1鍵就再加一,以次類推。若再按下模式鍵,再按下加1鍵,則加1秒再按則再加1秒,以次類推。若再按下模式鍵,再按下加1鍵,則分鐘位加1分再按則再加一分,以次類推。再按模式鍵,在按加1鍵則又毫秒位加一。依次循環(huán)。直至滿9.59.999秒。因此可以實(shí)現(xiàn)修改已暫停

8、的時(shí)間功能。</p><p>  在按下復(fù)位鍵時(shí),此數(shù)碼管歸零并重新開(kāi)始計(jì)時(shí),若只按模式鍵即可實(shí)現(xiàn)暫停功能,即顯示當(dāng)此計(jì)時(shí)的成績(jī)。連按三下模式鍵則繼續(xù)開(kāi)始計(jì)時(shí),根據(jù)以上設(shè)計(jì)思路從而實(shí)現(xiàn)數(shù)字電子秒表的計(jì)時(shí)。</p><p>  本文主要內(nèi)容包括三部分:第一部分介紹硬件部分設(shè)計(jì)思路及方案;第二部分介紹了軟件部分的設(shè)計(jì)思路和設(shè)計(jì);最后一部分則是整個(gè)系統(tǒng)的安裝與調(diào)試過(guò)程。</p>&

9、lt;p><b>  2 硬件設(shè)計(jì)</b></p><p>  2.1 總體方案的設(shè)計(jì)</p><p>  數(shù)字電子秒表具有顯示直觀、讀取方便、精度高等優(yōu)點(diǎn),在計(jì)時(shí)中廣泛使用。本設(shè)計(jì)用單片機(jī)組成數(shù)字電子秒表,力求結(jié)構(gòu)簡(jiǎn)單、精度高為目標(biāo)。</p><p>  設(shè)計(jì)中包括硬件電路的設(shè)計(jì)和系統(tǒng)程序的設(shè)計(jì)。其硬件電路主要有主控制器,計(jì)時(shí)與暫停、

10、啟動(dòng)和修改時(shí)間的功能等。主控制器采用單片機(jī)AT80C51,顯示電路采用共陰極LED數(shù)碼管顯示計(jì)時(shí)時(shí)間。</p><p>  本設(shè)計(jì)利用AT80C51單片機(jī)的定時(shí)器/計(jì)數(shù)器定時(shí)和記數(shù)的原理,使其能精確計(jì)時(shí)。利用中斷系統(tǒng)使其能實(shí)現(xiàn)開(kāi)始暫停的功能。模式鍵可以實(shí)現(xiàn)開(kāi)始、暫停的功能,復(fù)位鍵可實(shí)現(xiàn)清零功能和復(fù)位鍵和加一鍵可實(shí)現(xiàn)修改時(shí)間功能。電路原理圖設(shè)計(jì)最基本的要求是正確性,其次是布局合理,最后在正確性和布局合理的前提下力求

11、美觀。</p><p>  根據(jù)要求知道秒表設(shè)計(jì)主要實(shí)現(xiàn)的功能是計(jì)時(shí)和顯示。本設(shè)計(jì)秒表的最小單位為毫秒,能非常準(zhǔn)確記錄一個(gè)跑步人的所用時(shí)間。當(dāng)一處中斷后向CPU發(fā)出加一請(qǐng)求,每發(fā)出一次中斷請(qǐng)求就對(duì)毫秒計(jì)數(shù)單元進(jìn)行加一,達(dá)到1000次就對(duì)秒位進(jìn)行加一,依次類推,直到9.59.999秒重新復(fù)位。 </p><p>  設(shè)計(jì)中包括硬件電路的設(shè)計(jì)和系統(tǒng)程序的設(shè)計(jì)。其硬件電路主要有主控制器,顯示電路

12、和回零、暫停、開(kāi)始、修改時(shí)間等功能。主控制器采用單片機(jī)AT80C51,顯示電路采用八位共陰極LED數(shù)碼管顯示計(jì)時(shí)時(shí)間,三個(gè)按鍵均采用觸點(diǎn)式按鍵。</p><p>  2.2 單片機(jī)的選擇</p><p>  本課題在選取單片機(jī)時(shí),充分借鑒了許多成形產(chǎn)品使用單片機(jī)的經(jīng)驗(yàn),并根據(jù)自己的實(shí)際情況,選擇了Intel公司的AT80C51。</p><p><b>

13、  單片機(jī)的外部結(jié)構(gòu)</b></p><p>  MCS-51系列單片機(jī)是8位單片機(jī)產(chǎn)品,89C51是其中的典型代表,基本模塊包括以下幾個(gè)部分:</p><p>  (1)CPU:89C51的CPU是8位的,另外89C51內(nèi)部有1個(gè)位處理器</p><p> ?。?)R0M:4KB的片內(nèi)程序存儲(chǔ)器,存放開(kāi)發(fā)調(diào)試完成的應(yīng)用程序</p><

14、;p> ?。?)RAM:256B的片內(nèi)數(shù)據(jù)存儲(chǔ)器,容量小,但作用大</p><p> ?。?)I/O口:P0-P3,共4個(gè)口32條雙向且可位尋址的I/O口線</p><p> ?。?)中斷系統(tǒng):共5個(gè)中斷源,3個(gè)內(nèi)部中斷,2個(gè)外部中斷</p><p> ?。?)定時(shí)器/計(jì)數(shù)器:2個(gè)16位的可編程定時(shí)器/計(jì)數(shù)器</p><p> ?。?)

15、通用串行口:全雙工通用異步接收器/發(fā)送器</p><p> ?。?)振蕩器:89C51的外接晶振與內(nèi)部時(shí)鐘振蕩器為CPU提供時(shí)鐘信號(hào)</p><p> ?。?)總線控制:89C51對(duì)外提供若干控制總線,便于系統(tǒng)擴(kuò)展</p><p>  89C51的引腳圖如下:</p><p>  89C51單片機(jī)引腳圖</p><p>

16、;  2.2.2晶體振蕩電路</p><p>  89C51芯片內(nèi)部有一個(gè)高增益反相放大器,用于構(gòu)成振蕩器。引線 XTAL1和XTAL2分別為反向放大器的輸入和輸出,兩端跨接石英晶體及兩個(gè)電容就可構(gòu)成穩(wěn)定的自激振蕩器。</p><p>  這里,我們選用51單片機(jī)12MHZ的內(nèi)部振蕩方式,電容器C1,C2起穩(wěn)定振蕩頻率,并對(duì)振蕩頻率有微調(diào)作用,C1和C2可在20-100PF之間取值,這里取

17、33P。</p><p>  89C51具有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash,256字節(jié)RAM,32 位I/O口線, 2個(gè)數(shù)據(jù)指針,兩個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,8051可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下

18、一個(gè)中斷或硬件復(fù)位為止。CPU是單片機(jī)的核心部件。它由運(yùn)算器和控制器等部件組成。</p><p><b>  (1) 運(yùn)算器</b></p><p>  運(yùn)算器的功能是進(jìn)行算術(shù)運(yùn)算和邏輯運(yùn)算??梢詫?duì)半字節(jié)(4位)、單字節(jié)等數(shù)據(jù)進(jìn)行操作。例如能完成加、減、乘、除、加1、減1、BCD碼十進(jìn)制調(diào)整、比較等算術(shù)運(yùn)算和與、或、異或、求補(bǔ)、循環(huán)等邏輯操作,操作結(jié)果的狀態(tài)信息送至狀

19、態(tài)寄存器。8051運(yùn)算器還包含有一個(gè)布爾處理器,用來(lái)處理位操作。</p><p> ?。?) 程序計(jì)數(shù)器PC</p><p>  程序計(jì)數(shù)器PC用來(lái)存放即將要執(zhí)行的指令地址,共16位,可對(duì)64K程序存儲(chǔ)器直接尋址。執(zhí)行指令時(shí),PC內(nèi)容的低8位經(jīng)P0口輸出,高8位經(jīng)P2口輸出。</p><p><b> ?。?) 令寄存器</b></p&g

20、t;<p>  指令寄存器中存放指令代碼。CPU執(zhí)行指令時(shí),由程序存儲(chǔ)器中讀取的指令代碼送入指令寄存器,經(jīng)譯碼后由定時(shí)與控制電路發(fā)出相應(yīng)的控制信號(hào),完成指令功能。</p><p>  2.3 顯示電路的選擇與設(shè)計(jì)</p><p>  對(duì)于數(shù)字顯示電路,通常采用液晶顯示或數(shù)碼管顯示。本設(shè)計(jì)的顯示電路采用8段數(shù)碼管作為顯示介質(zhì)。</p><p>  由于

21、數(shù)碼管是有P0口來(lái)驅(qū)動(dòng),它內(nèi)部沒(méi)有上拉電阻,作為輸出口時(shí)驅(qū)動(dòng)能力比較弱,不能點(diǎn)亮數(shù)碼顯示管,因此P0口必須接上拉電阻來(lái)提高驅(qū)動(dòng)能力。另外一位共陰數(shù)碼管的驅(qū)動(dòng)電流一般為20mA左右,如果電流太大容易造成數(shù)碼管損壞,所以也需要根據(jù)電源的電壓值來(lái)確定上拉電阻的大小。如果電阻過(guò)小,勢(shì)必會(huì)形成灌電流過(guò)大,造成單片機(jī)IO的損壞,如果電阻過(guò)大,那么對(duì)拉電流沒(méi)有太大的影響。電源供電電壓為5V,當(dāng)上拉電阻選用220Ω電阻時(shí)灌電流為22mA。不會(huì)損壞單片機(jī)

22、的I/O口,同時(shí)也可以為數(shù)碼顯示管起到限制電流的保護(hù)作用。 </p><p>  P3口引腳第二功能表</p><p>  2.4 復(fù)位電路的選擇與設(shè)計(jì)</p><p>  當(dāng)8051單片機(jī)的復(fù)位引腳RST(全稱RESET)出現(xiàn)2個(gè)機(jī)器周期以上的高電平時(shí),單片機(jī)就完成了復(fù)位操作。如果RST持續(xù)為高電平,單片機(jī)就處于循環(huán)復(fù)位狀態(tài),而無(wú)法執(zhí)行程序。因此要求單片機(jī)復(fù)位后

23、能脫離復(fù)位狀態(tài)。而本系統(tǒng)選用的是12MHz的晶振,因此一個(gè)機(jī)器周期為1μs,那么復(fù)位脈沖寬度最小應(yīng)為2μs。在實(shí)際應(yīng)用系統(tǒng)中,考慮到電源的穩(wěn)定時(shí)間,參數(shù)漂移,晶振穩(wěn)定時(shí)間以及復(fù)位的可靠性等因素,必須有足夠的余量。</p><p>  根據(jù)應(yīng)用的要求,復(fù)位操作通常有兩種基本形式:上電復(fù)位、手動(dòng)復(fù)位。</p><p>  上電復(fù)位要求接通電源后,自動(dòng)實(shí)現(xiàn)復(fù)位操作。80C51單片機(jī)的上電復(fù)位PO

24、R(Power On Reset)實(shí)質(zhì)上就是上電延時(shí)復(fù)位,也就是在上電延時(shí)期間把單片機(jī)鎖定在復(fù)位狀態(tài)上。在單片機(jī)每次初始加電時(shí),首先投入工作的功能部件是復(fù)位電路。復(fù)位電路把單片機(jī)鎖定在復(fù)位狀態(tài)上并且維持一個(gè)延時(shí)(記作TRST),以便給予電源電壓從上升到穩(wěn)定的一個(gè)等待時(shí)間;在電源電壓穩(wěn)定之后,再插入一個(gè)延時(shí),給予時(shí)鐘振蕩器從起振到穩(wěn)定的一個(gè)等待時(shí)間;在單片機(jī)開(kāi)始進(jìn)入運(yùn)行狀態(tài)之前,還要至少推遲2個(gè)機(jī)器周期的延時(shí)。</p>&l

25、t;p>  上述一系列的延時(shí),都是利用在單片機(jī)RST引腳上外接一個(gè)RC支路的充電時(shí)間而形成的。典型復(fù)位電路如圖1.8(a)所示,其中的阻容值是原始手冊(cè)中提供的。</p><p><b>  上電復(fù)位延時(shí)電路</b></p><p>  標(biāo)準(zhǔn)80C51不僅復(fù)位源比較單一,而且還沒(méi)有設(shè)計(jì)內(nèi)部上電復(fù)位的延時(shí)功能,因此必須借助于外接阻容支路來(lái)增加延時(shí)環(huán)節(jié),如圖1.8(a

26、)所示。其實(shí),外接電阻R還是可以省略的,理由是一些CMOS單片機(jī)芯片內(nèi)部存在一個(gè)現(xiàn)成的下拉電阻Rrst。例如,80C51系列的Rrst阻值約為50~200 kΩ;P89V51Rx2系列的Rrst阻值約為40~225 kΩ,如圖1.9所示。因此,在圖1.8(a)基礎(chǔ)上,上電復(fù)位延時(shí)電路還可以精簡(jiǎn)為圖1.8(b)所示的簡(jiǎn)化電路(其中電容C的容量也相應(yīng)減小了)。</p><p>  復(fù)位引腳RST內(nèi)部電路</p&

27、gt;<p>  在每次單片機(jī)斷電之后,須使延時(shí)電容C上的電荷立刻放掉,以便為隨后可能在很短的時(shí)間內(nèi)再次加電作好準(zhǔn)備。否則,在斷電后C還沒(méi)有充分放電的情況下,如果很快又加電,那么RC支路就失去了它應(yīng)有的延遲功能。因此,在圖1.8(a)的基礎(chǔ)上添加一個(gè)放電二極管D,上電復(fù)位延時(shí)電路就變成了如圖1.8(c)所示的改進(jìn)電路。也就是說(shuō),只有RC支路的充電過(guò)程對(duì)電路是有用的,放電過(guò)程不僅無(wú)用,而且會(huì)帶來(lái)潛在的危害。于是附加一個(gè)放電二

28、極管D來(lái)大力縮短放電持續(xù)時(shí)間,以便消除隱患。二極管D只有在單片機(jī)斷電的瞬間(即VCC趨近于0 V,可以看作VCC對(duì)地短路)正向?qū)?,平時(shí)一直處于反偏截止?fàn)顟B(tài)。</p><p>  手動(dòng)復(fù)位要求在電源接通的條件下,在單片機(jī)運(yùn)行期間,如果發(fā)生死機(jī),用按鈕開(kāi)關(guān)操作使單片機(jī)復(fù)位。單片機(jī)要完成復(fù)位,必須向復(fù)位端輸出并持續(xù)兩個(gè)機(jī)器周期以上的高電平,從而實(shí)現(xiàn)復(fù)位操作。</p><p>  本設(shè)計(jì)采用上電

29、且開(kāi)關(guān)復(fù)位電路,如圖1.10所示上電后,由于電容充電,使RST持續(xù)一段高電平時(shí)間。當(dāng)單片機(jī)已在運(yùn)行之中時(shí),按下復(fù)位鍵也能使RST持續(xù)一段時(shí)間的高電平,從而實(shí)現(xiàn)上電且開(kāi)關(guān)復(fù)位的操作。通常選擇C=10~30μF,R=1K,本設(shè)計(jì)采用的電容值為22μF的電容和電阻為1K的電阻。</p><p><b>  單片機(jī)復(fù)位電路</b></p><p>  2.5 系統(tǒng)總電路的設(shè)

30、計(jì)</p><p>  系統(tǒng)總電路由以上設(shè)計(jì)的顯示電路,時(shí)鐘電路,按鍵電路和復(fù)位電路組成,只要將單片機(jī)與以上各部分電路合理的連接就組成了系統(tǒng)總電路。系統(tǒng)總電路圖附錄B所示。</p><p>  8051單片機(jī)為主電路的核心部分,各個(gè)電路均和單片機(jī)相連接,由單片機(jī)統(tǒng)籌和協(xié)調(diào)各個(gè)電路的運(yùn)行工作。</p><p>  8051單片機(jī)提供了XTAL1和XTAL2兩個(gè)專用引腳

31、接晶振電路,因此只要將晶振電路接到兩個(gè)專用引腳即可為單片機(jī)提供時(shí)鐘脈沖,但在焊接晶振電路時(shí)要盡量使晶振電路靠近單片機(jī),這樣可以為單片機(jī)提供穩(wěn)定的始終脈沖。</p><p>  復(fù)位電路同晶振電路,單片機(jī)設(shè)有一個(gè)專用的硬件復(fù)位接口,并設(shè)置為高電平有效。</p><p>  按鍵電路與單片機(jī)的端口連接可以由用戶自己設(shè)定,本設(shè)計(jì)中軟件復(fù)位鍵和查看鍵分別接單片機(jī)的P1.1和P2.5,均設(shè)為低電平有

32、效。而另外的開(kāi)始鍵和暫停鍵兩鍵使用了外部中斷,所以需要連接到單片機(jī)的特殊接口P3.3和P3.2,這兩個(gè)I/O口的第二功能分別為單片機(jī)的外部中斷1端口和外部中斷0端口。同樣設(shè)置為位低電平有效。</p><p>  顯示電路由五位數(shù)碼管組成,采用動(dòng)態(tài)顯示方式,因此有8位段控制端和5位位控制端,八位段控制接P0口,P0.0~P0.7分別控制數(shù)碼顯示管的a、b、c、d、e、f、g、dp顯示,8051的P0口沒(méi)有集成上拉電

33、阻,高電平的驅(qū)動(dòng)能力很弱,所以需要接上拉電阻來(lái)提高P0的高電平驅(qū)動(dòng)能力。五位位控制則由低位到高位分別接到P2.0~P2.4口,NPN三極管9013做為位控制端的開(kāi)關(guān),當(dāng)P2.0~P2.4端口任意一個(gè)端口為高電平時(shí),與其相對(duì)應(yīng)的三極管就導(dǎo)通,對(duì)應(yīng)的數(shù)碼管導(dǎo)通顯示。</p><p>  通過(guò)以上設(shè)計(jì)已經(jīng)將各部分電路與單片機(jī)有機(jī)的結(jié)合到一起,硬件部分的設(shè)計(jì)以大功告成,剩下的部分就是對(duì)單片機(jī)的編程,使單片機(jī)按程序運(yùn)行,實(shí)

34、現(xiàn)數(shù)字電子秒表的全部功能。</p><p><b>  3 系統(tǒng)軟件設(shè)計(jì)</b></p><p>  本設(shè)計(jì)采用了匯編語(yǔ)言編寫,匯編語(yǔ)言由于采用了助記符號(hào)來(lái)編寫程序,比用機(jī)器語(yǔ)言的二進(jìn)制代碼編程要方便些,在一定程度上簡(jiǎn)化了編程過(guò)程。匯編語(yǔ)言的特點(diǎn)是用符號(hào)代替了機(jī)器指令代碼,而且助記符與指令代碼一一對(duì)應(yīng),基本保留了機(jī)器語(yǔ)言的靈活性。使用匯編語(yǔ)言能面向機(jī)器并較好地發(fā)揮機(jī)

35、器的特性,得到質(zhì)量較高的程序。</p><p><b>  匯編語(yǔ)言的特點(diǎn):</b></p><p>  (1).面向機(jī)器的低級(jí)語(yǔ)言,通常是為特定的計(jì)算機(jī)或系列計(jì)算機(jī)專門設(shè)計(jì)的。</p><p>  (2).保持了機(jī)器語(yǔ)言的優(yōu)點(diǎn),具有直接和簡(jiǎn)捷的特點(diǎn)。</p><p>  (3).可有效地訪問(wèn)、控制計(jì)算機(jī)的各種硬件設(shè)備,

36、如磁盤、存儲(chǔ)器、CPU、I/O端口等。</p><p>  (4).目標(biāo)代碼簡(jiǎn)短,占用內(nèi)存少,執(zhí)行速度快,是高效的程序設(shè)計(jì)語(yǔ)言。</p><p>  (5).經(jīng)常與高級(jí)語(yǔ)言配合使用,應(yīng)用十分廣泛。</p><p>  在程序設(shè)計(jì)過(guò)程中,為了有效地完成任務(wù),把所要完成的任務(wù)精心的分割成若干個(gè)相互獨(dú)立但相互又仍可有聯(lián)系的任務(wù)模塊,這些任務(wù)模塊使得任務(wù)變得相對(duì)單純,對(duì)外的

37、數(shù)據(jù)交換相對(duì)簡(jiǎn)單,容易編寫,容易檢測(cè),容易閱讀和維護(hù)。這種程序設(shè)計(jì)思想稱為模塊化程序設(shè)計(jì)思想。模塊化結(jié)構(gòu)程序的設(shè)計(jì),可以使系統(tǒng)軟件便于調(diào)試與優(yōu)化,也使其他人更好地理解和閱讀系統(tǒng)的程序設(shè)計(jì)。程序的主要模塊有:主程序、顯示程序、定時(shí)溢出中斷服務(wù)程序、外部中斷服務(wù)程序。</p><p>  Proteus ISIS是英國(guó)Labcenter公司開(kāi)發(fā)的電路分析與實(shí)物仿真軟件,它可以仿真、分析(SPICE)各種模擬器件和集成

38、電路。該軟件的主要特點(diǎn)總結(jié)后有以下四點(diǎn):①實(shí)現(xiàn)了單片機(jī)仿真和SPICE電路仿真相結(jié)合的功能。②支持目前主流單片機(jī)系統(tǒng)的仿真。③提供了軟件調(diào)試功能,并可以與WAVE聯(lián)合仿真調(diào)試。④具有強(qiáng)大的原理圖繪制功能。總之,該軟件是一款集單片機(jī)和SPICE分析于一身的仿真軟件,功能極其強(qiáng)大。在電子領(lǐng)域中也起到了很大的作用,它的出現(xiàn)仿真不需要先焊接電路,可以先仿真調(diào)試通過(guò)后在焊電路,節(jié)省了不少在硬件調(diào)試上所花的時(shí)間。</p><p&

39、gt;  Proteus ISIS的工作界面是一種標(biāo)準(zhǔn)的Windows界面。它包括標(biāo)題欄、主菜單、狀態(tài)欄、標(biāo)準(zhǔn)工具欄、繪圖工具欄、對(duì)象選擇按鈕、預(yù)覽對(duì)象方位控制按鈕、仿真進(jìn)程控制按鈕、預(yù)覽窗口、對(duì)象選擇器窗口、圖形編輯窗口等十幾個(gè)工具,方便了使用者的使用。</p><p>  首先打開(kāi)已經(jīng)畫好的proteus DSN文件,雙擊圖中的AT89S52芯片,就彈出一個(gè)窗口,在Program File項(xiàng)中通過(guò)路徑選擇在W

40、AVE中生成的HEX文件,雙擊選中后確定,這樣仿真圖中的AT89S52芯片就已經(jīng)讀取了本設(shè)計(jì)中的HEX文件。單擊“三角形按鈕”進(jìn)行仿真。通過(guò)對(duì)仿真結(jié)果的觀察來(lái)對(duì)程序進(jìn)行修改,最終使程序到達(dá)設(shè)計(jì)要求。</p><p><b>  程序仿真圖</b></p><p><b>  總結(jié) </b></p><p>  本設(shè)計(jì)的數(shù)

41、字電子秒表是由8051單片機(jī)、共陰數(shù)碼顯示管、控制按鍵、三極管等器件構(gòu)成的,設(shè)有六位計(jì)時(shí)顯示,開(kāi)始、暫停、復(fù)位按鍵以及一個(gè)系統(tǒng)整機(jī)復(fù)位按鈕。計(jì)時(shí)精度能到達(dá)10ms,設(shè)計(jì)精簡(jiǎn),使用簡(jiǎn)單易懂。系統(tǒng)設(shè)計(jì)合理,線路簡(jiǎn)單、功能先進(jìn),性能穩(wěn)定,程序精簡(jiǎn)。并給出了詳細(xì)的電路設(shè)計(jì)方法。本系統(tǒng)是以單片機(jī)為核心,僅單片機(jī)方面知識(shí)是不夠的,還應(yīng)根據(jù)具體硬件結(jié)構(gòu),以及針對(duì)具體應(yīng)用對(duì)象特點(diǎn)的軟件結(jié)合,以作完善。所以采用匯編語(yǔ)言來(lái)進(jìn)行軟件設(shè)計(jì),利用匯編語(yǔ)言面向機(jī)器

42、并能較好的發(fā)揮機(jī)器的特性,得到較高的程序,同時(shí)匯編語(yǔ)言目標(biāo)代碼簡(jiǎn)短,占用內(nèi)存少,執(zhí)行速度快,能提高秒表的精度。</p><p>  通過(guò)本次設(shè)計(jì),復(fù)習(xí)鞏固我們以前所學(xué)習(xí)的數(shù)字、模擬電子技術(shù)、單片機(jī)原理及應(yīng)用等課程知識(shí),加深對(duì)各門課程及相互關(guān)系的理解,并成功使用了Wave、Protel 99se和Proteus三款電子軟件,使理論知識(shí)系統(tǒng)化、實(shí)用化,系統(tǒng)地掌握微機(jī)應(yīng)用系統(tǒng)的一般設(shè)計(jì)方法,培養(yǎng)較強(qiáng)的編程能力、開(kāi)發(fā)能力

43、。</p><p>  同時(shí),在設(shè)計(jì)的過(guò)程中,我也發(fā)現(xiàn)了本系統(tǒng)的許多不足和可以改進(jìn)的地方。但因時(shí)間緊迫等原因沒(méi)能改進(jìn)。本設(shè)計(jì)的數(shù)字電子秒表缺少對(duì)多次計(jì)時(shí)時(shí)間進(jìn)行記錄的功能。應(yīng)給在單片機(jī)的內(nèi)部存儲(chǔ)區(qū)多設(shè)置一些存儲(chǔ)空間,用來(lái)存儲(chǔ)多次計(jì)時(shí)時(shí)間。并在程序中編入對(duì)多次計(jì)時(shí)時(shí)間的調(diào)用顯示。雖然存在不足,但本設(shè)計(jì)的數(shù)字電子秒表仍具有它的實(shí)用性。</p><p><b>  參考文獻(xiàn) 

44、</b></p><p>  [1]王東峰等.單片機(jī)C語(yǔ)言應(yīng)用100例[M].電子工業(yè)出版社,2009.</p><p>  [2]陳海宴.51單片機(jī)原理及應(yīng)用[M].北京航空航天大學(xué)出版社,2010.</p><p>  [3]占躍華.C語(yǔ)言程序設(shè)計(jì)[M].北京郵電大學(xué)出版社,2010. </p><p>  [4]李

45、平等.單片機(jī)入門與開(kāi)發(fā)[M].機(jī)械工業(yè)出版社,2008. </p><p><b>  附錄A 程序</b></p><p>  #include<reg51.h></p><p>  #define uint unsigned int</p><p>  #define uchar unsig

46、ned char</p><p>  Uchar code segcode[]=</p><p>  {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//0,1,2,3,4,5,6,7,8,9,-</p><p>  uchar code dispbit[]={0x01,0x02,0x04,0x08,

47、0x10,0x20,0x40,0x80};//數(shù)碼管位選碼</p><p>  uchar buffer[]={0,0,0,0,0,0,0,0};</p><p>  uint min,sec,ms,kk;</p><p>  sbit key1=P1^0;</p><p>  sbit key2=P1^3;</p><p

48、>  uint status;//函數(shù)聲明</p><p>  void delayMS(uint t) ; </p><p>  void keyprocess(unsigned char key);</p><p>  void display();</p><p>  void timer0();</p>&l

49、t;p>  main() //主函數(shù)</p><p><b>  { </b></p><p>  bit keyrelease;</p><p>  uchar buf;</p><p>  uchar keyinput;</p><p>  keyrelease=1;&l

50、t;/p><p><b>  buf=0xff;</b></p><p>  TMOD=0x01; //T0工作在方式1,16位計(jì)數(shù)器</p><p>  TH0=(65536-1000)/256; // 定時(shí)器0設(shè)置延時(shí)1ms中斷初始值</p><p>  TL0=(65536-1000)%256;&l

51、t;/p><p>  TR0=1; </p><p>  IE=0x82; //開(kāi)定時(shí)器0中斷</p><p><b>  status=0;</b></p><p>  while(1) </p><p>  { //鍵掃描程序 </

52、p><p>  keyinput=P1&0xf0;</p><p>  if(keyinput!=0xf0) </p><p><b>  { </b></p><p>  delayMS(1);</p><p>  if(keyinput!=0xf0)</p><

53、;p><b>  {</b></p><p>  if(keyrelease==1)</p><p><b>  {</b></p><p>  keyrelease=0;</p><p>  buf = keyinput; //buf用來(lái)暫時(shí)存放鍵值</p><p&g

54、t;<b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  keyrelease=1;</p><p>  keypr

55、ocess(buf); //調(diào)用按鍵處理函數(shù)</p><p>  buf = 0xff;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>

56、  {</b></p><p>  keyrelease=1;</p><p>  keyprocess(buf);</p><p><b>  buf=0xff;</b></p><p><b>  }</b></p><p>  display();</

57、p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //延時(shí)函數(shù)</b></p><p>  void delayMS(uint t) // 晶振頻率12M</p><p><b>  

58、{</b></p><p><b>  uint i;</b></p><p>  while(t--)</p><p>  for(i=0;i<125;i++);</p><p><b>  }</b></p><p>  void keyprocess(

59、unsigned char key) </p><p><b>  { </b></p><p>  if(key1==0)</p><p><b>  {</b></p><p>  delayMS(1);</p><p>  while(key1==0)</p

60、><p><b>  ;</b></p><p><b>  kk++;</b></p><p><b>  }</b></p><p>  switch(kk)</p><p><b>  {</b></p><

61、p><b>  case 1:</b></p><p>  EA=0;ET0=0;TR0=0;</p><p>  if(key2==0)</p><p><b>  {</b></p><p>  delayMS(1);</p><p>  while(key2==0

62、)</p><p><b>  ;</b></p><p><b>  ms++;</b></p><p>  if(ms>999)</p><p><b>  ms=0;</b></p><p><b>  }</b&g

63、t;</p><p><b>  break;</b></p><p>  case 2:</p><p>  if(key2==0)</p><p><b>  {</b></p><p>  delayMS(1);</p><p>  w

64、hile(key2==0);</p><p><b>  sec++;</b></p><p>  if(sec>59)</p><p><b>  sec=0;</b></p><p><b>  }</b></p><p>

65、<b>  break;</b></p><p>  case 3:</p><p>  if(key2==0)</p><p><b>  {</b></p><p>  delayMS(1);</p><p>  while(key2==0)</p>

66、<p><b>  ;</b></p><p><b>  min++;</b></p><p><b>  if(min>9)</b></p><p><b>  min=0;</b></p><p><b>  }

67、</b></p><p><b>  break;</b></p><p><b>  case 4:</b></p><p>  kk=0;EA=1;ET0=1;TR0=1;</p><p><b>  break;</b></p><p

68、><b>  }</b></p><p><b>  }</b></p><p><b>  //數(shù)碼管顯示函數(shù)</b></p><p>  void display()</p><p><b>  {</b></p><p>

69、;<b>  uchar i;</b></p><p><b>  //正常計(jì)時(shí)顯示</b></p><p><b>  {</b></p><p>  buffer[0]=min; // 顯示分的十位</p><p>  buffer[1]=10;

70、 // 顯示分的個(gè)位</p><p>  buffer[2]=sec/10; // 顯示‘-’</p><p>  buffer[3]=sec%10; // 顯示秒的十位</p><p>  buffer[4]=10; // 顯示秒的個(gè)位</p><p>  buffer[5]=ms

71、/100; // 顯示‘-’</p><p>  buffer[6]=(ms-100*buffer[5])/10; // 顯示毫秒的十位</p><p>  buffer[7]=ms-100*buffer[5]-10*buffer[6]; // 顯示毫秒的個(gè)位</p><p>  for(i=0;i&

72、lt;8;i++)</p><p><b>  { </b></p><p>  P0=segcode[buffer[i]];</p><p>  P2=dispbit[i];</p><p>  delayMS(1); //防止數(shù)碼管顯示的時(shí)候閃動(dòng)</p><p><b>  

73、P2=0x0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //定時(shí)器0中斷函數(shù)</p><p>  void timer0() inte

74、rrupt 1 using 2 </p><p><b>  { </b></p><p>  static uint count;</p><p>  TH0=(65536-1000)/256; // 定時(shí)器0設(shè)置初始值1ms中斷初始值</p><p>  TL0=(65536-1000)%256; &

75、lt;/p><p><b>  TR0=1;</b></p><p>  count++; //正常計(jì)時(shí)</p><p>  if(count>=1) // 定時(shí) 0.01S 到,以下為時(shí)鐘的正常走鐘邏輯</p><p>  { </p><p&

76、gt;<b>  count=0;</b></p><p><b>  ms++;</b></p><p>  if(ms>= 1000)</p><p>  { </p><p>  ms=0; sec++;</p><p>  if(s

77、ec>= 60) </p><p>  { </p><p>  sec=0; min++;</p><p>  if(min>= 10) </p><p><b>  { </b></p><p><b>  min=0; </b><

78、;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b><

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論