基于89c51單片機的秒表課程設(shè)計_第1頁
已閱讀1頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  1 引言</b></p><p>  隨著電子技術(shù)的發(fā)展,電子技術(shù)在各個領(lǐng)域的運用也越來越廣泛,人們對它的認識也逐步加深。秒表計時器常常用于體育競賽及各種其他要求有較精確時間的各領(lǐng)域中。其中啟/停開關(guān)的使用方法與傳統(tǒng)的機械計時器相同,即按一下啟/停開關(guān),啟動計時器開始計時,再按一下啟/停開關(guān)計時終止。而復(fù)位開關(guān)可以在任何情況下使用,即使在計時過程中,只要按一下復(fù)

2、位開關(guān),計時應(yīng)立即終止。</p><p><b>  2 設(shè)計方案及原理</b></p><p>  以單片機為核心,設(shè)計一個秒表,具有計時功能,按鍵有啟動計時、數(shù)據(jù)清零、停止、時間顯示。</p><p>  采用3個LED數(shù)碼管顯示時間,計時范圍設(shè)置為0~99.9秒,即精確到0.1秒,用按鍵控制秒表的“開始”、“暫?!?、“復(fù)位”,按“開始”按

3、鍵,開始計時;按“暫停”按鍵,系統(tǒng)暫停計時;再按“開始”鍵,系統(tǒng)繼續(xù)計時;數(shù)碼管顯示當前計時值;按“復(fù)位”按鍵,系統(tǒng)清零。</p><p><b>  3 硬件設(shè)計</b></p><p>  MCS-51系列單片機是8位單片機產(chǎn)品,89C51是其中的典型代表,基本模塊包括以下幾個部分:</p><p>  (1)CPU:89C51的CPU是8

4、位的,另外89C51內(nèi)部有1個位處理器;</p><p>  (2)R0M:4KB的片內(nèi)程序存儲器,存放開發(fā)調(diào)試完成的應(yīng)用程序;</p><p>  (3)RAM:256B的片內(nèi)數(shù)據(jù)存儲器,容量小,但作用大;</p><p>  (4)I/O口:P0-P3,共4個口32條雙向且可位尋址的I/O口線;</p><p>  (5)中斷系統(tǒng):共5個

5、中斷源,3個內(nèi)部中斷,2個外部中斷;</p><p>  (6)定時器/計數(shù)器:2個16位的可編程定時器/計數(shù)器;</p><p>  (7)通用串行口:全雙工通用異步接收器/發(fā)送器;</p><p>  (8)振蕩器:89C51的外接晶振與內(nèi)部時鐘振蕩器為CPU提供時鐘信號;</p><p>  (9)總線控制:89C51對外提供若干控制總

6、線,便于系統(tǒng)擴展。</p><p>  89C51單片機內(nèi)部的振蕩電路是一個高增益反相放大器,引線XTAL1和XTAL2分別為反相振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入和來自反相振蕩器的輸出,該反相放大器可以配置為片內(nèi)振蕩器。</p><p>  采用上電復(fù)位,上電后,由于電容充電,使RST持續(xù)一段時間的高電平,從而實現(xiàn)上電復(fù)位操作。</p><p>  采用3個

7、LED數(shù)碼管,LED是七段顯示器,內(nèi)部有7個條形發(fā)光二極管和1個小圓點發(fā)光二極管,根據(jù)各管的亮暗組成字符。用Proteus軟件畫出主電路圖見附錄一。</p><p><b>  4 軟件設(shè)計</b></p><p><b>  (1)秒表的初始化</b></p><p>  根據(jù)程序流程圖,先進行秒表的初始化,即:①將I/

8、O口P3全寫一,為秒表的控制輸入做好準備;②將數(shù)碼管全部置零,使其處于秒表計時的初始狀態(tài);③將工作寄存器R0~R2以及30H初始化,留待后面的計時程序備用;④將定時器0置于工作方式1,并為其裝入計時預(yù)置數(shù)D8FE(因為程序運行過程中占用的時間會導(dǎo)致一定誤差,此為經(jīng)實物測試之后的修正值),即將定時器定為每10ms溢出;⑤開總中斷允許和定時器0中斷允許。初始化完成后,即進入之后的按鍵掃描程序。</p><p><

