基于89C51單片機(jī)的秒表課程設(shè)計(jì)說明書_第1頁
基于89C51單片機(jī)的秒表課程設(shè)計(jì)說明書_第2頁
基于89C51單片機(jī)的秒表課程設(shè)計(jì)說明書_第3頁
基于89C51單片機(jī)的秒表課程設(shè)計(jì)說明書_第4頁
基于89C51單片機(jī)的秒表課程設(shè)計(jì)說明書_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、單片機(jī)原理及接口技術(shù)課程設(shè)計(jì) 89C51單片機(jī)秒表的設(shè)計(jì)指導(dǎo)教師: 學(xué) 院: 機(jī)械工程學(xué)院 專業(yè)班級(jí): 姓 名: 學(xué) 號(hào): 電 話: 時(shí) 間:20102011學(xué)年 第二學(xué)期目錄0、 單片機(jī)原理與接口技術(shù)課程設(shè)計(jì)說明書21、 設(shè)計(jì)任務(wù)22、 設(shè)計(jì)題目23、 功能分析24、 總體設(shè)計(jì)24.1 硬件設(shè)計(jì)34.1.1 80C51單片機(jī)34.1.2 晶體振蕩電路44.1.3 復(fù)位電路44.1.4 按鍵電路54.1.5 顯示電路5 4.2 引腳控制65、電路原理圖76、程序流程圖及程序代碼8 6.1程序流程圖8 6.2程序代碼107、程序仿真138、實(shí)物制作 8.1所需元件138.2所需工具148.3焊接

2、148.4 燒錄程序并運(yùn)行159、心得體會(huì)1610、參考文獻(xiàn)17單片機(jī)原理及接口技術(shù)課程設(shè)計(jì)說明書摘要隨著電子技術(shù)的發(fā)展,電子技術(shù)在各個(gè)領(lǐng)域的運(yùn)用也越來越廣泛,人對(duì)它的認(rèn)識(shí)也逐步加深。秒表計(jì)時(shí)器秒表計(jì)時(shí)器常常用于體育競賽及各種其他要求有較精確時(shí)間的各領(lǐng)域中。其中啟/停開關(guān)的使用方法與傳統(tǒng)的機(jī)械計(jì)時(shí)器相同,即按一下啟/停開關(guān),啟動(dòng)計(jì)時(shí)器開始計(jì)時(shí),再按一下啟/停開關(guān)計(jì)時(shí)終止。而復(fù)位開關(guān)可以在任何情況下使用,即使在計(jì)時(shí)過程中,只要按一下復(fù)位開關(guān),計(jì)時(shí)應(yīng)立即終止,并對(duì)計(jì)時(shí)器清零。本設(shè)計(jì)就是利用所學(xué)到的電子元器件將脈沖源用數(shù)碼管顯示出來,以制承諾簡易的秒表。關(guān)鍵詞機(jī)械計(jì)時(shí)器 啟/停開關(guān) 復(fù)位 數(shù)碼管顯示

3、 簡易1、設(shè)計(jì)任務(wù)用實(shí)驗(yàn)臺(tái)上的8*8點(diǎn)陣顯示漢字“河南農(nóng)業(yè)大學(xué)理學(xué)院電子信息科學(xué)與技術(shù)系”。漢字編碼可用“取字模軟件提取”2、設(shè)計(jì)題目單片機(jī)控制的8*8點(diǎn)陣 3、功能分析采用3個(gè)LED數(shù)碼管顯示時(shí)間,計(jì)時(shí)范圍設(shè)置為099.9秒,即精確到0.1秒,用按鍵控制秒表的“開始”、“暫?!?、“復(fù)位”,按“開始”按鍵,開始計(jì)時(shí);按“暫?!卑存I,系統(tǒng)暫停計(jì)時(shí);再按“開始”鍵,系統(tǒng)繼續(xù)計(jì)時(shí);數(shù)碼管顯示當(dāng)前計(jì)時(shí)值;按“復(fù)位”按鍵,系統(tǒng)清零。4、總體設(shè)計(jì)本實(shí)驗(yàn)利用單片機(jī)的定時(shí)器/計(jì)數(shù)器定時(shí)和計(jì)數(shù)的原理,通過采用Proteus仿真軟件來模擬實(shí)現(xiàn)。模擬AT89C51單片機(jī)、LED數(shù)碼管以及控件來控制秒表的計(jì)數(shù)以及計(jì)時(shí)

