基于at89c51單片機(jī)的多功能秒表系統(tǒng)設(shè)計(jì)畢業(yè)論文_第1頁
已閱讀1頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目錄</b></p><p><b>  1 概述3</b></p><p>  1.1單片機(jī)簡介……………………………………………………………………3</p><p>  1.2設(shè)計(jì)任務(wù)………………………………………………………………………3</p><p>  

2、1.3設(shè)計(jì)要求………………………………………………………………………3</p><p>  2 系統(tǒng)總體方案及硬件設(shè)計(jì)4</p><p>  2.1、復(fù)位電路5</p><p>  2.2、晶體振蕩電路6</p><p>  2.3、鍵盤電路6</p><p>  2.4、顯示電路7</p>

3、<p><b>  3 軟件設(shè)計(jì)7</b></p><p>  3.1、設(shè)計(jì)思想7</p><p>  3.2、系統(tǒng)流程圖8</p><p>  3.3源程序代碼及注解 ……………………………………………………10</p><p>  4 Proteus軟件仿真15</p>&

4、lt;p>  5 課程設(shè)計(jì)體會(huì) ……………………………………………… ………… ………………16</p><p>  6 參考文獻(xiàn) ……………………………… ………………………………… …… ….17</p><p>  附錄1:源程清單18</p><p>  附錄2:系統(tǒng)原理圖24</p><p><b>

5、;  1 概述</b></p><p><b>  1.1單片機(jī)簡介</b></p><p>  單片機(jī)是性能價(jià)格比高、體積小、對(duì)國民經(jīng)濟(jì)滲透力大、最有前途的微控制器。單片機(jī)自20世紀(jì)70年代初研制成功并發(fā)展至今,已進(jìn)入第四代。它主要是在一塊芯片上集成了CPU、存儲(chǔ)器以及輸入輸出電路,在工業(yè)過程中被廣泛應(yīng)用在控制電路中。從單片機(jī)的系列來看,國內(nèi)外已超過50

6、個(gè)系列、近500個(gè)品種,當(dāng)前正處于更新?lián)Q代、百花齊放的時(shí)期。新的系列和專用系列正在不斷涌現(xiàn)。按位數(shù)分類有4位、8位、16位以及32位單片機(jī)等,4位單片機(jī)由于價(jià)格低和出現(xiàn)的早得到了廣泛的應(yīng)用,特別是在家電應(yīng)用領(lǐng)域中其還有很大的優(yōu)勢,為了抵御8位機(jī)的競爭,4位機(jī)在結(jié)構(gòu)和功能上都有很大的改進(jìn)。8位機(jī)的生產(chǎn)廠家以及品種都很多,在實(shí)際的生產(chǎn)中應(yīng)用也最為廣泛,其中Intel公司的8051系列單片機(jī)在我國應(yīng)用最為廣泛,另外8位單片機(jī)也在其功能和內(nèi)部結(jié)

7、構(gòu)上不斷的進(jìn)行改進(jìn),目前功能是越來越強(qiáng)大。16位單片機(jī)在數(shù)據(jù)處理以及單片機(jī)的性能上有了很大的改進(jìn)。32位單片機(jī)是隨著高科技產(chǎn)業(yè)的發(fā)展而產(chǎn)生的。</p><p><b>  1.2設(shè)計(jì)任務(wù):</b></p><p>  設(shè)計(jì)一個(gè)單片機(jī)控制的多功能秒表系統(tǒng),利用單片機(jī)的定時(shí)器/計(jì)數(shù)器定時(shí)和記數(shù)的原理,結(jié)合顯示電路、用兩個(gè)陰極LED數(shù)碼管以及按鍵來設(shè)計(jì)00~99秒計(jì)時(shí)器。將

8、軟、硬件有機(jī)地結(jié)合起來,使得系統(tǒng)能夠正確地進(jìn)行加計(jì)時(shí),同時(shí)數(shù)碼管能夠正確地顯示時(shí)間。</p><p><b>  1.3設(shè)計(jì)要求:</b></p><p>  1、能同時(shí)記錄四個(gè)相對(duì)獨(dú)立的時(shí)間并分別顯示 。 </p><p>  2、兩位LED動(dòng)態(tài)顯示,顯示時(shí)間為00~99秒。 </p><p>  3、每秒自動(dòng)加1。