9、;b>  (2)按鍵檢測程序</b></p><p>  輪流檢測開始計時(P3.2)、暫停計時(P3.3)、秒表清零(P3.4)三個按鍵。若發(fā)現(xiàn)有一個按鍵出現(xiàn)低電平(可能被按下),則延時10ms(調(diào)用延時子程序DELAY),延時完成后,若發(fā)現(xiàn)低電平消失,則說明該按鍵實際上未被按下,此時轉(zhuǎn)回按鍵檢測處繼續(xù)檢測;若發(fā)現(xiàn)仍然是低電平,則說明此鍵確實被按下了,此時就跳轉(zhuǎn)至相應(yīng)的程序標號處,執(zhí)行相應(yīng)的功

10、能。</p><p><b>  (3)開始計時</b></p><p>  若確認“開始計時”鍵被按下,則跳轉(zhuǎn)至程序標號“RUN”處,將定時器0計時允許控制位TR0置位,則定時器開始運行。此動作完成后,返回按鍵檢測程序,等待操作者的下一次指令。</p><p><b>  (4)計時程序</b></p>&

11、lt;p>  定時器0計時至10ms,溢出,引發(fā)中斷,程序跳轉(zhuǎn)至定時器0中斷服務(wù)程序入口000BH處執(zhí)行。程序跳轉(zhuǎn)至中斷服務(wù)程序TIME0。由于秒表的最小計時單位是0.1s,即100ms,因此需加入軟件計時,使定時器0溢出10次之后才改變數(shù)碼管的顯示狀態(tài)。因此每來一次中斷就將30H中的數(shù)加1,若30H中的數(shù)沒有到10,則給定時器0重新裝入預(yù)置數(shù),之后中斷返回并繼續(xù)等待中斷;到10了,才進入顯示程序,改變數(shù)碼管的顯示狀態(tài),執(zhí)行完畢之

12、后中斷返回并繼續(xù)等待中斷。</p><p><b>  (5)顯示程序</b></p><p>  將數(shù)碼管的段選碼放在數(shù)表TAB中。每次100ms計時完成后,將R0中的值(初值為0)送入A,然后自加1。若R0中的值沒到10,則使用累加器A查表,并將查得的數(shù)碼管段選碼送入毫秒位數(shù)碼管。之后將30H中的數(shù)置零,中斷返回。若發(fā)現(xiàn)R0中的數(shù)到10了,則將R0置零,并轉(zhuǎn)入秒位

13、進位子程序SECOND,向秒位進位,之后,繼續(xù)照常向毫秒位送數(shù)。</p><p><b>  (6)暫停計時</b></p><p>  若確認“暫停計時”鍵被按下,則跳轉(zhuǎn)至程序標號“PAUSE”處,將定時器0計時允許控制位TR0置零,則定時器暫停運行。此動作完成后,返回按鍵檢測程序,等待操作者的下一次指令。</p><p><b>

14、  (7)秒表清零</b></p><p>  若確認“秒表清零”鍵被按下,則跳轉(zhuǎn)至程序標號“STOP”處,將TR0置零,關(guān)閉定時器0運行。并且將數(shù)碼管、工作寄存器、定時器0預(yù)置數(shù)全部重置,使其處于秒表計時的初始狀態(tài)。此動作完成后,返回按鍵檢測程序,等待操作者的下一次指令。</p><p><b>  (8)延時程序</b></p><

15、p>  用于按鍵延時防抖,延時10ms。程序清單見附錄二。</p><p>  程序流程圖如圖1所示。</p><p><b>  圖1 程序流程圖</b></p><p><b>  4.3 程序仿真</b></p><p>  將以上程序清單導(dǎo)入先前做好的Proteus仿真電路,匯編之后,

16、按</p><p><b>  鍵開始進行仿真。</b></p><p><b>  仿真結(jié)果如圖2。</b></p><p><b>  圖2 仿真結(jié)果圖</b></p><p>  仿真開始后,第一個按鈕為計時按鈕,點擊開始計時;第二個按鈕為暫停按鈕,點擊則暫停計時;第三個

17、按鈕為復(fù)位按鈕,點擊后秒表復(fù)位歸零。三個顯示器分別是十秒、秒、微秒的顯示。如圖2顯示的為21.9秒。</p><p><b>  5 總結(jié)</b></p><p>  在此次課程設(shè)計中秒表雖然是一個非常簡單的功能,但要在單片機中使用匯編語言來實現(xiàn)這個功能,仍然花了我不少心思。</p><p>  首先是計時的問題,由于單片機計時器最大只能計時6

