AT89C51課程設(shè)計(jì)單片機(jī)-搶答器_第1頁
AT89C51課程設(shè)計(jì)單片機(jī)-搶答器_第2頁
AT89C51課程設(shè)計(jì)單片機(jī)-搶答器_第3頁
AT89C51課程設(shè)計(jì)單片機(jī)-搶答器_第4頁
AT89C51課程設(shè)計(jì)單片機(jī)-搶答器_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

..搶答器設(shè)計(jì)內(nèi)容提要:電子智能搶答計(jì)分器在搶答過程中,為了知道哪一組或哪一位選手先答題,必須要設(shè)計(jì)一個(gè)系統(tǒng)來完成這個(gè)任務(wù)。如果在搶答中,靠視覺是很難判斷出哪組先答題。利用單片機(jī)系統(tǒng)來設(shè)計(jì)搶答器,使以上問題得以解決,即使兩組的搶答時(shí)間相差幾微秒,也可分辨出哪組優(yōu)先答題。本設(shè)計(jì)使用AT89C51單片機(jī)來設(shè)計(jì)智能搶答器,組數(shù)可以在八組以內(nèi)任意使用。并且具有倒計(jì)時(shí)和時(shí)間設(shè)置及報(bào)警功能。利用AT89C51單片機(jī)對(duì)信號(hào)進(jìn)行鎖存、顯示等功能。分別從硬件和軟件兩方面闡述了該控制系統(tǒng)的設(shè)計(jì)方法,并經(jīng)過調(diào)試和運(yùn)行使該系統(tǒng)達(dá)到預(yù)期目標(biāo),具有反應(yīng)快、功能齊全、實(shí)用性強(qiáng)的特點(diǎn)。系統(tǒng)總體方案設(shè)計(jì)數(shù)碼管及上拉電阻AT89C數(shù)碼管及上拉電阻AT89C51復(fù)位電路搶答器計(jì)時(shí)時(shí)間調(diào)整及語音報(bào)警獨(dú)立式按鍵鍵盤圖1-1系統(tǒng)框架圖搶答器的工作原理搶答器的工作原理是利用單片機(jī)的定時(shí)器T0、T1中斷完成,其余狀態(tài)循環(huán)調(diào)用顯示子程序,用4個(gè)共陰極LED數(shù)碼管來顯示,用P0口作為數(shù)碼管的八個(gè)段選,用P2口中的P2.0、P2.1、P2.2、作為4個(gè)數(shù)碼管其中3個(gè)位選,P1口接4個(gè)按鍵,提供選手搶答,P3.0-P3.5四個(gè)接四個(gè)按鍵,提供開始、結(jié)束、答題時(shí)間調(diào)整、搶答時(shí)間調(diào)整,加1、減1調(diào)整之用。搶答功能:通過四路按鍵配合程序來實(shí)現(xiàn)搶答功能。當(dāng)主持人按下?lián)尨疰I開始搶答后,此時(shí)任一路按下按鈕均閉鎖其它各路,由程序?qū)︽I盤譯碼并顯示最先按下?lián)尨疰I的路數(shù)及其當(dāng)前時(shí)間。搶答限時(shí):主持人按下?lián)尨疰I后,設(shè)置5秒為搶答時(shí)間<此時(shí)間可在1-99秒之間修改>。若5秒內(nèi)無人搶答,倒計(jì)時(shí)為0時(shí)發(fā)出報(bào)警,說明該搶答題目作廢。此時(shí)閉鎖所有搶答按鍵,只有當(dāng)主持人再次按下?lián)尨疰I開始下一次搶答方可搶答。答題限時(shí):當(dāng)選手按下按鈕時(shí),啟動(dòng)倒計(jì)時(shí)<此倒計(jì)時(shí)時(shí)間可在1~99秒之間修改>,倒計(jì)時(shí)為0時(shí)發(fā)出報(bào)警,說明答題時(shí)間到。系統(tǒng)硬件設(shè)計(jì)1、控制系統(tǒng)及所需元件芯片的選擇搶答器電路的核心是89C51單片機(jī),其內(nèi)部帶有4KB的FLASHROM,無需外擴(kuò)程序存儲(chǔ)器;搶答器沒有大量的運(yùn)算和暫存數(shù)據(jù)現(xiàn)有的128B篇內(nèi)RAM已經(jīng)能滿足容量需求,故不需外擴(kuò)片外RAM,系統(tǒng)配有8位8段數(shù)碼顯示管,管采用共陰數(shù)碼管,作為時(shí)鐘的顯示輸出。控制系統(tǒng)主要由單片機(jī)應(yīng)用電路、存儲(chǔ)器、接口電路、顯示接口電路組成;其中單片機(jī)采用的是AT89C51單片機(jī)使系統(tǒng)工作的核心,它主要負(fù)責(zé)控制各個(gè)部分協(xié)調(diào)工作。所需元件:該系統(tǒng)的核心器件是AT89C51,其外部接上復(fù)位電路、上拉電阻、數(shù)碼管、按鈕及揚(yáng)聲器。元件為:晶體振蕩管X1,電容C1、C2、C3,電阻RP1,P3.0和P3.1有裁判控制分別是搶答停止和開始鍵;P1.0-P1.7是8組搶答的輸入口;P2.0-P2.3口為數(shù)碼管的段選口;位選口用的是P0.0-P0.6口輸出,外部中斷0、1和P3.3,P3/4為搶答記時(shí)調(diào)整口,實(shí)現(xiàn)的對(duì)個(gè)隊(duì)進(jìn)行計(jì)時(shí),并且加減調(diào)整,外部中斷0,1實(shí)現(xiàn)了答題時(shí)間調(diào)整。P3.4、P3.5分別實(shí)現(xiàn)了時(shí)間的加一和減一;P3.6為蜂鳴器控制口。智能搶答器用單片機(jī)來設(shè)計(jì)制作完成,由于其功能的實(shí)現(xiàn)主要通過軟件編程來完成,采用單片機(jī)AT89C51,它是低功耗、高性能的CMOS型8位單片機(jī)。片內(nèi)帶有4KB的Flash存儲(chǔ)器,并允許在系統(tǒng)內(nèi)改寫或用編程器編程。該智力競(jìng)賽搶答器的準(zhǔn)確度很高,其誤差主要由晶振自身的誤差所造成。AT89C51單片機(jī)由微處理器,存儲(chǔ)器,I/O口以及特殊功能寄存器SFR等部分構(gòu)成。其存儲(chǔ)器在物理上設(shè)計(jì)成程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器兩個(gè)獨(dú)立的空間,片內(nèi)程序存儲(chǔ)器的容量為4KB,片內(nèi)數(shù)據(jù)存儲(chǔ)器為128個(gè)字節(jié)。89C51單片機(jī)有4個(gè)8位的并行I/O口:P0口,P1口,P2口和P3口。各個(gè)接口均由接口鎖存器,輸出驅(qū)動(dòng)器和輸入緩沖器組成。P1口是唯一的但功能口,僅能用作通用的數(shù)據(jù)輸入/輸出口。P3口是雙功能口除了具有數(shù)據(jù)輸入/輸出功能外,每條接口還具有不同的第二功能,如P3.0是串行輸入口線,P3.1口是串行輸出口線。在需要外部程序存儲(chǔ)存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器擴(kuò)展時(shí),P0可作為分時(shí)復(fù)用的低8位地址/數(shù)據(jù)總線,P2口可作為高8位的地址總線。P3口也可作為AT89C51的一些特殊功能口,同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。復(fù)位電路的設(shè)計(jì)圖2-1復(fù)位電路原理圖該復(fù)位電路采用上電自動(dòng)復(fù)位和手動(dòng)復(fù)位兩種復(fù)位方式,圖中網(wǎng)絡(luò)標(biāo)號(hào)所指9連接到單片機(jī)的復(fù)位引腳。要實(shí)現(xiàn)復(fù)位只需在,51系列單片機(jī)的RESET引腳上加上5ms的高電平就可以了。上電復(fù)位是利用電容的充電來實(shí)現(xiàn)的,即上電瞬間RESET端的電位與Vcc相同,隨著電容上儲(chǔ)能增加,電容電壓也逐漸增大,充電電流減小,RESET端的電位。這樣就會(huì)建立一個(gè)脈沖電壓,調(diào)節(jié)電容與電阻的大小可對(duì)脈沖的持續(xù)時(shí)間進(jìn)行調(diào)節(jié)。通常若采用12MHz的晶振時(shí),復(fù)位元件參數(shù)為22μF的電解電容和10kΩ的電阻。按鈕復(fù)位電路是通過按下復(fù)位按鈕時(shí),電源對(duì)RESET端維持兩個(gè)機(jī)器周期的高電平實(shí)現(xiàn)復(fù)位的。3.4晶振電路的設(shè)計(jì)MSC-51單片機(jī)的定時(shí)控制功能是用時(shí)鐘電路和振蕩器完成的,而根據(jù)硬件電路的不同,連接方式分為內(nèi)部時(shí)鐘方式和外部時(shí)鐘方式。本設(shè)計(jì)中采用內(nèi)部時(shí)鐘方式。 單片機(jī)內(nèi)部有一個(gè)反相放大器,XTAL1、XTAL2分別為反相放大器的輸入端和輸出端,外接定時(shí)反饋元件組成振蕩器〔內(nèi)部時(shí)鐘方式,產(chǎn)生時(shí)鐘送至單片機(jī)內(nèi)部各元件。時(shí)鐘頻率越高,單片機(jī)控制器的控制節(jié)拍就越快,運(yùn)算速度也就越快。一般來說單片機(jī)內(nèi)部有一個(gè)帶反饋的線性反相放大器,外界晶振〔或接陶瓷振蕩器和電容就可組成振蕩器,如圖2-2所示。加電以后延時(shí)一段時(shí)間〔約10ms振蕩器產(chǎn)生時(shí)鐘,不受軟件控制,圖中Y1為晶振,震蕩產(chǎn)生的時(shí)鐘頻率主要由Y1確定。電容C1,C2的作用有兩個(gè):一是幫助振蕩器起振,二是對(duì)振蕩器的頻率起微調(diào)作用,典型值為30pF。晶振電路的設(shè)計(jì)如圖2-2所示:圖2-2晶振電路原理圖3.5數(shù)碼顯示管的選擇數(shù)碼顯示管用來作為時(shí)間的顯示輸出,一般用7段數(shù)碼顯示管。本次設(shè)計(jì)中采用7段共陰數(shù)碼顯示管應(yīng)用簡(jiǎn)單、可靠性高、成本低,作為顯示輸出。連接時(shí)段選信號(hào)接在P0口的P0.0~P0.6七個(gè)I/O口上,P1口是準(zhǔn)雙向I/O接口在輸出驅(qū)動(dòng)部分具有驅(qū)動(dòng)4個(gè)TTL負(fù)載的能力,即輸出電流不大于400μA,所以在接電阻時(shí)選擇接510Ω限流電阻。而在位選方面采用單片機(jī)P2口的P2.0~P2.2三個(gè)I/O口作為位選信號(hào)的輸出口。軟件設(shè)計(jì)4.1主程序的設(shè)計(jì)此程序的及時(shí)采用定時(shí)器T0和T1中斷完成,其余狀態(tài)循環(huán)調(diào)用顯示子程序。系統(tǒng)主程序流程圖如圖3-1所示。主程序開始主程序開始各控制單元賦初值各控制單元賦初值初始化初始化調(diào)用顯示程序調(diào)用顯示程序調(diào)用鍵盤掃描程序調(diào)用鍵盤掃描程序調(diào)用鍵值處理程序調(diào)用鍵值處理程序圖3-1系統(tǒng)主程序流程圖4.2顯示子程序的設(shè)計(jì)由于采用軟件動(dòng)態(tài)掃描實(shí)現(xiàn)數(shù)據(jù)顯示,顯示用十進(jìn)制BCD碼的數(shù)據(jù)對(duì)應(yīng)段碼存放在ROM表中。顯示時(shí),先取出70H~75H某一地址中的數(shù)據(jù),然后查得對(duì)應(yīng)的顯示段碼從P0口輸出。P2口將對(duì)應(yīng)的數(shù)碼管選中,就能顯示該地址單元的數(shù)據(jù)值。4.3定時(shí)器T0、T1中斷服務(wù)程序的設(shè)計(jì)定時(shí)器T0用于響鈴程序,定時(shí)器T1用于計(jì)時(shí)程序。當(dāng)答題剩余5秒種時(shí)P3.6口不斷取反使喇叭發(fā)出一定頻率的聲音,提示選手。中斷服務(wù)程序流程圖如圖3-2所示。定時(shí)中斷服務(wù)程序開始定時(shí)中斷服務(wù)程序開始關(guān)中斷、恢復(fù)定時(shí)初值關(guān)中斷、恢復(fù)定時(shí)初值開中斷、修改計(jì)數(shù)單位開中斷、修改計(jì)數(shù)單位到1秒?N到1秒?Y置計(jì)數(shù)初值設(shè)備置計(jì)數(shù)初值設(shè)備修改到計(jì)時(shí)單位修改到計(jì)時(shí)單位到計(jì)時(shí)結(jié)束?到計(jì)時(shí)結(jié)束?N恢復(fù)初值Y恢復(fù)初值中斷返回中斷返回圖3-2中斷服務(wù)程序流程圖4.4程序清單定時(shí)器T1時(shí)間初值設(shè)50ms時(shí)間初值為Z,Z的計(jì)算方法為〔216-Z×12=12×50×103,結(jié)果Z=15536D=3CB0HOKEQU20H;搶答開始標(biāo)志位RINGEQU22H;響鈴標(biāo)志位ORG0000HAJMPMAINORG0003HAJMPINT0SUBORG000BHAJMPT0INTORG0013HAJMPINT1SUBORG001BHAJMPT1INTORG0040HMAIN:MOVR1,#30;初設(shè)搶答時(shí)間為30sMOVR2,#60;初設(shè)答題時(shí)間為60sMOVTMOD,#11H;設(shè)置定時(shí)器T0/T1模式1MOVTH0,#0F0HMOVTL0,#0FFH;越高發(fā)聲頻率越高,越尖MOVTH1,#3CHMOVTL1,#0B0H;50ms為一次溢出中斷SETBEASETBET0SETBET1SETBEX0SETBEX1;允許四個(gè)中斷,T0/T1/INT0/INT1CLROKCLRRINGSETBTR1SETBTR0;一開始就運(yùn)行定時(shí)器,以開始顯示FFF=====查詢程序=====START:MOVR5,#0BHMOVR4,#0BHMOVR3,#0BHACALLDISPLAY;未開始搶答時(shí)候顯示FFFP3.0,NEXT;dddddddACALLDELAYP3.0,NEXTACALLBARK;按鍵發(fā)聲MOVA,R1MOVR6,A;送R1->R6,因?yàn)镽1中保存了搶答時(shí)間SETBOK;搶答標(biāo)志位,用于COUNT只程序中判斷是否查詢搶答MOVR3,#0AH;搶答只顯示計(jì)時(shí),滅號(hào)數(shù)AJMPCOUNT;進(jìn)入倒計(jì)時(shí)程序,"查詢有效搶答的程序"在COUNT里面NEXT:JNBP1.0,FALSE1JNBP1.1,FALSE2JNBP1.2,FALSE3JNBP1.3,FALSE4AJMPSTARTTZ1:JMPFALSE7TZ2:JMPFALSE8=====非法搶答處理程序=====FALSE1:ACALLBARK;;按鍵發(fā)聲MOVR3,#01HAJMPERRORFALSE2:ACALLBARKMOVR3,#02HAJMPERRORFALSE3:ACALLBARKMOVR3,#03HAJMPERRORFALSE4:ACALLBARKMOVR3,#04HAJMPERROR=====INT0<搶答時(shí)間R1調(diào)整程序>=====INT0SUB:MOVA,R1MOVB,#0AHDIVABMOVR5,AMOVR4,BMOVR3,#0AHACALLDISPLAY;先在兩個(gè)時(shí)間LED上顯示R1JNBP3.4,INC0;P3.4為+1s鍵,如按下跳到INCOJNBP3.5,DEC0;P3.5為-1s鍵,如按下跳到DECOJNBP3.1,BACK0;P3.1為確定鍵,如按下跳到BACKOAJMPINT0SUBINC0:MOVA,R1CJNEA,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。MOVR1,#00HACALLDELAY1AJMPINT0SUBADD0:INCR1ACALLDELAY1AJMPINT0SUBDEC0:MOVA,R1JZSETR1;如果R1為0,R1就置99DECR1ACALLDELAY1AJMPINT0SUBSETR1:MOVR1,#63HACALLDELAY1AJMPINT0SUBBACK0:RETI=====INT1<回答時(shí)間R2調(diào)整程序>=====INT1SUB:MOVA,R2MOVB,#0AHDIVABMOVR5,AMOVR4,BMOVR3,#0AHACALLDISPLAYJNBP3.4,INC1JNBP3.5,DEC1JNBP3.1,BACK1AJMPINT1SUBINC1:MOVA,R2CJNEA,#63H,ADD1MOVR2,#00HACALLDELAY1AJMPINT1SUBADD1:INCR2ACALLDELAY1AJMPINT1SUBDEC1:MOVA,R2JZSETR2DECR2ACALLDELAY1AJMPINT1SUBSETR2:MOVR2,#63HACALLDELAY1AJMPINT1SUBBACK1:RETI===倒計(jì)時(shí)程序<搶答倒計(jì)時(shí)和回答倒計(jì)時(shí)都跳到改程序>===COUNT:MOVR0,#00H;重置定時(shí)器中斷次數(shù)MOVTH1,#3CHMOVTL1,#0B0H;重置定時(shí)器RECOUNT:MOVA,R6;R6保存了倒計(jì)時(shí)的時(shí)間,之前先將搶答時(shí)間或回答時(shí)間給R6MOVB,#0AHDIVAB;除十分出個(gè)位/十位MOV30H,A;十位存于<30H>MOV31H,B;個(gè)位存于<31H>MOVR5,30H;取十位MOVR4,31H;取個(gè)位MOVA,R6SUBBA,#07HJNCLARGER;大于5s跳到LARGER,小于等于5s會(huì)提醒MOVA,R0CJNEA,#0AH,FULL1s中0.5s向下運(yùn)行CLRRINGAJMPCHECKFULL:CJNEA,#14H,CHECK下面是1s的情況,響并顯示號(hào)數(shù)并清R0,重新計(jì)SETBRINGMOVA,R6JZQUIT;計(jì)時(shí)完畢MOVR0,#00HDECR6;一秒標(biāo)志減1AJMPCHECKLARGER:MOVA,R0CJNEA,#14H,CHECK如果1s向下運(yùn)行,否者跳到查"停/顯示"DECR6;計(jì)時(shí)一秒R6自動(dòng)減1MOVR0,#00HCHECK:JNBP3.1,QUIT;如按下停止鍵退出ACALLDISPLAYOK,ACCOUT如果是搶答倒計(jì)時(shí),如是則查詢搶答,否者跳過查詢繼續(xù)倒數(shù)<這里起到鎖搶答作用>AJMPRECOUNTACCOUT:JNBP1.0,TRUE1JNBP1.1,TRUE2JNBP1.2,TRUE3JNBP1.3,TRUE4JNBP1.4,TRUE5JNBP1.5,TRUE6JNBP1.6,TZ3JNBP1.7,TZ4AJMPRECOUNTTZ3:JMPTRUE7TZ4:JMPTRUE8QUIT:CLROK;如果按下了"停止鍵"執(zhí)行的程序CLRRINGAJMPSTART=====正常搶答處理程序=====TRUE1:ACALLBARK;按鍵發(fā)聲MOVA,R2MOVR6,A;搶答時(shí)間R2送R6MOVR3,#01HCLROK因?yàn)榇痤}的計(jì)時(shí)不再查詢搶答,所以就鎖了搶答AJMPCOUNTTRUE2:ACALLBARKMOVA,R2MOVR6,AMOVR3,#02HCLROKAJMPCOUNTTRUE3:ACALLBARK;MOVA,R2MOVR6,AMOVR3,#03HCLROKAJMPCOUNTTRUE4:ACALLBARK;MOVA,R2MOVR6,AMOVR3,#04HCLROKAJMPCOUNT=====犯規(guī)搶答程序=====ERROR:MOVR0,#00HMOVTH1,#3CHMOVTL1,#0B0HMOV34H,R3;犯規(guī)號(hào)數(shù)暫存與<34H>HERE:MOVA,R0CJNEA,#0AH,FLASH;0.5s向下運(yùn)行->滅并停響CLRRINGMOVR3,#0AHMOVR4,#0AHMOVR5,#0AH;三燈全滅AJMPCHECK1FLASH:CJNEA,#14H,CHECK1下面是1s的情況,響并顯示號(hào)數(shù)并清R0,重新計(jì)SETBRINGMOVR0,#00HMOVR3,34H;取回號(hào)數(shù)MOVR5,#0BHMOVR4,#0BH;顯示FF和號(hào)數(shù)AJMPCHECK1CHECK1:JNBP3.1,QUIT1ACALLDISPLAYAJMPHEREQUIT1:CLRRINGCLROKAJMPSTART=====顯示程序=====DISPLAY:MOVDPTR,#DAT1查表顯示程序,利用P0口做段選碼口輸出/P2低三位做位選碼輸出,MOVA,R3MOVCA,A+DPTRMOVP2,#0feHMOVP0,AACALLDELAYMOVDPTR,#DAT2MOVA,R5MOVCA,A+DPTRMOVP2,#0fdHMOVP0,AACALLDELAYMOVA,R4MOVCA,A+DPTRMOVP2,#0fbHMOVP0,AACALLDELAYRETDAT1:DB00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H;"滅","1

溫馨提示

  • 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)論