9、</p><p>  4、一個(gè)開始按鍵、一個(gè)復(fù)位按鍵、一個(gè)暫停按鈕 </p><p><b>  2 系統(tǒng)總體方案</b></p><p>  本設(shè)計(jì)的最主要的元器件就是MCS-51單片機(jī)。MCS-51單片機(jī)在一塊芯片上集成了CPU,存儲(chǔ)器RAM,ROM以及輸入與輸出接口電路,這種芯片習(xí)慣上被稱為單片微型計(jì)算機(jī),簡稱單片機(jī)。MCS-51單片機(jī)是

10、INTEL公司在1980年推出的高檔8位單片機(jī)。它的典型產(chǎn)品有:8051,8031,8751,80C51,80C31,87C51。</p><p>  AT89C51(圖1)單片機(jī)由CPU,振蕩器與時(shí)序電路, 4個(gè)8位的I/O端口(P0,P1,P2,P3),串行口等組成。</p><p><b>  P0口有三個(gè)功能:</b></p><p>

11、  1、外部擴(kuò)展存儲(chǔ)器時(shí),當(dāng)做數(shù)據(jù)總線(如圖中的D0~D7為數(shù)據(jù)總線接口)。</p><p>  2、外部擴(kuò)展存儲(chǔ)器時(shí),當(dāng)作地址總線(如圖中的A0~A7為地址總線接口)。</p><p>  3、不擴(kuò)展時(shí),可做一般的I/O使用,但內(nèi)部無上拉電阻,作為輸入或輸出時(shí)應(yīng)在外部接上拉電阻。</p><p>  P1口只做I/O口使用:其內(nèi)部有上拉電阻。</p>

12、<p><b>  P2口有兩個(gè)功能:</b></p><p>  1、擴(kuò)展外部存儲(chǔ)器時(shí),當(dāng)作地址總線使用;</p><p>  2、做一般I/O口使用,其內(nèi)部有上拉電阻;</p><p><b>  P3口有兩個(gè)功能:</b></p><p>  除了作為I/O使用外(其內(nèi)部有上拉電阻

13、),還有一些特殊功能,由寄存器來設(shè)置。</p><p>  ALE:地址鎖存控制信號(hào)</p><p>  PSEN:外部程序存儲(chǔ)器讀選通信號(hào)</p><p>  EA/VPP:訪問和序存儲(chǔ)器控制信號(hào)</p><p>  RST:復(fù)位信號(hào)XTAL1和XTAL2 外接晶振引腳VCC:電源+5V輸入VSS:GND接地。</p><

14、;p><b>  圖2:整體設(shè)計(jì)框圖</b></p><p>  2.1 復(fù)位電路:采用上電加按鈕復(fù)位。</p><p>  這個(gè)系統(tǒng)中的復(fù)位電路是采用上電加按鈕來實(shí)現(xiàn)的。因?yàn)镸CS-51單片機(jī)的復(fù)位是靠外部電路實(shí)現(xiàn)的。MCS-51單片機(jī)工作之后,只要在他的RST引線上加載10ms以上的高點(diǎn)平,單片機(jī)就能有效地進(jìn)行復(fù)位。MCS-51單片機(jī)通常采用上電自動(dòng)復(fù)位、按

15、鍵復(fù)位、以及上電加按鍵復(fù)位等,我們采用的是上電加按鍵復(fù)位方式,這樣做的優(yōu)點(diǎn)是上電后可以直接進(jìn)入復(fù)位狀態(tài),當(dāng)程序出現(xiàn)錯(cuò)誤時(shí),可以隨時(shí)使電路復(fù)位。</p><p><b>  圖3:復(fù)位電路</b></p><p>  2.2晶體振蕩電路: 通過XTAL1和XTAL2外接晶體振蕩器構(gòu)成內(nèi)部振蕩方式。</p><p>  由于單片機(jī)內(nèi)部有一個(gè)高增益反

16、相放大器,當(dāng)外接晶振后,就構(gòu)成了自激振蕩器并產(chǎn)生振蕩時(shí)鐘脈沖。MCS--51單片機(jī)內(nèi)部的振蕩電路是一個(gè)高增益反相放大器,引線 XTAL1和XTAL2分別為 反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入和來自反向振蕩器的輸出,該反向放大器可以配置為片內(nèi)振蕩器。</p><p><b>  圖4:晶振震蕩電路</b></p><p>  2.3鍵盤電路:用部分P1口做開始