18、5.5ms,因此要實現(xiàn)毫秒位的變化,我采用了軟件計時的方法,單片機只需計時10ms,然后用軟件重復(fù)10次,即可達到計時100ms的目的。</p><p>  顯示方面,為了使編程簡單,我使用了靜態(tài)顯示。不過這使得占用I/O口線過多,而且連線復(fù)雜繁瑣,為實物的制作帶來了不便。在以后的學(xué)習和應(yīng)用中我會努力加深動態(tài)掃描顯示的理解,爭取熟練運用。</p><p>  根據(jù)書本知識,我們一開始只給P

19、0口加上了上拉電阻,但是實物做成后我們發(fā)現(xiàn)P1和P2口得輸出顯示非常暗,初步確定是驅(qū)動能力不足的問題后,我們給二者也加上了上拉電阻,結(jié)果使得顯示正常了。由此我們了解到,實踐才是檢驗真理的唯一標準,有時候書本上的知識需要經(jīng)過實踐的改進,才能運用到實際中。</p><p>  此次課程設(shè)計鞏固了我的基礎(chǔ)知識,提高了我的應(yīng)用水平,鍛煉了我的動手能力,使我受益匪淺。然而,在吸取經(jīng)驗的同時,我也吃了不少教訓(xùn)。在編程、仿真、

20、焊接方面都走了不少彎路。但是,學(xué)則要有所收獲,經(jīng)過此次的鍛煉,我在很多方面都已經(jīng)有所提高,知識也掌握得更加扎實了。</p><p>  在今后的學(xué)習和實踐中,我將繼續(xù)努力鉆研,提高自己,爭取在學(xué)術(shù)和記憶上獲得更大的進步。</p><p><b>  參考文獻</b></p><p>  [1]張毅剛, 彭喜元.單片機原理及接口技術(shù)[M].人民郵

21、電出版社.</p><p>  [2]單片機課程設(shè)計實例指導(dǎo) 李光飛等. 北京航空航天大學(xué)出版社</p><p>  [3]51系列單片機原理、開發(fā)與應(yīng)用實例 孫進平等編著 </p><p>  [4]單片機程序設(shè)計實例 先鋒工作室編著 清華大學(xué)出版社 </p><p><b>  .</b><

22、/p><p><b>  7 附錄</b></p><p><b>  附錄一 主電路圖</b></p><p><b>  附錄二 主程序</b></p><p>  ORG 0000H ;程序開始</p><p>  AJMP STAR

23、T ;跳轉(zhuǎn)到主程序START </p><p>  ORG 000BH ;定時器0中斷的地址入口</p><p>  AJMP TIME0 ;定時器0溢出,跳轉(zhuǎn)到中斷程序TIME0</p><p>  START: ;主程序</p><p>  MOV P3,#0FFH

24、 ;輸入端口P3全寫1</p><p>  MOV P0,#3FH ;</p><p>  MOV P1,#3FH ;</p><p>  MOV P2,#0BFH ;數(shù)碼管初始化</p><p>  MOV 30H,#00H ;</p><p>  MO

25、V R0,#00H ;</p><p>  MOV R1,#0AH ;</p><p>  MOV R2,#00H ;工作寄存器初始化</p><p>  MOV TMOD,#01H ;定時器0工作于方式1</p><p>  MOV TH0,#0D8H ;</p>

26、<p>  MOV TL0,#0FEH ;定時器0預(yù)置數(shù)(D8FEH=55550D)</p><p>  SETB EA ;開總中斷允許</p><p>  SETB ET0 ;開定時器0中斷允許</p><p>  READ: ;讀鍵程序</p><p&g

27、t;  L1:JB P3.2,L2 ;</p><p>  LCALL DELAY ;按鍵延時防抖</p><p>  JB P3.2,L1 ;</p><p>  AJMP RUN ;確認計時鍵被按下,開始/繼續(xù)計時</p><p>  L2:JB P3.3,L3 ;&l

28、t;/p><p>  LCALL DELAY ;按鍵延時防抖</p><p>  JB P3.3,L2 ;</p><p>  AJMP PAUSE ;確認暫停鍵被按下,暫停計時</p><p>  L3:JB P3.4,L1 ;</p><p>  LCALL DE

29、LAY ;按鍵延時防抖</p><p>  JB P3.4,L3 ;</p><p>  AJMP STOP ;確認清零鍵被按下,秒表重置</p><p>  RUN: ;計時鍵按下,跳轉(zhuǎn)至此</p><p>  SETB TR0 ;定時器0開始/