4、的開啟、暫停、繼續(xù)、與復(fù)位。其中有三個(gè)數(shù)碼管來顯示數(shù)據(jù),兩個(gè)數(shù)碼管顯示秒(兩位),另一個(gè)數(shù)碼管顯示十分之一秒,十分之一秒的數(shù)碼管計(jì)數(shù)從09,滿十進(jìn)一后顯示秒得數(shù)碼管的個(gè)位加一,并且十分之一秒顯示清零重新從零計(jì)數(shù)。同理當(dāng)個(gè)位滿十進(jìn)一后個(gè)位也清零重新計(jì)數(shù) ,當(dāng)計(jì)時(shí)超過范圍(即超過99.9秒)后,所有數(shù)碼管全部清零重新計(jì)數(shù)。 4.1硬件設(shè)計(jì) 4.1.189C51單片機(jī)MCS-51系列單片機(jī)是8位單片機(jī)產(chǎn)品,89C51是其中的典型代表,基本模塊包括以下幾個(gè)部分:(1) CPU:89C51的CPU是8位的,另外89C51內(nèi)部有1個(gè)位處理器(2) R0M:4KB的片內(nèi)程序存儲(chǔ)器,存放開發(fā)調(diào)試完成的應(yīng)用程序

5、(3) RAM:256B的片內(nèi)數(shù)據(jù)存儲(chǔ)器,容量小,但作用大(4) I/O口:P0-P3,共4個(gè)口32條雙向且可位尋址的I/O口線(5) 中斷系統(tǒng):共5個(gè)中斷源,3個(gè)內(nèi)部中斷,2個(gè)外部中斷(6) 定時(shí)器/計(jì)數(shù)器:2個(gè)16位的可編程定時(shí)器/計(jì)數(shù)器(7) 通用串行口:全雙工通用異步接收器/發(fā)送器(8) 振蕩器:89C51的外接晶振與內(nèi)部時(shí)鐘振蕩器為CPU提供時(shí)鐘信號(hào)(9) 總線控制:89C51對(duì)外提供若干控制總線,便于系統(tǒng)擴(kuò)展 89C51的引腳如下圖:89C51單片機(jī)引腳圖 4.1.2晶體振蕩電路89C51單片機(jī)內(nèi)部的振蕩電路是一個(gè)高增益反相放大器,引線XTAL1和XTAL2分別為反相振蕩放大器的輸

6、入及內(nèi)部時(shí)鐘工作電路的輸入和來自反相振蕩器的輸出,該反相放大器可以配置為片內(nèi)振蕩器。這里選用51單片機(jī)12MHZ的內(nèi)部振蕩方式,電路如下:C2、C3起穩(wěn)定振蕩頻率、快速起振的作用晶振電路4.1.3復(fù)位電路采用上電復(fù)位,上電后,由于電容充電,使RST持續(xù)一段時(shí)間的高電平,從而實(shí)現(xiàn)上電復(fù)位操作。這不僅能使單片機(jī)復(fù)位,還能是單片機(jī)的外圍設(shè)備同時(shí)復(fù)位,當(dāng)程序出現(xiàn)錯(cuò)誤時(shí),可以隨時(shí)使電路復(fù)位。電路圖如下: 復(fù)位電路4.1.4按鍵電路當(dāng)按鍵被按下時(shí),相應(yīng)的引腳被拉低,經(jīng)掃描后,獲得鍵值,并執(zhí)行鍵功能程序,因此按下不同的按鍵,將執(zhí)行不同的功能程序。電路圖如下:按鍵電路4.1.5顯示電路采用個(gè)LED數(shù)碼管,LE

7、D是七段顯示器,內(nèi)部有7個(gè)條形發(fā)光二極管和1個(gè)小圓點(diǎn)發(fā)光二極管,根據(jù)各管的亮暗組成字符。在用數(shù)碼管顯示時(shí),有靜態(tài)和動(dòng)態(tài)兩種選擇,這里采用LED動(dòng)態(tài)顯示,用P0、P1、 P2口驅(qū)動(dòng)顯示,由于P0口沒有上拉電阻,因此P0口需要外接上拉電阻才能輸出高電平,這里使用8個(gè)4.7k的電阻作為上拉電阻。電路圖如下:顯示電路4.2引腳控制 P0.0P0.7、 P2.0P2.7、 P1.0P1.7對(duì)應(yīng)三個(gè)數(shù)碼管的a、b、c、d、e、f、g段和小數(shù)點(diǎn)位;P0控制數(shù)碼管十位的顯示,P2控制數(shù)碼管個(gè)位的現(xiàn)實(shí),P1控制小數(shù)點(diǎn)后一問的顯示,P3.2、P3.3、P3.4分別接按鍵。5、電路原理圖用Proteus軟件畫出主電

