簡(jiǎn)易秒表
學(xué)號(hào):課程名稱:?jiǎn)纹瑱C(jī)與嵌入式系統(tǒng)基礎(chǔ)與實(shí)訓(xùn)姓名:班級(jí):上機(jī)內(nèi)容:簡(jiǎn)易秒表上機(jī)實(shí)驗(yàn)性質(zhì):□綜合性實(shí)驗(yàn)√設(shè)計(jì)性實(shí)驗(yàn)□驗(yàn)證實(shí)驗(yàn)實(shí)驗(yàn)時(shí)間:201*年5月21日實(shí)驗(yàn)地點(diǎn):實(shí)驗(yàn)設(shè)備:計(jì)算機(jī)實(shí)驗(yàn)報(bào)告:(包括:目的、方法、原理、結(jié)果或?qū)嶒?yàn)小結(jié)等)。一、實(shí)驗(yàn)?zāi)康模?、掌握單片機(jī)外部中斷的原理及用法;2、掌握單片機(jī)定時(shí)器中斷的原理及用法。二、實(shí)驗(yàn)內(nèi)容:K5鍵做啟動(dòng)停止秒表(外部中斷0),K6鍵做秒表歸零(外部中斷1),4位數(shù)碼管動(dòng)態(tài)掃描顯示(定時(shí)器中斷0),最大計(jì)數(shù)值9999秒。要求先進(jìn)行仿真,而后下載到實(shí)驗(yàn)箱中觀察實(shí)際效果。三、實(shí)驗(yàn)設(shè)備及器件1、ME850單片機(jī)實(shí)驗(yàn)箱(包含芯片及連接線等)2、PC機(jī)四、實(shí)驗(yàn)步驟1、根據(jù)實(shí)驗(yàn)要求,設(shè)計(jì)出實(shí)驗(yàn)流程圖如圖1所示:2、用KeiluVision4根據(jù)實(shí)驗(yàn)要求寫出相應(yīng)程序,程序代碼如下所示:#definecount_M2250#defineTH_M2(256-count_M2)#defineTL_M2(256-count_M2)intcount_T1=0;//計(jì)算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;//掃描信號(hào)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計(jì)數(shù)值高8位、低8位TR0=0;//不啟動(dòng)T0TH1=TH_M2;TL1=TL_M2;//設(shè)置T1自動(dòng)加載值、計(jì)數(shù)值TR1=1;//啟動(dòng)T1P3=0xff;//設(shè)置K5/K6輸入while(1);}(接下)開始聲明變量設(shè)置中斷、定時(shí)器,啟動(dòng)掃描定時(shí)器,開啟Timer0定時(shí)nonoTR1=1TR0=1yesyes啟動(dòng)T0定時(shí)器啟動(dòng)T1定時(shí)器T0中斷子程序T_IST1中斷子程序T_4ms重設(shè)定時(shí)值no32次no次20yes重新計(jì)數(shù)yes重新計(jì)數(shù),秒數(shù)加1no超過千位數(shù)?no60秒?yesyes從個(gè)位數(shù)開始秒數(shù)歸0輸出數(shù)字信號(hào)填入顯示區(qū)輸出掃描信號(hào)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文件下載到實(shí)驗(yàn)箱的單片機(jī)內(nèi),觀察效果。顯然,看到實(shí)驗(yàn)結(jié)果:數(shù)碼管上的數(shù)字從1開始計(jì)數(shù),直到計(jì)數(shù)到9999時(shí)返回為0。當(dāng)按下K5鍵時(shí)開始計(jì)時(shí),按下K6鍵時(shí)值歸為0。五、實(shí)驗(yàn)小結(jié):通過這次實(shí)驗(yàn)讓我了解和掌握了單片機(jī)外部中斷的原理及用法以及定時(shí)器中斷的原理及用法。在這次試驗(yàn)中,我深刻感受到了使用中斷來寫程序,能給程序帶來巨大的好處。不僅能使程序簡(jiǎn)結(jié),而且使程序的條理十分清楚。節(jié)省CPU的空間,加快程序的執(zhí)行速度。任課教師評(píng)語:教師簽字:年月日注:每學(xué)期至少有一次設(shè)計(jì)性實(shí)驗(yàn)。每學(xué)期結(jié)束請(qǐng)任課教師按時(shí)按量統(tǒng)一交到實(shí)驗(yàn)中心處。實(shí)驗(yàn)報(bào)告A4紙雙面打印。
擴(kuò)展閱讀:簡(jiǎn)易秒表的設(shè)計(jì)
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
簡(jiǎn)易秒表的設(shè)計(jì)
1設(shè)計(jì)意義及要求
1.1簡(jiǎn)易秒表的設(shè)計(jì)意義
簡(jiǎn)易秒表的設(shè)計(jì)是在我們學(xué)習(xí)了單片機(jī)技術(shù)之后的一次檢測(cè)。在已學(xué)內(nèi)容的基礎(chǔ)上熟
練掌握,對(duì)未曾學(xué)習(xí)過的內(nèi)容加以了解,從多個(gè)角度更加深刻理解和掌握單片機(jī)的理論與運(yùn)用。通過本次設(shè)計(jì),能夠提高大家對(duì)自己電工電子設(shè)計(jì)的興趣與了解,以更好的理解本專業(yè),從而在今后的學(xué)習(xí)中打下一個(gè)很好的基礎(chǔ)。
1.2簡(jiǎn)易秒表的設(shè)計(jì)要求
1)利用單片機(jī)作為主控制器實(shí)現(xiàn)電子秒表,用4位LED數(shù)碼管顯示時(shí)間。2)設(shè)置外部按鍵SB,當(dāng)按鍵SB第一次按下時(shí)啟動(dòng)秒表開始計(jì)時(shí);當(dāng)?shù)诙伟聪掳存IS1時(shí)秒表停止計(jì)時(shí),當(dāng)?shù)谌伟聪掳存IS1時(shí)秒表回零;即用一個(gè)按鍵S1來控制秒表的啟動(dòng)、停止和回零功能。
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
2簡(jiǎn)易秒表硬件電路設(shè)計(jì)
采用ATMEL公司生產(chǎn)的AT89C51單片機(jī)控制器,用4位共陰LED數(shù)碼管顯示時(shí)間,為了節(jié)省單片機(jī)的I/O資源,LED數(shù)碼管采用動(dòng)態(tài)顯示方式,由P2口的低4位輸出位選信號(hào),P1口輸出LED數(shù)碼管的顯示段碼。用非門來提高P2口的驅(qū)動(dòng)能力,使LED管達(dá)到合適的亮度。完成設(shè)計(jì)的仿真電路如圖2-1所示。
圖2-1基于單片機(jī)控制的秒表仿真電路圖
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
3程序設(shè)計(jì)
采用主程序調(diào)用子程序的設(shè)計(jì)方法,主程序首先對(duì)定時(shí)器和有關(guān)寄存器及存儲(chǔ)單元進(jìn)行初始化,調(diào)用按鍵掃描子程序和顯示子程序,判斷計(jì)時(shí)時(shí)間是否到9分59秒。主程序設(shè)計(jì)流程圖如圖3-1所示。
計(jì)時(shí)時(shí)間到了9分59秒嗎?計(jì)數(shù)單元清零
圖3-1主程序設(shè)計(jì)流程圖
開始初始化定時(shí)器將計(jì)數(shù)單元3FH-42H清零,將存放按鍵次數(shù)的寄存器R7清零,將存放位選值的寄存器R2清零,關(guān)閉定時(shí)器。調(diào)用按鍵掃描子程序調(diào)用顯示子程序N3.1定時(shí)初值的計(jì)算
按12MHz的時(shí)鐘頻率計(jì)算,其機(jī)器周期為1s,選用定時(shí)/計(jì)數(shù)器工作方式1,定時(shí)時(shí)間50ms。
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
計(jì)算初值如下:
計(jì)數(shù)值N=定時(shí)/計(jì)數(shù)器最大值M定時(shí)/計(jì)數(shù)器初值X則初值X=MN
機(jī)器周期為TM=12×1/osc=12×1/12×106=1s采用定時(shí)器工作方式1,所以初值為X=21650ms/1us=15536=3CB0H所以TH0=3CH,TL0=B0H
3.2初始化
通過初始化設(shè)定定時(shí)器0工作方式為方式1,開放定時(shí)器0的中斷及總中斷,分別給存放毫秒、秒、分的計(jì)數(shù)單元3FH,40H,41H,42H清零。關(guān)閉定時(shí)/計(jì)數(shù)器T0。給存儲(chǔ)按鍵次數(shù)的寄存器R1清零。
3.3判斷有無鍵按下,并進(jìn)行按鍵處理
因?yàn)橹挥幸粋(gè)與P3.0相連的接獨(dú)立式按鍵,所以用JBP3.0,KEYEND指令來讀按鍵的狀態(tài)。當(dāng)P3.0=0時(shí)則有鍵按下,然后進(jìn)行10ms的延時(shí)消抖,延時(shí)消抖后將存放按鍵次數(shù)的寄存器R7加1,接著判斷R1中的值是多少?如果是1(表示第一次按鍵)則用SETBTR0指令啟動(dòng)定時(shí)器T0;如果是2則用CLRTR0指令關(guān)閉定時(shí)器T0;如果是3則將存放時(shí)間的3FH,40H,41H,42H單元及存放按鍵次數(shù)的R1清零。程序設(shè)計(jì)流程圖如圖3-2所示。
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
開始將累加器A的內(nèi)容壓入堆棧N有鍵按下嗎?Y按鍵延時(shí)消抖按鍵按下次數(shù)處理啟動(dòng)定時(shí)器秒表開始計(jì)數(shù)關(guān)閉定時(shí)器秒表停止計(jì)數(shù)秒表復(fù)位顯示0將堆棧內(nèi)容彈出至累加器A子程序返回圖3-2按鍵確認(rèn)程序設(shè)計(jì)流程圖
3.4顯示子程序設(shè)計(jì)
顯示子程序的主要作用是根據(jù)存放在3FH,40H,41H,42H單元的計(jì)數(shù)值查表找到跟計(jì)數(shù)值對(duì)應(yīng)的段碼,然后送到對(duì)應(yīng)的LED數(shù)碼管進(jìn)行顯示。程序設(shè)計(jì)流程圖如圖3-3所示。
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
根據(jù)計(jì)數(shù)單元的值,通過查表指令,找到跟計(jì)數(shù)值相對(duì)應(yīng)的顯示段碼開始將R0賦初值3FH,R2賦初值08H,R3賦初值4累加器A清零,通過MOVA,@R0指令讀取計(jì)數(shù)單元的值將查表得顯示段碼送顯示器,并從R2讀取位選碼,并送P2口顯示延時(shí)R0加1,準(zhǔn)備讀取下一計(jì)數(shù)單元,修改R2的值,準(zhǔn)備顯示下個(gè)數(shù)碼管4個(gè)數(shù)碼管掃描顯示完嗎?子程序返回
圖3-3顯示子程序流程圖
YN3.5中斷子程序設(shè)計(jì)
本任務(wù)中定時(shí)器T0定時(shí)50ms,每到50ms,T0產(chǎn)生一次中斷,進(jìn)入中斷服務(wù)程序。在中斷服務(wù)程序中,首先將累加器A中內(nèi)容壓入堆棧,保護(hù)好現(xiàn)場(chǎng),接著給T0重裝初值。然后50ms計(jì)數(shù)單元加1,再判斷計(jì)數(shù)單元是否加到2(即0.1s),若沒有則中斷返回;若加到了,則首先50ms計(jì)數(shù)單元清零,接著將毫秒的計(jì)數(shù)單元加1。
再判斷毫秒計(jì)數(shù)單元是否到10(即1s),若沒有則中斷返回;若到了10,則將毫秒計(jì)數(shù)單元清零。然后將秒的個(gè)位計(jì)數(shù)單元加1,秒的個(gè)位計(jì)數(shù)單元加1后判斷是否加到10,若不是則中斷返回;若是則將秒的個(gè)位計(jì)數(shù)單元清零,然后秒的10位計(jì)數(shù)單元加1,再判斷
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
秒的10位計(jì)數(shù)單元是否到6,若不是則中斷返回;若是則將秒的十位清零,分計(jì)數(shù)單元加1。程序設(shè)計(jì)流程圖如圖3-4所示。
中斷返回
圖3-4中斷服務(wù)程序設(shè)計(jì)流程圖
7開始將A中內(nèi)容壓入堆棧,單元43H中的內(nèi)容加1N中斷了2次嗎?中斷次數(shù)單元清零,毫秒計(jì)數(shù)單元值加1N毫秒計(jì)數(shù)單元值等于10?毫秒計(jì)數(shù)單元清零,秒的個(gè)位計(jì)數(shù)單元值加1N秒的個(gè)位等于10嗎?秒計(jì)數(shù)單元清零,秒的十位計(jì)數(shù)單元值加1N秒的十位等于6嗎?秒十位計(jì)數(shù)單元清零,分的計(jì)數(shù)單元值加武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
4小結(jié)
本次能力拓展訓(xùn)練完成的簡(jiǎn)易秒表是以單片機(jī)(AT89C51)為核心,結(jié)合相關(guān)的元器件,再配以相應(yīng)的軟件,達(dá)到實(shí)現(xiàn)秒表的功能。通過這次能力拓展訓(xùn)練,我對(duì)單片機(jī)有了更深入的理解,對(duì)單片機(jī)的硬件設(shè)計(jì)、軟件設(shè)計(jì)以及硬件電路的工作原理也都有了新一層的理解。這是我第一次編寫單片機(jī)程序,通過把課本上的理論與生活中的實(shí)際問題結(jié)合起來,使我學(xué)到了很多東西。把程序拆分成幾部分一一進(jìn)行編寫、調(diào)試,在編程中出現(xiàn)問題時(shí),嚴(yán)格謹(jǐn)慎,仔細(xì)分析、調(diào)試,一定會(huì)從中發(fā)現(xiàn)錯(cuò)誤,克服困難,同時(shí)也使我意識(shí)到了自己對(duì)于單片機(jī)方面的知識(shí)知道的太少了,對(duì)于書本上的很多知識(shí)還不能夠靈活運(yùn)用,還有很多需要學(xué)習(xí)的地方。
這次能力拓展訓(xùn)練使我感受到了理論與實(shí)際相結(jié)合的目的及其重要意義,不但使我對(duì)單片機(jī)有了更深刻的理解,還提高了我動(dòng)手查閱資料的能力還鍛煉了自己獨(dú)立思考問題的能力。在完成本次訓(xùn)練的過程中,我查閱了很多參考書及運(yùn)用自己所掌握的知識(shí)完成此次設(shè)計(jì)。在進(jìn)行操作的過程中遇到了許多的問題,通過自己的耐心研究以及與同學(xué)的討論終于得以圓滿的解決種種問題,因此也更加牢固的掌握了這些知識(shí),在今后的學(xué)習(xí)和實(shí)踐中也將能夠運(yùn)用這些知識(shí)和技能。在這里我也感謝所有給予我?guī)椭睦蠋熀屯瑢W(xué),希望以后有更多的機(jī)會(huì)來鍛煉自己,為以后的學(xué)習(xí)、生活打下良好的基礎(chǔ)。同時(shí)在這次設(shè)計(jì)中也暴露出自己的不足,基礎(chǔ)知識(shí)不夠扎實(shí),我會(huì)在以后的日子里加以改正來提高自己的綜合能力。
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
參考文獻(xiàn)
[1]康華光.電子技術(shù)基礎(chǔ)-數(shù)字部分(第五版).高等教育出版,201*.1[2]伍時(shí)宇.數(shù)字電子技術(shù)基礎(chǔ).清華大學(xué)出版社,201*[3]周惠朝.常用電子元件及典型應(yīng)用.電子工業(yè)出版社,201*
[4]劉修文主編.實(shí)用電子電路設(shè)計(jì)制作300例.中國(guó)電力出版社,201*[5]馬斌.單片機(jī)原理及應(yīng)用.人民郵電出版社,201*
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
附錄1程序
AJMPTIMERORG0030H
MAIN:MOVDPTR,#TABLEMOVSP,#50H
MOVTMOD,#01H;定時(shí)器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
;對(duì)計(jì)分、秒、毫秒計(jì)數(shù)單元清零;調(diào)用按鍵掃描子程序;調(diào)用顯示子程序
;判斷定時(shí)時(shí)間是否到9分59秒;時(shí)間到了9分59秒關(guān)閉定時(shí)器并自動(dòng)回零;對(duì)分、秒、毫秒計(jì)數(shù)單元清010
武漢理工大學(xué)《能力拓展訓(xùn)練》說明書
SCANKEY:PUSHA
JBP3.0,KEYEND;判斷按鍵SB是否按下?CALLDELAY_10MS;延時(shí)消抖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
;啟動(dòng)秒表計(jì)時(shí);是第2次按下嗎;;秒表停止計(jì)時(shí);是第3次按下嗎?;秒表復(fù)位;讀取分、秒、毫秒計(jì)數(shù)單元的值;查表找跟計(jì)數(shù)值相對(duì)應(yīng)的顯示段碼;消隱;顯示時(shí)間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
;送定時(shí)50ms的初值;中斷次數(shù)單元加1;是否中斷了2次?;中斷次數(shù)單元清零
;中斷了2次,0.1S(毫秒)計(jì)數(shù)單元加1;到了1秒嗎?;到了1秒,毫秒計(jì)數(shù)單元清零;秒的個(gè)位計(jì)數(shù)單元加1;到了10秒嗎?
;到了10秒,秒個(gè)位計(jì)數(shù)單元清零;秒的十位計(jì)數(shù)單元加1;到了60秒嗎?
;到了60秒,秒的十位計(jì)數(shù)單元清零;分計(jì)數(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)于《簡(jiǎn)易秒表》給出的范例僅供您參考拓展思維使用,簡(jiǎn)易秒表:該篇文章建議您自主創(chuàng)作。
來源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問題,請(qǐng)聯(lián)系我們及時(shí)刪除。