30、繼續(xù)運行</p><p>  AJMP READ ;</p><p>  PAUSE: ;暫停鍵按下,跳轉(zhuǎn)至此</p><p>  CLR TR0 ;</p><p>  AJMP READ ; </p><p>  TIME0:

31、 ;定時器0溢出,中斷,跳轉(zhuǎn)至此</p><p>  INC 30H ;</p><p>  MOV A,30H ;</p><p>  CJNE A,#0AH,TIME1 ;30H單元中的值到10了嗎?(計時到10毫秒了嗎,也就是說,該向毫秒位送數(shù)了嗎?)</p><p>  

32、MOV DPTR,#TAB ;30H中的值到10了,順序執(zhí)行</p><p>  MOV A,R0 ;</p><p>  INC R0 ;</p><p>  CJNE R0,#0AH,GET ;R0中的值到10了嗎?(該向秒位進位了嗎?)</p><p>  MOV R0,#00H

33、 ;</p><p>  LCALL SECOND ;到了,R0清零,調(diào)用進位子程序SECOND,向秒位進位</p><p>  GET: ;沒到,跳過進位子程序</p><p>  MOVC A,@A+DPTR ;</p><p>  MOV P1,A ;查表

34、并向數(shù)碼管毫秒位送數(shù)</p><p>  MOV 30H,#00H ;重置30H單元</p><p>  TIME1: ;</p><p>  MOV TH0,#0D8H ;</p><p>  MOV TL0,#0FEH ;給定時器0重新預(yù)置數(shù)</p><p>

35、;  RETI ;中斷返回</p><p>  SECOND: ;秒位進位子程序</p><p>  PUSH ACC ;</p><p>  PUSH PSW ;將ACC和PSW推入堆棧保護</p><p>  MOV A,R1 ;

36、</p><p>  INC R1 ;</p><p>  CJNE R1,#14H,GET1 ;R1中的值到20了嗎,也就是說,該向十秒位進位了嗎?</p><p>  MOV R1,#0AH ;</p><p>  LCALL SECOND1 ;到了。R1重置,調(diào)用進位子程序SECOND1

37、,向十秒位進位</p><p>  GET1: ;沒到,跳過進位子程序</p><p>  MOVC A,@A+DPTR ;</p><p>  MOV P2,A ;查表并向數(shù)碼管秒位送數(shù)</p><p>  POP PSW ;</p><p>

38、;  POP ACC ;PSW,ACC出棧</p><p>  RET ;子程序返回</p><p>  SECOND1: ;十秒位進位子程序</p><p>  PUSH ACC ;</p><p>  PUSH PSW ;將AC

39、C和PSW推入堆棧保護</p><p>  MOV A,R2 ;</p><p>  INC R2 ;</p><p>  CJNE R2,#0AH,GET2 ;R2中的值到10了嗎,也就是說,該將此位歸零了嗎?</p><p>  MOV R2,#00H ;到了,R2清零</

40、p><p>  GET2: ;沒到,跳過清零程序</p><p>  MOVC A,@A+DPTR ;</p><p>  MOV P0,A ;查表并向數(shù)碼管十秒位送數(shù)</p><p>  POP PSW ;</p><p>  POP ACC

41、 ;PSW,ACC出棧</p><p>  RET ;子程序返回</p><p>  STOP: ;清零鍵按下,跳轉(zhuǎn)至此</p><p>  MOV P3,#0FFH ;</p><p>  MOV P0,#3FH ;</p>&

42、lt;p>  MOV P1,#3FH ;</p><p>  MOV P2,#0BFH ;數(shù)碼管清零</p><p>  MOV 30H,#00H ;</p><p>  MOV R0,#00H ;</p><p>  MOV R1,#0AH ;</p>&

43、lt;p>  MOV R2,#00H ;工作寄存器初始化</p><p>  CLR TR0 ;計時器0停止計時</p><p>  MOV TH0,#0D8H ;</p><p>  MOV TL0,#0FEH ;定時器0預(yù)置數(shù)</p><p>  AJMP READ

44、 ;</p><p>  DELAY: ;延時10ms子程序</p><p>  MOV R3,#50D ;</p><p>  D1:MOV R4,#100D ;</p><p>  D2:DJNZ R4,D2 ;</p><p>  DJNZ R3,D1

45、 ;</p><p>  RET ;子程序返回</p><p>  TAB: DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH,0BFH ;數(shù)碼管段選碼數(shù)表</p><p>  END

溫馨提示

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

評論

0/150

提交評論