版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于at89c51單片機(jī)的多功能打鈴系統(tǒng)的設(shè)計(jì)
- 基于at89c51單片機(jī)的多功能打鈴系統(tǒng)的設(shè)計(jì)
- 單片機(jī)多功能秒表課程設(shè)計(jì)--89c51單片機(jī)秒表的設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于at89c51單片機(jī)的新型多功能電子鬧鐘
- 基于單片機(jī)at89c51系統(tǒng)的步進(jìn)電機(jī)控制畢業(yè)論文
- 基于at89c51單片機(jī)的多功能轉(zhuǎn)速表的設(shè)計(jì)
- 基于at89c51單片機(jī)的多功能轉(zhuǎn)速表的設(shè)計(jì)
- 單片機(jī)at89c51
- 基于at89c51單片機(jī)的交通燈設(shè)計(jì)畢業(yè)論文
- 2017畢業(yè)論文-基于at89c51單片機(jī)數(shù)字時(shí)鐘的設(shè)計(jì)
- 基于at89c51單片機(jī)的電風(fēng)扇自動(dòng)調(diào)溫系統(tǒng)畢業(yè)論文
- 畢業(yè)論文---基于at89c51單片機(jī)的智能電源控制系統(tǒng)
- 基于at89c51單片機(jī)的測溫系統(tǒng)
- 畢業(yè)設(shè)計(jì)(論文)基于at89c51單片機(jī)數(shù)控電源
- 本科畢業(yè)論文-基于at89c51單片機(jī)的智能時(shí)鐘畢業(yè)論文設(shè)計(jì)
- 基于89c51單片機(jī)的秒表設(shè)計(jì)
- 基于at89c51單片機(jī)的數(shù)字電壓表設(shè)計(jì)畢業(yè)論文
- 基于at89c51單片機(jī)的數(shù)字電壓表設(shè)計(jì)(畢業(yè)論文)
- 基于at89c51單片機(jī)的出租車計(jì)價(jià)系統(tǒng)的設(shè)計(jì)-畢業(yè)論文
- 基于at89c51單片機(jī)紅外遙控系統(tǒng)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論