簡易秒表
學(xué)號:課程名稱:單片機與嵌入式系統(tǒng)基礎(chǔ)與實訓(xùn)姓名:班級:上機內(nèi)容:簡易秒表上機實驗性質(zhì):□綜合性實驗√設(shè)計性實驗□驗證實驗實驗時間:201*年5月21日實驗地點:實驗設(shè)備:計算機實驗報告:(包括:目的、方法、原理、結(jié)果或?qū)嶒炐〗Y(jié)等)。一、實驗?zāi)康模?、掌握單片機外部中斷的原理及用法;2、掌握單片機定時器中斷的原理及用法。二、實驗內(nèi)容:K5鍵做啟動停止秒表(外部中斷0),K6鍵做秒表歸零(外部中斷1),4位數(shù)碼管動態(tài)掃描顯示(定時器中斷0),最大計數(shù)值9999秒。要求先進行仿真,而后下載到實驗箱中觀察實際效果。三、實驗設(shè)備及器件1、ME850單片機實驗箱(包含芯片及連接線等)2、PC機四、實驗步驟1、根據(jù)實驗要求,設(shè)計出實驗流程圖如圖1所示:2、用KeiluVision4根據(jù)實驗要求寫出相應(yīng)程序,程序代碼如下所示:#definecount_M2250#defineTH_M2(256-count_M2)#defineTL_M2(256-count_M2)intcount_T1=0;//計算T1中斷次數(shù)/*聲明七段數(shù)碼管*/unsignedcharcodeTAB[]={0xc0,0xf9,0xa4,0xb0,0x99,//0~40x92,0x82,0xf8,0x80,0x90};chardisp[4]={0xc0,0xc0,0xc0,0xc0};//聲明數(shù)碼管顯示四位,即0000unsignedcharcodeBIT[]={0xFE,0xfD,0xFB,0xF7//0~4};intseconds=0;//秒數(shù)intscan=0;//掃描信號charqw,bw,sw,gw;voidmain(){IE=0x8f;//10001111,啟用INT0/1、TF0/1中斷TCON=0x05;//下降沿觸發(fā)TMOD=0X21;//00100001,T1采用mode2、T0采用mode1TH0=TH_M1;TL0=TL_M1;//設(shè)置T0計數(shù)值高8位、低8位TR0=0;//不啟動T0TH1=TH_M2;TL1=TL_M2;//設(shè)置T1自動加載值、計數(shù)值TR1=1;//啟動T1P3=0xff;//設(shè)置K5/K6輸入while(1);}(接下)開始聲明變量設(shè)置中斷、定時器,啟動掃描定時器,開啟Timer0定時nonoTR1=1TR0=1yesyes啟動T0定時器啟動T1定時器T0中斷子程序T_IST1中斷子程序T_4ms重設(shè)定時值no32次no次20yes重新計數(shù)yes重新計數(shù),秒數(shù)加1no超過千位數(shù)?no60秒?yesyes從個位數(shù)開始秒數(shù)歸0輸出數(shù)字信號填入顯示區(qū)輸出掃描信號INT0中斷子程序int_swINT1中斷子程序int_RST秒數(shù)歸0切換sw0圖(接上)voidT0_1s(void)interrupt1{TH0=TH_M1;TL0=TL_M1;if(++count_T0==20){count_T0=0;seconds++;if(seconds==9999){seconds=0;}}qw=seconds/1000;bw=(seconds-qw*1000)/100;sw=(seconds-qw*1000-bw*100)/10;gw=seconds-qw*1000-bw*100-sw*10;disp[3]=TAB[qw];disp[2]=TAB[bw];disp[1]=TAB[sw];disp[0]=TAB[gw];}voidT1_4ms(void)interrupt3{if(++count_T1==16){count_T1=0;if(++scan==5)scan=1;SEG=0xff;SCANP=BIT[scan-1];SEG=disp[scan-1];}}voidint0_sw(void)interrupt0//int0中斷子程序開始{TR0=~TR0;//切換T0為開始/暫停}voidint1_RST(void)interrupt2//int0中斷子程序開始{seconds=0;//秒數(shù)歸零disp[0]=disp[1]=disp[2]=disp[3]=0xc0;//顯示}4、把編譯好的HEX文件下載到實驗箱的單片機內(nèi),觀察效果。顯然,看到實驗結(jié)果:數(shù)碼管上的數(shù)字從1開始計數(shù),直到計數(shù)到9999時返回為0。當(dāng)按下K5鍵時開始計時,按下K6鍵時值歸為0。五、實驗小結(jié):通過這次實驗讓我了解和掌握了單片機外部中斷的原理及用法以及定時器中斷的原理及用法。在這次試驗中,我深刻感受到了使用中斷來寫程序,能給程序帶來巨大的好處。不僅能使程序簡結(jié),而且使程序的條理十分清楚。節(jié)省CPU的空間,加快程序的執(zhí)行速度。任課教師評語:教師簽字:年月日注:每學(xué)期至少有一次設(shè)計性實驗。每學(xué)期結(jié)束請任課教師按時按量統(tǒng)一交到實驗中心處。實驗報告A4紙雙面打印。
擴展閱讀:簡易秒表的設(shè)計
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
簡易秒表的設(shè)計
1設(shè)計意義及要求
1.1簡易秒表的設(shè)計意義
簡易秒表的設(shè)計是在我們學(xué)習(xí)了單片機技術(shù)之后的一次檢測。在已學(xué)內(nèi)容的基礎(chǔ)上熟
練掌握,對未曾學(xué)習(xí)過的內(nèi)容加以了解,從多個角度更加深刻理解和掌握單片機的理論與運用。通過本次設(shè)計,能夠提高大家對自己電工電子設(shè)計的興趣與了解,以更好的理解本專業(yè),從而在今后的學(xué)習(xí)中打下一個很好的基礎(chǔ)。
1.2簡易秒表的設(shè)計要求
1)利用單片機作為主控制器實現(xiàn)電子秒表,用4位LED數(shù)碼管顯示時間。2)設(shè)置外部按鍵SB,當(dāng)按鍵SB第一次按下時啟動秒表開始計時;當(dāng)?shù)诙伟聪掳存IS1時秒表停止計時,當(dāng)?shù)谌伟聪掳存IS1時秒表回零;即用一個按鍵S1來控制秒表的啟動、停止和回零功能。
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
2簡易秒表硬件電路設(shè)計
采用ATMEL公司生產(chǎn)的AT89C51單片機控制器,用4位共陰LED數(shù)碼管顯示時間,為了節(jié)省單片機的I/O資源,LED數(shù)碼管采用動態(tài)顯示方式,由P2口的低4位輸出位選信號,P1口輸出LED數(shù)碼管的顯示段碼。用非門來提高P2口的驅(qū)動能力,使LED管達到合適的亮度。完成設(shè)計的仿真電路如圖2-1所示。
圖2-1基于單片機控制的秒表仿真電路圖
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
3程序設(shè)計
采用主程序調(diào)用子程序的設(shè)計方法,主程序首先對定時器和有關(guān)寄存器及存儲單元進行初始化,調(diào)用按鍵掃描子程序和顯示子程序,判斷計時時間是否到9分59秒。主程序設(shè)計流程圖如圖3-1所示。
計時時間到了9分59秒嗎?計數(shù)單元清零
圖3-1主程序設(shè)計流程圖
開始初始化定時器將計數(shù)單元3FH-42H清零,將存放按鍵次數(shù)的寄存器R7清零,將存放位選值的寄存器R2清零,關(guān)閉定時器。調(diào)用按鍵掃描子程序調(diào)用顯示子程序N3.1定時初值的計算
按12MHz的時鐘頻率計算,其機器周期為1s,選用定時/計數(shù)器工作方式1,定時時間50ms。
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
計算初值如下:
計數(shù)值N=定時/計數(shù)器最大值M定時/計數(shù)器初值X則初值X=MN
機器周期為TM=12×1/osc=12×1/12×106=1s采用定時器工作方式1,所以初值為X=21650ms/1us=15536=3CB0H所以TH0=3CH,TL0=B0H
3.2初始化
通過初始化設(shè)定定時器0工作方式為方式1,開放定時器0的中斷及總中斷,分別給存放毫秒、秒、分的計數(shù)單元3FH,40H,41H,42H清零。關(guān)閉定時/計數(shù)器T0。給存儲按鍵次數(shù)的寄存器R1清零。
3.3判斷有無鍵按下,并進行按鍵處理
因為只有一個與P3.0相連的接獨立式按鍵,所以用JBP3.0,KEYEND指令來讀按鍵的狀態(tài)。當(dāng)P3.0=0時則有鍵按下,然后進行10ms的延時消抖,延時消抖后將存放按鍵次數(shù)的寄存器R7加1,接著判斷R1中的值是多少?如果是1(表示第一次按鍵)則用SETBTR0指令啟動定時器T0;如果是2則用CLRTR0指令關(guān)閉定時器T0;如果是3則將存放時間的3FH,40H,41H,42H單元及存放按鍵次數(shù)的R1清零。程序設(shè)計流程圖如圖3-2所示。
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
開始將累加器A的內(nèi)容壓入堆棧N有鍵按下嗎?Y按鍵延時消抖按鍵按下次數(shù)處理啟動定時器秒表開始計數(shù)關(guān)閉定時器秒表停止計數(shù)秒表復(fù)位顯示0將堆棧內(nèi)容彈出至累加器A子程序返回圖3-2按鍵確認程序設(shè)計流程圖
3.4顯示子程序設(shè)計
顯示子程序的主要作用是根據(jù)存放在3FH,40H,41H,42H單元的計數(shù)值查表找到跟計數(shù)值對應(yīng)的段碼,然后送到對應(yīng)的LED數(shù)碼管進行顯示。程序設(shè)計流程圖如圖3-3所示。
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
根據(jù)計數(shù)單元的值,通過查表指令,找到跟計數(shù)值相對應(yīng)的顯示段碼開始將R0賦初值3FH,R2賦初值08H,R3賦初值4累加器A清零,通過MOVA,@R0指令讀取計數(shù)單元的值將查表得顯示段碼送顯示器,并從R2讀取位選碼,并送P2口顯示延時R0加1,準(zhǔn)備讀取下一計數(shù)單元,修改R2的值,準(zhǔn)備顯示下個數(shù)碼管4個數(shù)碼管掃描顯示完嗎?子程序返回
圖3-3顯示子程序流程圖
YN3.5中斷子程序設(shè)計
本任務(wù)中定時器T0定時50ms,每到50ms,T0產(chǎn)生一次中斷,進入中斷服務(wù)程序。在中斷服務(wù)程序中,首先將累加器A中內(nèi)容壓入堆棧,保護好現(xiàn)場,接著給T0重裝初值。然后50ms計數(shù)單元加1,再判斷計數(shù)單元是否加到2(即0.1s),若沒有則中斷返回;若加到了,則首先50ms計數(shù)單元清零,接著將毫秒的計數(shù)單元加1。
再判斷毫秒計數(shù)單元是否到10(即1s),若沒有則中斷返回;若到了10,則將毫秒計數(shù)單元清零。然后將秒的個位計數(shù)單元加1,秒的個位計數(shù)單元加1后判斷是否加到10,若不是則中斷返回;若是則將秒的個位計數(shù)單元清零,然后秒的10位計數(shù)單元加1,再判斷
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
秒的10位計數(shù)單元是否到6,若不是則中斷返回;若是則將秒的十位清零,分計數(shù)單元加1。程序設(shè)計流程圖如圖3-4所示。
中斷返回
圖3-4中斷服務(wù)程序設(shè)計流程圖
7開始將A中內(nèi)容壓入堆棧,單元43H中的內(nèi)容加1N中斷了2次嗎?中斷次數(shù)單元清零,毫秒計數(shù)單元值加1N毫秒計數(shù)單元值等于10?毫秒計數(shù)單元清零,秒的個位計數(shù)單元值加1N秒的個位等于10嗎?秒計數(shù)單元清零,秒的十位計數(shù)單元值加1N秒的十位等于6嗎?秒十位計數(shù)單元清零,分的計數(shù)單元值加武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
4小結(jié)
本次能力拓展訓(xùn)練完成的簡易秒表是以單片機(AT89C51)為核心,結(jié)合相關(guān)的元器件,再配以相應(yīng)的軟件,達到實現(xiàn)秒表的功能。通過這次能力拓展訓(xùn)練,我對單片機有了更深入的理解,對單片機的硬件設(shè)計、軟件設(shè)計以及硬件電路的工作原理也都有了新一層的理解。這是我第一次編寫單片機程序,通過把課本上的理論與生活中的實際問題結(jié)合起來,使我學(xué)到了很多東西。把程序拆分成幾部分一一進行編寫、調(diào)試,在編程中出現(xiàn)問題時,嚴格謹慎,仔細分析、調(diào)試,一定會從中發(fā)現(xiàn)錯誤,克服困難,同時也使我意識到了自己對于單片機方面的知識知道的太少了,對于書本上的很多知識還不能夠靈活運用,還有很多需要學(xué)習(xí)的地方。
這次能力拓展訓(xùn)練使我感受到了理論與實際相結(jié)合的目的及其重要意義,不但使我對單片機有了更深刻的理解,還提高了我動手查閱資料的能力還鍛煉了自己獨立思考問題的能力。在完成本次訓(xùn)練的過程中,我查閱了很多參考書及運用自己所掌握的知識完成此次設(shè)計。在進行操作的過程中遇到了許多的問題,通過自己的耐心研究以及與同學(xué)的討論終于得以圓滿的解決種種問題,因此也更加牢固的掌握了這些知識,在今后的學(xué)習(xí)和實踐中也將能夠運用這些知識和技能。在這里我也感謝所有給予我?guī)椭睦蠋熀屯瑢W(xué),希望以后有更多的機會來鍛煉自己,為以后的學(xué)習(xí)、生活打下良好的基礎(chǔ)。同時在這次設(shè)計中也暴露出自己的不足,基礎(chǔ)知識不夠扎實,我會在以后的日子里加以改正來提高自己的綜合能力。
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
參考文獻
[1]康華光.電子技術(shù)基礎(chǔ)-數(shù)字部分(第五版).高等教育出版,201*.1[2]伍時宇.數(shù)字電子技術(shù)基礎(chǔ).清華大學(xué)出版社,201*[3]周惠朝.常用電子元件及典型應(yīng)用.電子工業(yè)出版社,201*
[4]劉修文主編.實用電子電路設(shè)計制作300例.中國電力出版社,201*[5]馬斌.單片機原理及應(yīng)用.人民郵電出版社,201*
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
附錄1程序
AJMPTIMERORG0030H
MAIN:MOVDPTR,#TABLEMOVSP,#50H
MOVTMOD,#01H;定時器T0的工作方式為方式1MOVIE,#82HCLRTR0
CALLCLEARLOOP:CALLSCANKEYCALLDISPMOVA,42HCJNEA,#09,E3MOVA,41HCJNEA,#05,E3MOVA,40HCJNEA,#09,E3MOVA,3FHCJNEA,#09,E3CLRTR0
CALLCLEARE3:AJMPLOOP
CLEAR:MOVA,#00HMOVR1,#3FHE2:MOV@R1,AINCR1
CJNER1,#43H,E2MOVR7,#00HRET
;對計分、秒、毫秒計數(shù)單元清零;調(diào)用按鍵掃描子程序;調(diào)用顯示子程序
;判斷定時時間是否到9分59秒;時間到了9分59秒關(guān)閉定時器并自動回零;對分、秒、毫秒計數(shù)單元清010
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
SCANKEY:PUSHA
JBP3.0,KEYEND;判斷按鍵SB是否按下?CALLDELAY_10MS;延時消抖INCR7;按鍵次數(shù)寄存器加1MOVA,R7
CJNEA,#01,STOP;是第1次按下嗎?SETBTR0AJMPKEYEND
STOP:CJNEA,#02,RESETCLRTR0AJMPKEYEND
RESET:CJNEA,#03,KEYENDCALLCLEARKEYEND:POPARET顯示子程序:
DISP:CLRAMOVR0,#3FHMOVR2,#08HMOVR3,#04
E1:MOVA,@R0MOVCA,@A+DPTRMOVP2,#00HMOVP1,AMOVA,R2MOVP2,A
MOVR6,#255DJNZR6,$INCR0
;啟動秒表計時;是第2次按下嗎;;秒表停止計時;是第3次按下嗎?;秒表復(fù)位;讀取分、秒、毫秒計數(shù)單元的值;查表找跟計數(shù)值相對應(yīng)的顯示段碼;消隱;顯示時間11
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
RRAMOVR2,ADJNZR3,E1RET中斷子程序:
TIMER:PUSHA
MOVTH0,#3CHMOVTL0,#0B0H
INC43HMOVA,43H
CJNEA,#02,END_TIMEMOV43H,#00HINC3FHMOVA,3FH
CJNEA,#10,END_TIMEMOV3FH,#00HINC40HMOVA,40H
CJNEA,#10,END_TIMEMOV40H,#00HINC41HMOVA,41H
CJNEA,#06,END_TIMEMOV41H,#00HINC42HEND_TIME:POPARETI
DELAY_10MS:MOVR5,#50D1:MOVR4,#100
;送定時50ms的初值;中斷次數(shù)單元加1;是否中斷了2次?;中斷次數(shù)單元清零
;中斷了2次,0.1S(毫秒)計數(shù)單元加1;到了1秒嗎?;到了1秒,毫秒計數(shù)單元清零;秒的個位計數(shù)單元加1;到了10秒嗎?
;到了10秒,秒個位計數(shù)單元清零;秒的十位計數(shù)單元加1;到了60秒嗎?
;到了60秒,秒的十位計數(shù)單元清零;分計數(shù)單元加1武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
DJNZR4,$DJNZR5,D1RET
TABLE:DB3FH,06H,05BH,4FH,66H,6DH,7DHDB07H,7FH,6FHEND
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
附錄2所需元件清單元件名稱74LS1410K電阻AT89C517SEG-MPX4-CC按鍵導(dǎo)線
14元件數(shù)量41111若干
友情提示:本文中關(guān)于《簡易秒表》給出的范例僅供您參考拓展思維使用,簡易秒表:該篇文章建議您自主創(chuàng)作。
來源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問題,請聯(lián)系我們及時刪除。