8、路圖如下:主電路圖6、程序流程圖及程序設(shè)計(jì)6.1程序流程圖6.2 程序設(shè)計(jì)程序的各個(gè)組成模塊及工作流程描述:(1)秒表的初始化根據(jù)程序流程圖,先進(jìn)行秒表的初始化,即:將I/O口P3全寫一,為秒表的控制輸入做好準(zhǔn)備;將數(shù)碼管全部置零,使其處于秒表計(jì)時(shí)的初始狀態(tài);將工作寄存器R0R2以及30H初始化,留待后面的計(jì)時(shí)程序備用;將定時(shí)器0置于工作方式1,并為其裝入計(jì)時(shí)預(yù)置數(shù)D8FE(因?yàn)槌绦蜻\(yùn)行過程中占用的時(shí)間會(huì)導(dǎo)致一定誤差,此為經(jīng)實(shí)物測試之后的修正值),即將定時(shí)器定為每10ms溢出;開總中斷允許和定時(shí)器0中斷允許。初始化完成后,即進(jìn)入之后的按鍵掃描程序。(2)按鍵檢測程序輪流檢測開始計(jì)時(shí)(P3.2)

9、、暫停計(jì)時(shí)(P3.3)、秒表清零(P3.4)三個(gè)按鍵。若發(fā)現(xiàn)有一個(gè)按鍵出現(xiàn)低電平(可能被按下),則延時(shí)10ms(調(diào)用延時(shí)子程序DELAY),延時(shí)完成后,若發(fā)現(xiàn)低電平消失,則說明該按鍵實(shí)際上未被按下,此時(shí)轉(zhuǎn)回按鍵檢測處繼續(xù)檢測;若發(fā)現(xiàn)仍然是低電平,則說明此鍵確實(shí)被按下了,此時(shí)就跳轉(zhuǎn)至相應(yīng)的程序標(biāo)號(hào)處,執(zhí)行相應(yīng)的功能。(3)開始計(jì)時(shí)若確認(rèn)“開始計(jì)時(shí)”鍵被按下,則跳轉(zhuǎn)至程序標(biāo)號(hào)“RUN”處,將定時(shí)器0計(jì)時(shí)允許控制位TR0置位,則定時(shí)器開始運(yùn)行。此動(dòng)作完成后,返回按鍵檢測程序,等待操作者的下一次指令。(4)計(jì)時(shí)程序定時(shí)器0計(jì)時(shí)至10ms,溢出,引發(fā)中斷,程序跳轉(zhuǎn)至定時(shí)器0中斷服務(wù)程序入口000BH處執(zhí)

10、行。程序跳轉(zhuǎn)至中斷服務(wù)程序TIME0。由于秒表的最小計(jì)時(shí)單位是0.1s,即100ms,因此需加入軟件計(jì)時(shí),使定時(shí)器0溢出10次之后才改變數(shù)碼管的顯示狀態(tài)。因此每來一次中斷就將30H中的數(shù)加1,若30H中的數(shù)沒有到10,則給定時(shí)器0重新裝入預(yù)置數(shù),之后中斷返回并繼續(xù)等待中斷;到10了,才進(jìn)入顯示程序,改變數(shù)碼管的顯示狀態(tài),執(zhí)行完畢之后中斷返回并繼續(xù)等待中斷。(5)顯示程序?qū)?shù)碼管的段選碼放在數(shù)表TAB中。每次100ms計(jì)時(shí)完成后,將R0中的值(初值為0)送入A,然后自加1。.若R0中的值沒到10,則使用累加器A查表,并將查得的數(shù)碼管段選碼送入毫秒位數(shù)碼管。之后將30H中的數(shù)置零,中斷返回。若發(fā)現(xiàn)