17、開關(guān),P2口開始,P3口復(fù)位, </p><p><b>  圖5:鍵盤電路</b></p><p>  2.4顯示電路:采用LED動(dòng)態(tài)顯示,用P2口驅(qū)動(dòng)顯示。</p><p><b>  圖6:顯示電路</b></p><p><b>  3 軟件設(shè)計(jì)</b></p&

18、gt;<p><b>  3.1 設(shè)計(jì)思想</b></p><p>  因?yàn)槊氡碓O(shè)計(jì)相對(duì)較為簡單,因此在軟件設(shè)計(jì)中我們一般采用模塊化程序設(shè)計(jì)的方法。模塊是一個(gè)具有獨(dú)立功能的程序,可以單獨(dú)設(shè)計(jì)、調(diào)試與管理,模塊可分為功能模塊和控制模塊兩類。我們通過模塊化程序設(shè)計(jì)可按適當(dāng)?shù)脑瓌t把一個(gè)情況復(fù)雜、規(guī)模較大的程序系統(tǒng)劃分為一個(gè)個(gè)較小的、功能相關(guān)而又相對(duì)獨(dú)立的模塊。每個(gè)小的模塊完成一個(gè)確定

19、的功能,在這些小的模塊之間建立必要的聯(lián)系,互相協(xié)作完成整個(gè)程序要完成的功能。它具有明顯的優(yōu)點(diǎn),把一個(gè)多功能的復(fù)雜的程序劃分為若干個(gè)簡單的、功能單一的程序模塊,有利于程序的設(shè)計(jì)和調(diào)試,有利于程序的優(yōu)化和分工,提高了程序的閱讀性和可靠性,使程序的結(jié)構(gòu)層次一目了然。</p><p>  其中的模塊即為子程序,子程序是功能獨(dú)立的程序段。子程序的基本思想是編寫一次,可以重復(fù)使用。子程序的形式可以是一個(gè)程序文件,也可以是一個(gè)

20、過程或函數(shù)。子程序總被其他程序調(diào)用而不單獨(dú)執(zhí)行,這與主程序相對(duì)。</p><p>  這個(gè)主程序也是由多個(gè)子程序模塊組成,各程序模塊都要完成一個(gè)明確的任務(wù),實(shí)現(xiàn)某個(gè)具體的功能,、快加、復(fù)位,計(jì)數(shù)和顯示等,在具體需要時(shí)調(diào)用相應(yīng)的模塊即可。</p><p>  3.2、程序流程圖:</p><p><b>  定時(shí)器流程圖</b></p>

21、;<p><b>  加1子程序流程圖:</b></p><p>  3.3程序代碼及注解</p><p>  ORG 0000H ;程序開始</p><p>  AJMP START ;跳轉(zhuǎn)到主程序START </p><p>  ORG 000BH ;

22、定時(shí)器0中斷的地址入口</p><p>  AJMP TIME0 ;定時(shí)器0溢出,跳轉(zhuǎn)到中斷程序TIME0</p><p>  START: ;主程序</p><p>  MOV P3,#0FFH ;輸入端口P3全寫1</p><p>  MOV P0,#3FH ;</p

23、><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 ;</

24、p><p>  MOV R2,#00H ;工作寄存器初始化</p><p>  MOV TMOD,#01H ;定時(shí)器0工作于方式1</p><p>  MOV TH0,#0D8H ;</p><p>  MOV TL0,#0FEH ;定時(shí)器0預(yù)置數(shù)(D8FEH=55550D)</p>&

25、lt;p>  SETB EA ;開總中斷允許</p><p>  SETB ET0 ;開定時(shí)器0中斷允許</p><p>  READ: ;讀鍵程序</p><p>  L1:JB P3.2,L2 ;</p><p>  LCALL DELAY

26、;按鍵延時(shí)防抖</p><p>  JB P3.2,L1 ;</p><p>  AJMP RUN ;確認(rèn)計(jì)時(shí)鍵被按下,開始/繼續(xù)計(jì)時(shí)</p><p>  L2:JB P3.3,L3 ;</p><p>  LCALL DELAY ;按鍵延時(shí)防抖</p><p&g

