MCU實驗報告--3-基于單片機的簡易秒表設(shè)計制作
項目二基于單片機的簡易秒表設(shè)計制作
一、實驗?zāi)康暮鸵?/p>
1、實驗?zāi)康?/p>
熟悉LED數(shù)碼管與單片機的接口電路及其設(shè)計方法,掌握動態(tài)顯示方式及其典型的應(yīng)用電路;掌握LED八段數(shù)碼管秒表顯示器的程序編制方法。
通過調(diào)試簡易秒表整體程序,學(xué)會編制含LED動態(tài)顯示、定時器中斷等多種功能的綜合程序,初步掌握復(fù)雜應(yīng)用程序的編制和調(diào)試技巧。2、實驗要求
A仿真試驗,完成用數(shù)碼管顯示0-9或A-F并不斷循環(huán);
B簡單秒表的設(shè)計及實現(xiàn),每過1S,LED數(shù)碼管顯示的秒數(shù)加1,設(shè)計制作0-59S不斷運行的秒表。
二、實驗儀器設(shè)備
1、PC機(Keil,PROTEUS)3、面包板4、元器件
2、實驗仿真板(用dpj.dll實驗仿真板驗證)
三、實驗步驟1、器件準(zhǔn)備
元器件清單列表元件名稱AT89S51晶振電容1數(shù)碼管12MHz參數(shù)數(shù)量1112電阻1電阻2電容1其它元件名稱參數(shù)數(shù)量2、硬件設(shè)計
試驗A仿真原理圖
試驗B仿真原理圖
實驗B根據(jù)電路原理圖,對各個硬件模塊在面包板上進(jìn)行搭試。3、軟件設(shè)計及調(diào)試
1)、啟動Keil軟件2)、源程序(供參考)試驗A
CounterEQU57H;計數(shù)器,顯示程序通過它得知現(xiàn)正顯示哪個數(shù)碼管DISPBUFEQU58H
;顯示緩沖區(qū)為58H-5DH
……試驗B
2……3)、調(diào)試程序
A、根據(jù)程序確定調(diào)試目的,即調(diào)試時所需觀察的內(nèi)容結(jié)果。B、調(diào)試程序。
4、固化程序
將以上ASM編譯生成HEX文件,利用編程器將HEX文件燒錄到AT89S51。
5、秒表顯示(照片)
四、總結(jié)與體會
擴(kuò)展閱讀:簡易秒表的制作
簡易秒表的制作1.實訓(xùn)目的
(1)利用單片機定時器中斷和定時器計數(shù)方式實現(xiàn)秒、分定時。
(2)通過LED顯示程序的調(diào)整,熟悉8155與8051,8155與LED的接口技術(shù),熟悉LED動態(tài)顯示的控制過程。
(3)通過鍵盤程序的調(diào)整,熟悉8155與矩陣式鍵盤的接口技術(shù),熟悉鍵盤掃描原理。
(4)通過閱讀和調(diào)試簡易秒表整體程序,學(xué)會如何編制含LED動態(tài)顯示、鍵盤掃描和定時器中斷等多種功能的綜合程序,初步體會大型程序的編制和調(diào)試技巧。2.實訓(xùn)設(shè)備與器件
(1)實訓(xùn)設(shè)備:單片機開發(fā)系統(tǒng)、微機。(2)實訓(xùn)器件:實訓(xùn)電路板1套。3.實訓(xùn)步驟與要求
(1)要求:利用實訓(xùn)電路板,以8位LED右邊2位顯示秒,左邊6位顯示0,實現(xiàn)秒表計時顯示。以4×4矩陣鍵盤的KE0、KE1、KE2等3鍵分別實現(xiàn)啟動、停止、清零等功能。
(2)方法:用單片機定時器T0中斷方式,實現(xiàn)1秒定時;利用單片機定時器1方式3計數(shù),實現(xiàn)60秒計數(shù)。用動態(tài)顯示方式實現(xiàn)秒表計時顯示,用鍵盤掃描方式取得KE0、KE1、KE2的鍵值,用鍵盤處理程序?qū)崿F(xiàn)秒表的啟動、停止、清零等功能。
(3)實驗線路分析:采用實訓(xùn)電路板,其原理圖參見附錄。8位LED顯示的位碼由8155的PA口輸出,段碼由8155的PB口輸出,PB口線與LED之間接有200Ω限流電阻,LED為共陰極數(shù)碼管,LED顯示方式為動態(tài)顯示方式。4×4矩陣鍵盤的行線經(jīng)5.1KΩ電阻上拉后與8155PC口的PC0~PC3口線相連,列線與8155PA口的PA0~PA3口線相連。8155的控制口地址為4400H,PA口地址為4401H,PB口地址為4402H,PC口地址為4403H。系統(tǒng)本采用11.0592MHz的晶振,本實訓(xùn)應(yīng)改為12MHz晶振,以方便定時。
(4)軟件設(shè)計:軟件整體設(shè)計思路是以鍵盤掃描和鍵盤處理作為主程序,LED動態(tài)顯示作為子程序。二者間的聯(lián)系是:主程序查詢有無按鍵,無按鍵時,調(diào)用二次LED動態(tài)顯示子程序(約延時8ms)后再回到按鍵查詢狀態(tài),不斷循環(huán);有按鍵時,LED動態(tài)顯示子程序作為按鍵防抖延時被連續(xù)調(diào)用二次(約延時16ms),待按鍵處理程序執(zhí)行完后,再回到按鍵查詢狀態(tài),同時兼顧了按鍵掃描取值的準(zhǔn)確性和LED動態(tài)顯示的穩(wěn)定性。秒定時采用定時器T0中斷方式進(jìn)行,60秒計數(shù)由定時器1采用方式3完成,中斷及計數(shù)的開啟與關(guān)閉受控于按鍵處理程序。由上述設(shè)計思路可設(shè)計出軟件流程圖如圖7.1所示。
(5)程序編制:編程時置KE0鍵為“啟動”,置KE1鍵為“停止”,置KE2鍵為“清零”,因按鍵較少,在處理按鍵值時未采用散轉(zhuǎn)指令“JMP”,而是采用條件轉(zhuǎn)移指令“CJNE”,每條指令后緊跟著一條無條件跳轉(zhuǎn)指令“AJMP”,轉(zhuǎn)至相應(yīng)的按鍵處理程序,如不是上述3個按鍵值則跳回按鍵查詢狀態(tài)。8位LED顯示的數(shù)據(jù)由顯示緩沖區(qū)30H~37H單元中的數(shù)據(jù)決定,順序是從左至右,動態(tài)顯示時,每位顯示持續(xù)時間為1ms,1ms延時由軟件實現(xiàn),8位顯示約耗時8ms。主程序、按鍵查詢子程序采用第0組工作寄存器,顯示子程序采用第1組工作寄存器。1秒定時采用定時器T0方式1中斷,每50ms中斷一次,用21H做50ms計數(shù)單元,每20次為一個循環(huán),計滿20次,60秒計數(shù)單元(20H)計數(shù)1次。60秒計數(shù)采用定時器T1方式2計數(shù),計數(shù)脈沖采用軟件置位、復(fù)位P3.5口的方法實現(xiàn),用20H單元做60秒計數(shù)單元,如定時器T1溢出,則20H單元被清零,20H單元的數(shù)據(jù)采用十進(jìn)制計數(shù),該數(shù)據(jù)被拆成個位和十位兩個數(shù)據(jù)后分別送至顯示緩沖區(qū)的30H、31H單元。
圖7.1簡易秒表軟件流程圖
按照上述思路可編制源程序如下:ORG0000H
AJMPMAINORG000BH
AJMPCONT
;◇◇◇◇◇◇◇◇◇◇◇主程序◇◇◇◇◇◇◇◇◇◇◇◇◇;——————————初始化程序————————————
MAIN:MOVTMOD,#61H;置T0方式1定時,T1方式2計數(shù)MOVTH0,#3CH;T0置初值MOVTL0,#0B0H
MOVTH1,#0C4H;T1置初值MOVTL1,#0C4H
MOVDPTR,#4400H;8155控制口地址送DPTRMOVA,#43H;設(shè)置8155工作方式字
MOVX@DPTR,A;設(shè)置PA、PB口輸出,PC口輸入MOV20H,#00H;60秒計數(shù)單元置初值MOV21H,#14H;50ms計數(shù)單元置初值MOVSP,#3FH;堆棧指針置初值
MOVR2,#08H;LED待顯示位數(shù)送R2MOVR0,#30H;顯示緩沖區(qū)首址送R0STAR:MOV@R0,#00H;顯示緩沖區(qū)清零INCR0
DJNZR2,STAR
CLRA;累加器清零;———————————鍵盤查詢程序——————————
KEY:ACALLKS;調(diào)按鍵查詢子程序判是否有鍵按下JNZK1;有鍵按下轉(zhuǎn)移ACALLDISP;無鍵按下,調(diào)顯示子程序延時AJMPKEY;繼續(xù)查詢按鍵;———————————鍵盤掃描程序——————————K1:ACALLDISP;鍵盤去抖延時ACALLDISP
ACALLKS;再次判別是否有鍵按下JNZK2;有鍵按下轉(zhuǎn)移
AJMPKEY;無按鍵,誤讀,繼續(xù)查詢按鍵K2:MOVR3,#0FEH;首列掃描字送R3MOVR4,#00H;首列號送R4
K3:MOVDPTR,#4401H;PA口地址送DPTR,開始列掃描MOVA,R3
MOVX@DPTR,A;列掃描字送PA口INCDPTR;指向PC口INCDPTR
MOVXA,@DPTR;讀取行掃描值
JBACC.0,L1;第0行無鍵按下,轉(zhuǎn)查第1行MOVA,#00H;第0行有鍵按下,行首鍵號送AAJMPLK;轉(zhuǎn)求鍵號
L1:JBACC.1,L2;第1行無鍵按下,轉(zhuǎn)查第2行
MOVA,#08H;第1行有鍵按下,行首鍵號送AAJMPLK;轉(zhuǎn)求鍵號
L2:JBACC.2,L3;第2行無鍵按下,轉(zhuǎn)查第3行
MOVA,#10H;第2行有鍵按下,行首鍵號送AAJMPLK;轉(zhuǎn)求鍵號
L3:JBACC.3,NEXT;第3行無鍵按下,轉(zhuǎn)查下一列MOVA,#18H;第3行有鍵按下,行首鍵號送AAJMPLK
LK:ADDA,R4;形成鍵碼送APUSHACC;鍵碼入棧保護(hù)K4:ACALLDISP
ACALLKS;等待鍵釋放JNZK4;未釋放,等待POPACC;鍵釋放,彈棧送AAJMPPR;轉(zhuǎn)鍵盤處理程序
NEXT:INCR4;修改列號MOVA,R3
JNBACC.3,KEY;4列掃描完返回按鍵查詢狀態(tài)RLA;未掃描完,改為下列掃描字MOVR3,A;掃描字暫存R3AJMPK3;轉(zhuǎn)列掃描程序
;———————————鍵盤處理程序———————————————PR:CJNEA,#00H,PR01;不是KE0鍵碼,轉(zhuǎn)KE1鍵AJMPKE0;轉(zhuǎn)KE0鍵處理程序
PR01:CJNEA,#01H,PR02;不是KE1鍵碼,轉(zhuǎn)KE2鍵AJMPKE1;轉(zhuǎn)KE1鍵處理程序
PR02:CJNEA,#02H,PR03;不是KE2鍵碼,返回按鍵查詢AJMPKE2;轉(zhuǎn)KE2鍵處理程序PR03:AJMPKEY
KE0:SETBTR0;啟動定時器T0SETBTR1;啟動定時器T1
SETBET0;允許定時器T0中斷SETBEA;開中斷
AJMPKEY;返回鍵盤查詢狀態(tài)KE1:CLREA;關(guān)中斷
CLRET0;禁止定時器T0中斷CLRTR1;關(guān)定時器T1CLRTR0;關(guān)定時器T0AJMPKEY
KE2:CLREA;關(guān)中斷
AJMPMAIN;返回主程序進(jìn)行初始化;——————————按鍵查詢子程序——————————————KS:MOVDPTR,#4401H;置8155PA口地址MOVA,#00H
MOVX@DPTR,A;全掃描字#00H送PA口INCDPTR;指向PC口INCDPTR
MOVXA,@DPTR;讀入PC口狀態(tài)
3CPLA;變正邏輯,高電平表示有鍵按下ANLA,#0FH;屏蔽高4位
RET;返回,A≠0表示有鍵按下;—————————LED動態(tài)顯示子程序—————————————DISP:PUSHACC;A入棧保護(hù)
SETBRS0;保護(hù)第0組工作寄存器,啟用第1組工作寄存器
MOVR2,#08H;LED待顯示位數(shù)送R2
MOVR1,#00H;設(shè)定顯示時間MOVR3,#7FH;選中最右端LED
MOVR0,#30H;顯示緩沖區(qū)首址送R0MOVA,@R0;秒顯示個位送A
DISP1:MOVDPTR,#TAB;指向字形表首址MOVCA,@A+DPTR;查表取得字形碼
MOVDPTR,#4402H;指向8155PB口(段碼口)MOVX@DPTR,A;字形碼送PB口MOVA,R3;取位選字
MOVDPTR,#4401H;指向8155PA口(位選口)MOVX@DPTR,A;位碼送PA口DJNZR1,$;延時0.5msDJNZR1,$;延時0.5msRRA;位選字移位
MOVR3,A;移位后的位選字送R3INCR0;指向下一位緩沖區(qū)地址MOVA,@R0;緩沖區(qū)數(shù)據(jù)送ADJNZR2,DISP1;未掃描完,繼續(xù)循環(huán)
CLRRS0;恢復(fù)第0組工作寄存器POPACC;A彈棧,恢復(fù)現(xiàn)場RET
TAB:DB3FH,06H,5BH,4FH,66H;共陰極LED字形表DB6DH,7DH,07H,7FH,6FH
;——————————定時器中斷服務(wù)程序—————————————CONT:PUSHACC;保護(hù)現(xiàn)場
MOVTH0,#3CH;定時器T1重置初值MOVTL0,#0B0HMOVA,20H;秒計數(shù)器送AAJMPCONT1REN:AJMPREN1
CONT1:DJNZ21H,REN;1秒定時未到,中斷返回MOV21H,#14H;重置50ms計數(shù)初值
CLRP3.5;軟件產(chǎn)生定時器T1計數(shù)脈沖NOPNOP
SETBP3.5
INCA;1秒計數(shù)值加1DAA;換算為10進(jìn)制計數(shù)
JBCTF1,CONT2;60秒到,轉(zhuǎn)清零
CONT3:MOV20H,A;計數(shù)值送60秒計數(shù)單元20HANLA,#0FH;屏蔽高4位
MOV30H,A;秒表個位待顯示數(shù)據(jù)送顯示緩沖區(qū)MOVA,20H
SWAPA;60秒計數(shù)單元高、低4位數(shù)據(jù)互換ANLA,#0FH;屏蔽高4位
MOV31H,A;秒表十位待顯示數(shù)據(jù)送顯示緩沖區(qū)AJMPREN1
CONT2:MOVA,#00HAJMPCONT3
REN1:POPACC;恢復(fù)現(xiàn)場RET;中斷返回END4.實訓(xùn)總結(jié)與分析
(1)例5.4與本實訓(xùn)相比,二者均是秒表,但差別較大。前者采用發(fā)光二極管顯示,后者采用七段碼LED(俗稱數(shù)碼管),后者顯示更直觀;前者計時采用軟件延時,后者采用定時器中斷,后者更準(zhǔn)確;前者功能單一,程序一旦開始運行,中間過程無法控制,后者功能齊全,可隨時啟動、停止、清零,后者智能化程度更高。綜上所述,后者更實用。
(2)設(shè)計、調(diào)試大型程序時,需先根據(jù)要求劃分模塊,優(yōu)化結(jié)構(gòu);再根據(jù)各模塊特點確定何為主程序,何為子程序,何為中斷服務(wù)程序,相互間如何調(diào)用;再根據(jù)各模塊性質(zhì)和功能將各模塊細(xì)化,設(shè)計出程序流程圖;最后才根據(jù)各模塊流程圖編制具體程序。調(diào)試時應(yīng)先調(diào)主程序,實現(xiàn)最基本最主要的功能,在此基礎(chǔ)上再將各模塊功能往主程序上堆砌,直至各模塊聯(lián)調(diào)、統(tǒng)調(diào),實現(xiàn)全部功能。本實訓(xùn)將整個程序劃分為鍵盤程序,動態(tài)顯示程序,秒計時程序三大模塊,根據(jù)各自的特點確定鍵盤程序為主程序,動態(tài)顯示程序為子程序,秒計時程序為定時器中斷服務(wù)程序。主程序又細(xì)分為初始化程序,鍵盤查詢程序,鍵盤掃描程序,鍵盤處理程序四大部分。三大模塊之間的關(guān)系是:鍵盤程序在無鍵按下時,不斷調(diào)用動態(tài)顯示子程序;在有鍵按下時,先調(diào)用動態(tài)顯示子程序消抖,再進(jìn)入鍵盤處理程序,控制中斷服務(wù)程序的運行;處理完畢后,再不斷調(diào)用動態(tài)顯示子程序。經(jīng)上述處理后,三大模塊運行協(xié)調(diào)一致,既保持了動態(tài)顯示的穩(wěn)定性,又保持了鍵盤的可靠性,還保持了秒計時的準(zhǔn)確性,較好地實現(xiàn)了全部功能。
(3)本實訓(xùn)只用到實驗線路板8位LED顯示中的兩位,只用到4×4鍵盤16個按鍵中的3個,因此,其功能還有較大的擴(kuò)展空間。只要將上述程序稍加改動即可實現(xiàn)秒、分、時、日顯示,并可作全方位修改的實時時鐘。如增加LED顯示位數(shù)或?qū)@示改為LCD顯示模塊,可實現(xiàn)年、月、周、日、時、分、秒顯示。
實驗13簡易秒表的制作
(一)實驗說明
1.利用單片機定時器中斷和定時器計數(shù)方式實現(xiàn)秒、分定時。
2.通過LED顯示程序的調(diào)整,熟悉8051,LED的接口技術(shù),熟悉LED動態(tài)顯示的控制過程。3.通過鍵盤程序的調(diào)整,熟悉鍵盤掃描原理。
4.學(xué)會如何編制含LED動態(tài)顯示,鍵盤掃描和定時器中斷等多種功能的綜合程序,初步體會大
型程序的編制和調(diào)試技巧。5.以K1,K5,K93個鍵分別實現(xiàn)啟動、停止、清零等功能。用動態(tài)顯示方式實現(xiàn)秒表計時顯示。
(二)實驗連線表
連接1連接2連接3連接4連接5
A01+5V/GNDP1.0P1.1P1.2-P1.4GND開始A05+5V/GNDSCLSDAA08+5V/GNDKR1-KR3KC1(三)程序流程圖定時器0中斷服務(wù)程序
恢復(fù)現(xiàn)場顯示時間定時器置初值保護(hù)現(xiàn)場主程序流程系統(tǒng)初始化顯示全0初始時間鍵盤掃描調(diào)整時間值Y啟動鍵?NY停止鍵?NN清零鍵?Y關(guān)中斷關(guān)閉時器關(guān)中斷啟動定時器開中中斷返回1234+5VDR1R2R35.1K5.1K5.1K實驗13原理圖+5V1DK1K2K3R4510Ωx838383838383U1SCL1SDA23456781312151431B191891716P1.0/TP1.1/TP1.2P1.3P1.4P1.5P1.6P1.7P3.3/INT1P3.2INT0P3.5/T1P3.4/T0EA/VPXLAT1XLAT2RESETP3.7/RDP3.6/WRMCU8052P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7P3.0/RXDP3.1/TXDALE/PPSEN39383736353433322122232425262728101130291A101B91C71D51E41F21G11DP6abacfbdgecfedgdpdpLA11A1B1C1D1E1F1G1DP2A102B92C72D52E42F22G12DP6abacfbdgecfedgdpdpLA23A103B93C73D53E43F23G13DP6abacfbdgecfedgdpdpLA34A104B94C74D54E44F24G14DP6abacfbdgecfedgdpdpLA45A105B95C75D55E45F25G15DP6abacfbdgecfedgdpdpLA56A106B96C76D56E46F26G16DP6abacfbdgecfedgdpdpLA62A2B2C2D2E2F2G2DP3A3B3C3D3E3F3G3DP4A4B4C4D4E4F4G4DP5A5B5C5D5E5F5G5DP345610111213345601111213345601111213345610111213345610111213345610U2Q0Q1Q2Q3Q4Q5Q6Q7U3Q0Q1Q2Q3Q4Q5Q6Q7U4Q0Q1Q2Q3Q4Q5Q6Q7U5Q0Q1Q2Q3Q4Q5Q6Q7U6Q0Q1Q2Q3Q4Q5Q6Q7U7Q0Q1Q2Q3Q4Q5Q6Q71112136A6B6C6D6E6F6G6DP8C23456789CBCLKCLKCLKCLKCLKCLKMRMRMRMRMR74LS16412891274LS164891274LS164891274LS164891274LS164891274LS16489SDASCLMRABABABABABAB+5VC1100nFC2100nFC3100nFC4100nFC5100nFC6100nFATitleANumberRevisionSizeA4Date:File:12317-Aug-201*E:\\JZV2.ddbSheetofDrawnBy:4
友情提示:本文中關(guān)于《MCU實驗報告--3-基于單片機的簡易秒表設(shè)計制作》給出的范例僅供您參考拓展思維使用,MCU實驗報告--3-基于單片機的簡易秒表設(shè)計制作:該篇文章建議您自主創(chuàng)作。
來源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問題,請聯(lián)系我們及時刪除。