11、R0中的數(shù)到10了,則將R0置零,并轉(zhuǎn)入秒位進(jìn)位子程序SECOND,向秒位進(jìn)位,之后,繼續(xù)照常向毫秒位送數(shù)。在秒位進(jìn)位子程序SECOND中,由于要用到累加器A,因此先將其推入堆棧保護(hù)。將R1中的值(初值為10)送入A,然后自加1。.若R1中的值沒到20,則使用累加器A查表,并將查得的數(shù)碼管段選碼送入秒位數(shù)碼管。若發(fā)現(xiàn)R1中的數(shù)到20了,則將R1重置為10,并轉(zhuǎn)入十秒位進(jìn)位子程序SECOND1,向十秒位進(jìn)位,之后,繼續(xù)照常向秒位送數(shù)。完成后,彈出ACC和PSW,子程序返回。十秒位進(jìn)位子程序與秒位進(jìn)位子程序相似,只是沒有向下一位進(jìn)位的功能。(6)暫停計(jì)時(shí)若確認(rèn)“暫停計(jì)時(shí)”鍵被按下,則跳轉(zhuǎn)至程序標(biāo)號(hào)

12、“PAUSE”處,將定時(shí)器0計(jì)時(shí)允許控制位TR0置零,則定時(shí)器暫停運(yùn)行。此動(dòng)作完成后,返回按鍵檢測程序,等待操作者的下一次指令。(7)秒表清零若確認(rèn)“秒表清零”鍵被按下,則跳轉(zhuǎn)至程序標(biāo)號(hào)“STOP”處,將TR0置零,關(guān)閉定時(shí)器0運(yùn)行。并且將數(shù)碼管、工作寄存器、定時(shí)器0預(yù)置數(shù)全部重置,使其處于秒表計(jì)時(shí)的初始狀態(tài)。此動(dòng)作完成后,返回按鍵檢測程序,等待操作者的下一次指令。(8)延時(shí)程序用于按鍵延時(shí)防抖,延時(shí)10ms。程序清單如下:ORG 0000H ;程序開始AJMP START ;跳轉(zhuǎn)到主程序START ORG 000BH ;定時(shí)器0中斷的地址入口AJMP TIME0 ;定時(shí)器0溢出,跳轉(zhuǎn)到中斷程

13、序TIME0START: ;主程序MOV P3,#0FFH ;輸入端口P3全寫1MOV P0,#3FH ;MOV P1,#3FH ;MOV P2,#0BFH ;數(shù)碼管初始化MOV 30H,#00H ;MOV R0,#00H ;MOV R1,#0AH ;MOV R2,#00H ;工作寄存器初始化MOV TMOD,#01H ;定時(shí)器0工作于方式1MOV TH0,#0D8H ;MOV TL0,#0FEH ;定時(shí)器0預(yù)置數(shù)(D8FEH=55550D)SETB EA ;開總中斷允許SETB ET0 ;開定時(shí)器0中斷允許READ: ;讀鍵程序L1:JB P3.2,L2 ;LCALL DELAY ;按鍵延時(shí)

14、防抖JB P3.2,L1 ;AJMP RUN ;確認(rèn)計(jì)時(shí)鍵被按下,開始/繼續(xù)計(jì)時(shí)L2:JB P3.3,L3 ;LCALL DELAY ;按鍵延時(shí)防抖JB P3.3,L2 ;AJMP PAUSE ;確認(rèn)暫停鍵被按下,暫停計(jì)時(shí)L3:JB P3.4,L1 ;LCALL DELAY ;按鍵延時(shí)防抖JB P3.4,L3 ;AJMP STOP ;確認(rèn)清零鍵被按下,秒表重置RUN: ;計(jì)時(shí)鍵按下,跳轉(zhuǎn)至此SETB TR0 ;定時(shí)器0開始/繼續(xù)運(yùn)行AJMP READ ;PAUSE: ;暫停鍵按下,跳轉(zhuǎn)至此CLR TR0 ;AJMP READ ; TIME0: ;定時(shí)器0溢出,中斷,跳轉(zhuǎn)至此INC 30H ;M

15、OV A,30H ;CJNE A,#0AH,TIME1 ;30H單元中的值到10了嗎?(計(jì)時(shí)到10毫秒了嗎,也就是說,該向毫秒位送數(shù)了嗎?)MOV DPTR,#TAB ;30H中的值到10了,順序執(zhí)行MOV A,R0 ;INC R0 ;CJNE R0,#0AH,GET ;R0中的值到10了嗎?(該向秒位進(jìn)位了嗎?)MOV R0,#00H ;LCALL SECOND ;到了,R0清零,調(diào)用進(jìn)位子程序SECOND,向秒位進(jìn)位GET: ;沒到,跳過進(jìn)位子程序MOVC A,A+DPTR ;MOV P1,A ;查表并向數(shù)碼管毫秒位送數(shù)MOV 30H,#00H ;重置30H單元TIME1: ;MOV TH