27、t;  JB P3.3,L2 ;</p><p>  AJMP PAUSE ;確認(rèn)暫停鍵被按下,暫停計(jì)時(shí)</p><p>  L3:JB P3.4,L1 ;</p><p>  LCALL DELAY ;按鍵延時(shí)防抖</p><p>  JB P3.4,L3 ;</

28、p><p>  AJMP STOP ;確認(rèn)清零鍵被按下,秒表重置</p><p>  RUN: ;計(jì)時(shí)鍵按下,跳轉(zhuǎn)至此</p><p>  SETB TR0 ;定時(shí)器0開始/繼續(xù)運(yùn)行</p><p>  AJMP READ ;</p><p&g

29、t;  PAUSE: ;暫停鍵按下,跳轉(zhuǎn)至此</p><p>  CLR TR0 ;</p><p>  AJMP READ ; </p><p>  TIME0: ;定時(shí)器0溢出,中斷,跳轉(zhuǎn)至此</p><p>  INC 30H

30、 ;</p><p>  MOV A,30H ;</p><p>  CJNE A,#0AH,TIME1 ;30H單元中的值到10了嗎?(計(jì)時(shí)到10毫秒了嗎,也就是說,該向毫秒位送數(shù)了嗎?)</p><p>  MOV DPTR,#TAB ;30H中的值到10了,順序執(zhí)行</p><p>  MOV A,R0

31、 ;</p><p>  INC R0 ;</p><p>  CJNE R0,#0AH,GET ;R0中的值到10了嗎?(該向秒位進(jìn)位了嗎?)</p><p>  MOV R0,#00H ;</p><p>  LCALL SECOND ;到了,R0清零,調(diào)用進(jìn)位子程

32、序SECOND,向秒位進(jìn)位</p><p>  GET: ;沒到,跳過進(jìn)位子程序</p><p>  MOVC A,@A+DPTR ;</p><p>  MOV P1,A ;查表并向數(shù)碼管毫秒位送數(shù)</p><p>  MOV 30H,#00H ;重置30H單元</p

33、><p>  TIME1: ;</p><p>  MOV TH0,#0D8H ;</p><p>  MOV TL0,#0FEH ;給定時(shí)器0重新預(yù)置數(shù)</p><p>  RETI ;中斷返回</p><p>  SECOND:

34、 ;秒位進(jìn)位子程序</p><p>  PUSH ACC ;</p><p>  PUSH PSW ;將ACC和PSW推入堆棧保護(hù)</p><p>  MOV A,R1 ;</p><p>  INC R1 ;</p><p>  

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

36、><p>  MOVC A,@A+DPTR ;</p><p>  MOV P2,A ;查表并向數(shù)碼管秒位送數(shù)</p><p>  POP PSW ;</p><p>  POP ACC ;PSW,ACC出棧</p><p>  RET

37、 ;子程序返回</p><p>  SECOND1: ;十秒位進(jìn)位子程序</p><p>  PUSH ACC ;</p><p>  PUSH PSW ;將ACC和PSW推入堆棧保護(hù)</p><p>  MOV A,R2 ;</p>

38、<p>  INC R2 ;</p><p>  CJNE R2,#0AH,GET2 ;R2中的值到10了嗎,也就是說,該將此位歸零了嗎?</p><p>  MOV R2,#00H ;到了,R2清零</p><p>  GET2: ;沒到,跳過清零程序</p><p&g

39、t;  MOVC A,@A+DPTR ;</p><p>  MOV P0,A ;查表并向數(shù)碼管十秒位送數(shù)</p><p>  POP PSW ;</p><p>  POP ACC ;PSW,ACC出棧</p><p>  RET ;子程序

40、返回</p><p>  STOP: ;清零鍵按下,跳轉(zhuǎn)至此</p><p>  MOV P3,#0FFH ;</p><p>  MOV P0,#3FH ;</p><p>  MOV P1,#3FH ;</p><p>  MOV P2,#0BFH

41、 ;數(shù)碼管清零</p><p>  MOV 30H,#00H ;</p><p>  MOV R0,#00H ;</p><p>  MOV R1,#0AH ;</p><p>  MOV R2,#00H ;工作寄存器初始化</p><p>  CLR T

42、R0 ;計(jì)時(shí)器0停止計(jì)時(shí)</p><p>  MOV TH0,#0D8H ;</p><p>  MOV TL0,#0FEH ;定時(shí)器0預(yù)置數(shù)</p><p>  AJMP READ ;</p><p>  DELAY: ;延時(shí)10ms子程序</p&g

43、t;<p>  MOV R3,#50D ;</p><p>  D1:MOV R4,#100D ;</p><p>  D2:DJNZ R4,D2 ;</p><p>  DJNZ R3,D1 ;</p><p>  RET ;子程序返回</p&g

44、t;<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 ;程序結(jié)束</p><p>  4 ISIS7Professionl軟件仿真</p&

45、gt;<p>  利用Keilu Vision軟件對(duì)源程序進(jìn)行編譯,編譯成功后,把編譯結(jié)果保存。然后根據(jù)我們的軟件在PROTEUS中設(shè)計(jì)出相應(yīng)的硬件電路,并將該電路保存到與WAVE程序相同的文件夾中,最后將程序裝載到單片機(jī)中,通過ISIS7Professionl仿真,看程序是否能夠?qū)崿F(xiàn)預(yù)想的功能.</p><p><b>  仿真圖如下圖所示:</b></p>&

46、lt;p>  ORG 0000H ;程序開始</p><p>  AJMP START ;跳轉(zhuǎn)到主程序START </p><p>  ORG 000BH ;定時(shí)器0中斷的地址入口</p><p>  AJMP TIME0 ;定時(shí)器0溢出,跳轉(zhuǎn)到中斷程序TIME0</p><

47、;p>  START: ;主程序</p><p>  MOV P3,#0FFH ;輸入端口P3全寫1</p><p>  MOV P0,#3FH ;</p><p>  MOV P1,#3FH ;</p><p>  MOV P2,#0BFH ;數(shù)碼管初始化&l

48、t;/p><p>  MOV 30H,#00H ;</p><p>  MOV R0,#00H ;</p><p>  MOV R1,#0AH ;</p><p>  MOV R2,#00H ;工作寄存器初始化</p><p>  MOV TMOD,#01H

49、;定時(shí)器0工作于方式1</p><p>  MOV TH0,#0D8H ;</p><p>  MOV TL0,#0FEH ;定時(shí)器0預(yù)置數(shù)(D8FEH=55550D)</p><p>  SETB EA ;開總中斷允許</p><p>  SETB ET0 ;開定時(shí)器0中斷允許

50、</p><p>  READ: ;讀鍵程序</p><p>  L1:JB P3.2,L2 ;</p><p>  LCALL DELAY ;按鍵延時(shí)防抖</p><p>  JB P3.2,L1 ;</p><p>  AJMP RUN

51、 ;確認(rèn)計(jì)時(shí)鍵被按下,開始/繼續(xù)計(jì)時(shí)</p><p>  L2:JB P3.3,L3 ;</p><p>  LCALL DELAY ;按鍵延時(shí)防抖</p><p>  JB P3.3,L2 ;</p><p>  AJMP PAUSE ;確認(rèn)暫停鍵被按下,暫停計(jì)時(shí)</p&g

52、t;<p>  L3:JB P3.4,L1 ;</p><p>  LCALL DELAY ;按鍵延時(shí)防抖</p><p>  JB P3.4,L3 ;</p><p>  AJMP STOP ;確認(rèn)清零鍵被按下,秒表重置</p><p>  RUN:

53、 ;計(jì)時(shí)鍵按下,跳轉(zhuǎn)至此</p><p>  SETB TR0 ;定時(shí)器0開始/繼續(xù)運(yùn)行</p><p>  AJMP READ ;</p><p>  PAUSE: ;暫停鍵按下,跳轉(zhuǎn)至此</p><p>  CLR TR0 ;</p>

54、<p>  AJMP READ ; </p><p>  TIME0: ;定時(shí)器0溢出,中斷,跳轉(zhuǎn)至此</p><p>  INC 30H ;</p><p>  MOV A,30H ;</p><p>  CJNE A,#0AH,TIME1

55、 ;30H單元中的值到10了嗎?(計(jì)時(shí)到10毫秒了嗎,也就是說,該向毫秒位送數(shù)了嗎?)</p><p>  MOV DPTR,#TAB ;30H中的值到10了,順序執(zhí)行</p><p>  MOV A,R0 ;</p><p>  INC R0 ;</p><p>  CJNE R0,#0