16、0,#0D8H ;MOV TL0,#0FEH ;給定時(shí)器0重新預(yù)置數(shù)RETI ;中斷返回SECOND: ;秒位進(jìn)位子程序PUSH ACC ;PUSH PSW ;將ACC和PSW推入堆棧保護(hù)MOV A,R1 ;INC R1 ;CJNE R1,#14H,GET1 ;R1中的值到20了嗎,也就是說,該向十秒位進(jìn)位了嗎?MOV R1,#0AH ;LCALL SECOND1 ;到了。R1重置,調(diào)用進(jìn)位子程序SECOND1,向十秒位進(jìn)位GET1: ;沒到,跳過進(jìn)位子程序MOVC A,A+DPTR ;MOV P2,A ;查表并向數(shù)碼管秒位送數(shù)POP PSW ;POP ACC ;PSW,ACC出棧RET ;子

17、程序返回SECOND1: ;十秒位進(jìn)位子程序PUSH ACC ;PUSH PSW ;將ACC和PSW推入堆棧保護(hù)MOV A,R2 ;INC R2 ;CJNE R2,#0AH,GET2 ;R2中的值到10了嗎,也就是說,該將此位歸零了嗎?MOV R2,#00H ;到了,R2清零GET2: ;沒到,跳過清零程序MOVC A,A+DPTR ;MOV P0,A ;查表并向數(shù)碼管十秒位送數(shù)POP PSW ;POP ACC ;PSW,ACC出棧RET ;子程序返回STOP: ;清零鍵按下,跳轉(zhuǎn)至此MOV P3,#0FFH ;MOV P0,#3FH ;MOV P1,#3FH ;MOV P2,#0BFH ;數(shù)

18、碼管清零MOV 30H,#00H ;MOV R0,#00H ;MOV R1,#0AH ;MOV R2,#00H ;工作寄存器初始化CLR TR0 ;計(jì)時(shí)器0停止計(jì)時(shí)MOV TH0,#0D8H ;MOV TL0,#0FEH ;定時(shí)器0預(yù)置數(shù)AJMP READ ;DELAY: ;延時(shí)10ms子程序MOV R3,#50D ;D1:MOV R4,#100D ;D2:DJNZ R4,D2 ;DJNZ R3,D1 ;RET ;子程序返回TAB: DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,

19、0EFH,0BFH ;數(shù)碼管段選碼數(shù)表END ;程序結(jié)束7、程序仿真 將以上程序清單導(dǎo)入先前做好的Proteus仿真電路,匯編之后,按鍵開始進(jìn)行仿真。 仿真結(jié)果如下:仿真結(jié)果描述:按“開始”鍵,秒表開始計(jì)時(shí);按“暫停”鍵,秒表暫停計(jì)時(shí);再按“開始”鍵,秒表繼續(xù)計(jì)時(shí);按“清零”鍵,秒表清零。8、實(shí)物制作 8.1所需元件89C52單片機(jī)×1(型號(hào)STC 89C52RC)IC座×17段共陰一位數(shù)碼管×3(型號(hào)Ark SM420501K)4.7K電阻×430pF電容×210uF電容×1(耐壓50V)8×4.7K排阻×312

20、MHz晶振器×1七號(hào)電池盒×2 1.5V七號(hào)干電池×4(型號(hào) 雙鹿高性能碳性電池) 按鈕×3 萬能板×1,導(dǎo)線若干 8.2 所需工具 電烙鐵,松香,焊錫絲,程序燒錄器等。8.3 焊接 按照仿真電路圖,將元件焊接在萬能板上,并用導(dǎo)線將它們聯(lián)接起來,。焊接結(jié)果如下圖: 電路板正面 電路板背面8.4 燒錄程序并運(yùn)行 用編程器將編譯好的second watch.hex文件燒錄進(jìn)單片機(jī),再將單片機(jī)插入焊接于電路板上的IC座中,接通電源,開始運(yùn)行秒表。結(jié)果顯示,秒表運(yùn)行正常。按照我們的預(yù)期實(shí)現(xiàn)了計(jì)時(shí)、暫停和清零的功能。并且計(jì)時(shí)的準(zhǔn)確度很高,計(jì)時(shí)范圍內(nèi)誤差不超過0.1秒。 至此,我們的秒表設(shè)計(jì)

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲(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)論