56、AH,GET ;R0中的值到10了嗎?(該向秒位進(jìn)位了嗎?)</p><p>  MOV R0,#00H ;</p><p>  LCALL SECOND ;到了,R0清零,調(diào)用進(jìn)位子程序SECOND,向秒位進(jìn)位</p><p>  GET: ;沒到,跳過進(jìn)位子程序</p><p> 

57、 MOVC A,@A+DPTR ;</p><p>  MOV P1,A ;查表并向數(shù)碼管毫秒位送數(shù)</p><p>  MOV 30H,#00H ;重置30H單元</p><p>  TIME1: ;</p><p>  MOV TH0,#0D8H ;</p&g

58、t;<p>  MOV TL0,#0FEH ;給定時(shí)器0重新預(yù)置數(shù)</p><p>  RETI ;中斷返回</p><p>  SECOND: ;秒位進(jìn)位子程序</p><p>  PUSH ACC ;</p><p>  PUSH PSW

59、 ;將ACC和PSW推入堆棧保護(hù)</p><p>  MOV A,R1 ;</p><p>  INC R1 ;</p><p>  CJNE R1,#14H,GET1 ;R1中的值到20了嗎,也就是說,該向十秒位進(jìn)位了嗎?</p><p>  MOV R1,#0AH

60、;</p><p>  LCALL SECOND1 ;到了。R1重置,調(diào)用進(jìn)位子程序SECOND1,向十秒位進(jìn)位</p><p>  GET1: ;沒到,跳過進(jìn)位子程序</p><p>  MOVC A,@A+DPTR ;</p><p>  MOV P2,A ;查表并向數(shù)碼管秒

61、位送數(shù)</p><p>  POP PSW ;</p><p>  POP ACC ;PSW,ACC出棧</p><p>  RET ;子程序返回</p><p>  SECOND1: ;十秒位進(jìn)位子程序</p><p>  

62、PUSH ACC ;</p><p>  PUSH PSW ;將ACC和PSW推入堆棧保護(hù)</p><p>  MOV A,R2 ;</p><p>  INC R2 ;</p><p>  CJNE R2,#0AH,GET2 ;R2中的值到10了嗎,也就是

63、說,該將此位歸零了嗎?</p><p>  MOV R2,#00H ;到了,R2清零</p><p>  GET2: ;沒到,跳過清零程序</p><p>  MOVC A,@A+DPTR ;</p><p>  MOV P0,A ;查表并向數(shù)碼管十秒位送數(shù)</p>

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

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

66、H ;</p><p>  MOV R1,#0AH ;</p><p>  MOV R2,#00H ;工作寄存器初始化</p><p>  CLR TR0 ;計(jì)時(shí)器0停止計(jì)時(shí)</p><p>  MOV TH0,#0D8H ;</p><p> 

67、 MOV TL0,#0FEH ;定時(shí)器0預(yù)置數(shù)</p><p>  AJMP READ ;</p><p>  DELAY: ;延時(shí)10ms子程序</p><p>  MOV R3,#50D ;</p><p>  D1:MOV R4,#100D ;</p>

68、<p>  D2:DJNZ R4,D2 ;</p><p>  DJNZ R3,D1 ;</p><p>  RET ;子程序返回</p><p>  TAB: DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH,86H,0DBH,0CFH,0E6H,0EDH,0

69、FDH,87H,0FFH,0EFH,0BFH ;數(shù)碼管段選碼數(shù)表</p><p>  END ;程序結(jié)束</p><p>  圖7:系統(tǒng)仿真結(jié)果1</p><p><b>  5 課程設(shè)計(jì)體會(huì)</b></p><p>  經(jīng)過一周的不懈努力,單片機(jī)的課程設(shè)計(jì)終于完成了。在這期間我們學(xué)會(huì)了很多

70、,也學(xué)到了很多,同時(shí),對(duì)單片機(jī)這門課程有了更深一步的理解和掌握。</p><p>  1、本次課程設(shè)計(jì)使我加深了對(duì)單片機(jī)課程的全面認(rèn)識(shí),復(fù)習(xí)和掌握,對(duì)MC-51單片機(jī)有了更深入的了解,對(duì)I/O口的使用,晶振電路的接法,以及復(fù)位電路等的掌握都有了很大程度的提高,這為以后的實(shí)踐打下了良好的基礎(chǔ)。</p><p>  2、掌握了定時(shí)器、外部中斷的設(shè)置和編程原理。</p><p

71、>  3、通過此次課程設(shè)計(jì)能夠?qū)纹瑱C(jī)軟硬件結(jié)合起來,對(duì)程序進(jìn)行編輯,校驗(yàn)。</p><p>  4、還要根據(jù)實(shí)驗(yàn)的實(shí)際情況,添加些額外程序來使系統(tǒng)更加的穩(wěn)定,如開關(guān)的消震蕩(采用延遲)。</p><p>  5、程序要盡量做到由各個(gè)子程序組成,在有些程序后面最好加注釋,這樣在程序出錯(cuò)的檢查過程中可以更容易查找的到,也更簡潔,更明白易懂。</p><p>  

72、6、我在編程過程中還有好多不理解的地方,經(jīng)過同學(xué)的幫助終于完成了這次設(shè)計(jì)。在這個(gè)過程中體會(huì)到了合作的好處,更了解的互相幫助的重要性。</p><p>  由于編程能力的有限和所學(xué)知識(shí)的局限性,在這個(gè)程序和設(shè)計(jì)系統(tǒng)中雖然實(shí)現(xiàn)了所有的基本要求和部分的高級(jí)要求,但是這其中還有許多不完善的地方,有時(shí)在上翻和下翻時(shí)會(huì)出現(xiàn)一些問題,這說明我在這方面還存在著很多不足,知識(shí)不夠完備和系統(tǒng),在以后的學(xué)習(xí)中還有待提高。另外,在實(shí)踐中

73、雖然焊接好了硬件電路,卻沒能實(shí)踐成功,希望老師能在以后的學(xué)習(xí)和生活中對(duì)我多加指導(dǎo),促使我能取得更大的進(jìn)步。</p><p><b>  6參考文獻(xiàn)</b></p><p>  【1】余發(fā)山編著.單片機(jī)原理及應(yīng)用技術(shù)徐州:中國礦業(yè)大學(xué)出版社,2003年</p><p>  【2】楊凌霄編著.微型計(jì)算機(jī)原理及應(yīng)用.徐州:中國礦業(yè)大學(xué)出版社,2004

74、年</p><p>  【3】楊寧編著.單片機(jī)與控制技術(shù).北京:北京航空航天大學(xué)出版社,2004年</p><p>  【4】王閃編著.AT89系列單片機(jī)原理與接口技術(shù).北京:北京航空航天大學(xué)出版社,2004年</p><p><b>  附錄:程序清單:</b></p><p>  ORG 0000H

75、 ;程序開始</p><p>  AJMP START ;跳轉(zhuǎn)到主程序START </p><p>  ORG 000BH ;定時(shí)器0中斷的地址入口</p><p>  AJMP TIME0 ;定時(shí)器0溢出,跳轉(zhuǎn)到中斷程序TIME0</p><p>  START: ;

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

77、,#00H ;</p><p>  MOV R0,#00H ;</p><p>  MOV R1,#0AH ;</p><p>  MOV R2,#00H ;工作寄存器初始化</p><p>  MOV TMOD,#01H ;定時(shí)器0工作于方式1</p><p

78、>  MOV TH0,#0D8H ;</p><p>  MOV TL0,#0FEH ;定時(shí)器0預(yù)置數(shù)(D8FEH=55550D)</p><p>  SETB EA ;開總中斷允許</p><p>  SETB ET0 ;開定時(shí)器0中斷允許</p><p>  READ:

79、 ;讀鍵程序</p><p>  L1:JB P3.2,L2 ;</p><p>  LCALL DELAY ;按鍵延時(shí)防抖</p><p>  JB P3.2,L1 ;</p><p>  AJMP RUN ;確認(rèn)計(jì)時(shí)鍵被按下,開始/繼續(xù)計(jì)時(shí)</p&

80、gt;<p>  L2:JB P3.3,L3 ;</p><p>  LCALL DELAY ;按鍵延時(shí)防抖</p><p>  JB P3.3,L2 ;</p><p>  AJMP PAUSE ;確認(rèn)暫停鍵被按下,暫停計(jì)時(shí)</p><p>  L3:JB P3.4,L1

81、 ;</p><p>  LCALL DELAY ;按鍵延時(shí)防抖</p><p>  JB P3.4,L3 ;</p><p>  AJMP STOP ;確認(rèn)清零鍵被按下,秒表重置</p><p>  RUN: ;計(jì)時(shí)鍵按下,跳轉(zhuǎn)至此</p>

82、<p>  SETB TR0 ;定時(shí)器0開始/繼續(xù)運(yùn)行</p><p>  AJMP READ ;</p><p>  PAUSE: ;暫停鍵按下,跳轉(zhuǎn)至此</p><p>  CLR TR0 ;</p><p>  AJMP READ

83、 ; </p><p>  TIME0: ;定時(shí)器0溢出,中斷,跳轉(zhuǎn)至此</p><p>  INC 30H ;</p><p>  MOV A,30H ;</p><p>  CJNE A,#0AH,TIME1 ;30H單元中的值到10了嗎?(計(jì)時(shí)到10毫秒了嗎,也

84、就是說,該向毫秒位送數(shù)了嗎?)</p><p>  MOV DPTR,#TAB ;30H中的值到10了,順序執(zhí)行</p><p>  MOV A,R0 ;</p><p>  INC R0 ;</p><p>  CJNE R0,#0AH,GET ;R0中的值到10了嗎?(該向秒位進(jìn)位

85、了嗎?)</p><p>  MOV R0,#00H ;</p><p>  LCALL SECOND ;到了,R0清零,調(diào)用進(jìn)位子程序SECOND,向秒位進(jìn)位</p><p>  GET: ;沒到,跳過進(jìn)位子程序</p><p>  MOVC A,@A+DPTR ;</p&

86、gt;<p>  MOV P1,A ;查表并向數(shù)碼管毫秒位送數(shù)</p><p>  MOV 30H,#00H ;重置30H單元</p><p>  TIME1: ;</p><p>  MOV TH0,#0D8H ;</p><p>  MOV TL0,#0FEH

87、 ;給定時(shí)器0重新預(yù)置數(shù)</p><p>  RETI ;中斷返回</p><p>  SECOND: ;秒位進(jìn)位子程序</p><p>  PUSH ACC ;</p><p>  PUSH PSW ;將ACC和PSW推入堆棧保護(hù)</

88、p><p>  MOV A,R1 ;</p><p>  INC R1 ;</p><p>  CJNE R1,#14H,GET1 ;R1中的值到20了嗎,也就是說,該向十秒位進(jìn)位了嗎?</p><p>  MOV R1,#0AH ;</p><p>  LCAL

89、L SECOND1 ;到了。R1重置,調(diào)用進(jìn)位子程序SECOND1,向十秒位進(jìn)位</p><p>  GET1: ;沒到,跳過進(jìn)位子程序</p><p>  MOVC A,@A+DPTR ;</p><p>  MOV P2,A ;查表并向數(shù)碼管秒位送數(shù)</p><p>  PO

90、P PSW ;</p><p>  POP ACC ;PSW,ACC出棧</p><p>  RET ;子程序返回</p><p>  SECOND1: ;十秒位進(jìn)位子程序</p><p>  PUSH ACC ;</p&g

91、t;<p>  PUSH PSW ;將ACC和PSW推入堆棧保護(hù)</p><p>  MOV A,R2 ;</p><p>  INC R2 ;</p><p>  CJNE R2,#0AH,GET2 ;R2中的值到10了嗎,也就是說,該將此位歸零了嗎?</p><p

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

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

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

95、gt;  MOV R1,#0AH ;</p><p>  MOV R2,#00H ;工作寄存器初始化</p><p>  CLR TR0 ;計(jì)時(shí)器0停止計(jì)時(shí)</p><p>  MOV TH0,#0D8H ;</p><p>  MOV TL0,#0FEH ;定時(shí)器0預(yù)置

96、數(shù)</p><p>  AJMP READ ;</p><p>  DELAY: ;延時(shí)10ms子程序</p><p>  MOV R3,#50D ;</p><p>  D1:MOV R4,#100D ;</p><p>  D2:DJNZ R4,D2

97、 ;</p><p>  DJNZ R3,D1 ;</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ù)碼管段

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論