AT89C51 課程設計 單片機搶答器_第1頁
AT89C51 課程設計 單片機搶答器_第2頁
AT89C51 課程設計 單片機搶答器_第3頁
AT89C51 課程設計 單片機搶答器_第4頁
AT89C51 課程設計 單片機搶答器_第5頁
已閱讀5頁,還剩12頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、搶答器設計 內容提要:電子智能搶答計分器在搶答過程中,為了知道哪一組或哪一位選手先答題,必須要設計一個系統來完成這個任務。如果在搶答中,靠視覺是很難判斷出哪組先答題。利用單片機系統來設計搶答器,使以上問題得以解決,即使兩組的搶答時間相差幾微秒,也可分辨出哪組優先答題。本設計使用AT89C51單片機來設計智能搶答器,組數可以在八組以內任意使用。并且具有倒計時和時間設置及報警功能。利用AT89C51單片機對信號進行鎖存、顯示等功能。分別從硬件和軟件兩方面闡述了該控制系統的設計方法,并經過調試和運行使該系統達到預期目標,具有反應快、功能齊全、實用性強的特點。一、 系統總體方案設計數碼管及上拉電阻AT

2、89C51復位電路搶答器計時時間調整及語音報警獨立式按鍵鍵盤電子智能搶答計分器在搶答過程中,為了知道哪一組或哪一位選手先答題,必須要設計一個系統來完成這個任務。為了完成這個任務設計時系統能顯示搶答組號、各組計分并能計分顯示以及比賽結束時能發出報警聲三個要求;電子智能搶答計分器主要是由硬件部分和軟件部分構成,硬件和軟件分開設計;系統綜框圖如下:圖1-1 系統框架圖搶答器的工作原理搶答器的工作原理是利用單片機的定時器T0、T1中斷完成,其余狀態循環調用顯示子程序,用4個共陰極LED數碼管來顯示,用P0口作為數碼管的八個段選,用P2口中的P2.0、P2.1、P2.2、作為4個數碼管其中3個位選,P1

3、口接4個按鍵,提供選手搶答,P3.0-P3.5四個接四個按鍵,提供開始、結束、答題時間調整、搶答時間調整,加1、減1調整之用。搶答功能:通過四路按鍵配合程序來實現搶答功能。當主持人按下搶答鍵開始搶答后,此時任一路按下按鈕均閉鎖其它各路,由程序對鍵盤譯碼并顯示最先按下搶答鍵的路數及其當前時間。搶答限時:主持人按下搶答鍵后,設置5秒為搶答時間(此時間可在1-99秒之間修改)。若5秒內無人搶答,倒計時為0時發出報警,說明該搶答題目作廢。此時閉鎖所有搶答按鍵,只有當主持人再次按下搶答鍵開始下一次搶答方可搶答。答題限時:當選手按下按鈕時,啟動倒計時(此倒計時時間可在199秒之間修改),倒計時為0時發出報

4、警,說明答題時間到。二、 系統硬件設計1、控制系統及所需元件芯片的選擇搶答器電路的核心是89C51單片機,其內部帶有4KB的FLASH ROM,無需外擴程序存儲器;搶答器沒有大量的運算和暫存數據現有的128B篇內RAM已經能滿足容量需求,故不需外擴片外RAM,系統配有8位8段數碼顯示管,管采用共陰數碼管,作為時鐘的顯示輸出??刂葡到y主要由單片機應用電路、存儲器、接口電路、顯示接口電路組成;其中單片機采用的是AT89C51單片機使系統工作的核心,它主要負責控制各個部分協調工作。所需元件:該系統的核心器件是AT89C51,其外部接上復位電路、上拉電阻、數碼管、按鈕及揚聲器。元件為:晶體振蕩管X1,

5、電容C1、C2、C3,電阻RP1,P3.0和P3.1有裁判控制分別是搶答停止和開始鍵;P1.0-P1.7是8組搶答的輸入口;P2.0-P2.3口為數碼管的段選口;位選口用的是P0.0-P0.6口輸出,外部中斷0、1和P3.3,P3/4為搶答記時調整口,實現的對個隊進行計時,并且加減調整,外部中斷0,1實現了答題時間調整。P3.4、P3.5分別實現了時間的加一和減一;P3.6為蜂鳴器控制口。智能搶答器用單片機來設計制作完成,由于其功能的實現主要通過軟件編程來完成,采用單片機AT89C51,它是低功耗、高性能的CMOS型8位單片機。片內帶有4KB的Flash存儲器,并允許在系統內改寫或用編程器編程

6、。該智力競賽搶答器的準確度很高,其誤差主要由晶振自身的誤差所造成。AT89C51單片機由微處理器,存儲器,I/O口以及特殊功能寄存器SFR等部分構成。其存儲器在物理上設計成程序存儲器和數據存儲器兩個獨立的空間,片內程序存儲器的容量為4KB,片內數據存儲器為128個字節。89C51單片機有4個8位的并行I/O口:P0口,P1口,P2口和P3口。各個接口均由接口鎖存器,輸出驅動器和輸入緩沖器組成。P1口是唯一的但功能口,僅能用作通用的數據輸入/輸出口。P3口是雙功能口除了具有數據輸入/輸出功能外,每條接口還具有不同的第二功能,如P3.0是串行輸入口線,P3.1口是串行輸出口線。在需要外部程序存儲存

7、儲器和數據存儲器擴展時,P0可作為分時復用的低8位地址/數據總線,P2口可作為高8位的地址總線。P3口也可作為AT89C51的一些特殊功能口,同時為閃爍編程和編程校驗接收一些控制信號。復位電路的設計圖2-1 復位電路原理圖該復位電路采用上電自動復位和手動復位兩種復位方式,圖中網絡標號所指9連接到單片機的復位引腳。要實現復位只需在,51系列單片機的RESET引腳上加上5ms的高電平就可以了。上電復位是利用電容的充電來實現的,即上電瞬間RESET端的電位與Vcc相同,隨著電容上儲能增加,電容電壓也逐漸增大,充電電流減小,RESET端的電位。這樣就會建立一個脈沖電壓,調節電容與電阻的大小可對脈沖的持

8、續時間進行調節。通常若采用12MHz的晶振時,復位元件參數為22F的電解電容和10k的電阻。按鈕復位電路是通過按下復位按鈕時,電源對RESET端維持兩個機器周期的高電平實現復位的。3.4 晶振電路的設計MSC-51單片機的定時控制功能是用時鐘電路和振蕩器完成的,而根據硬件電路的不同,連接方式分為內部時鐘方式和外部時鐘方式。本設計中采用內部時鐘方式。單片機內部有一個反相放大器,XTAL1、XTAL2分別為反相放大器的輸入端和輸出端,外接定時反饋元件組成振蕩器(內部時鐘方式),產生時鐘送至單片機內部各元件。時鐘頻率越高,單片機控制器的控制節拍就越快,運算速度也就越快。一般來說單片機內部有一個帶反饋

9、的線性反相放大器,外界晶振(或接陶瓷振蕩器)和電容就可組成振蕩器,如圖2-2所示。加電以后延時一段時間(約10ms)振蕩器產生時鐘,不受軟件控制,圖中Y1為晶振,震蕩產生的時鐘頻率主要由Y1確定。電容C1,C2的作用有兩個:一是幫助振蕩器起振,二是對振蕩器的頻率起微調作用,典型值為30pF。晶振電路的設計如圖2-2所示:圖2-2 晶振電路原理圖3.5數碼顯示管的選擇數碼顯示管用來作為時間的顯示輸出,一般用7段數碼顯示管。本次設計中采用7段共陰數碼顯示管應用簡單、可靠性高、成本低,作為顯示輸出。連接時段選信號接在P0口的P0.0P0.6七個I/O口上,P1口是準雙向I/O接口在輸出驅動部分具有驅

10、動4個TTL負載的能力,即輸出電流不大于400A,所以在接電阻時選擇接510限流電阻。而在位選方面采用單片機P2口的P2.0P2.2三個I/O口作為位選信號的輸出口。軟件設計4.1 主程序的設計此程序的及時采用定時器T0和T1中斷完成,其余狀態循環調用顯示子程序。系統主程序流程圖如圖3-1所示。主程序開始         各控制單元賦初值初始化調用顯示程序調用鍵盤掃描程序調用鍵值處理程序圖3-1 系統主程序流程圖4.2顯示子程序的設計由于采用軟件動態掃描實現數據顯示,顯示用十進制BCD碼的數據對應段碼存放

11、在ROM表中。顯示時,先取出70H75H某一地址中的數據,然后查得對應的顯示段碼從P0口輸出。P2口將對應的數碼管選中,就能顯示該地址單元的數據值。4.3定時器T0、T1中斷服務程序的設計定時器T0用于響鈴程序,定時器T1用于計時程序。當答題剩余5秒種時P3.6口不斷取反使喇叭發出一定頻率的聲音,提示選手。中斷服務程序流程圖如圖3-2所示。定時中斷服務程序開始關中斷、恢復定時初值開中斷、修改計數單位到1秒? N Y置計數初值設備修改到計時單位到計時結束? N恢復初值 Y中斷返回圖3-2 中斷服務程序流程圖4.4程序清單定時器T1時間初值設50ms時間初值為Z,Z的計算方法為(216- Z)&#

12、215;12=12×50×103,結果Z=15536D=3CB0HOK EQU 20H ;搶答開始標志位RING EQU 22H ;響鈴標志位ORG 0000HAJMP MAINORG 0003HAJMP INT0SUBORG 000BHAJMP T0INTORG 0013HAJMP INT1SUBORG 001BHAJMP T1INTORG 0040HMAIN: MOV R1,#30 ;初設搶答時間為30sMOV R2,#60 ;初設答題時間為60sMOV TMOD,#11H ;設置定時器T0/T1模式1MOV TH0,#0F0HMOV TL0,#0FFH ;越高發聲頻率

13、越高,越尖MOV TH1,#3CHMOV TL1,#0B0H ;50ms為一次溢出中斷SETB EASETB ET0SETB ET1SETB EX0SETB EX1 ;允許四個中斷,T0/T1/INT0/INT1CLR OKCLR RINGSETB TR1SETB TR0 ;一開始就運行定時器,以開始顯示FFF=查詢程序=START: MOV R5,#0BH MOV R4,#0BH MOV R3,#0BHACALL DISPLAY ;未開始搶答時候顯示FFFJB P3.0,NEXT;dddddddACALL DELAYJB P3.0,NEXTACALL BARK ;按鍵發聲MOV A,R1MO

14、V R6,A ;送R1->R6,因為R1中保存了搶答時間SETB OK ;搶答標志位,用于COUNT只程序中判斷是否查詢搶答MOV R3,#0AH ;搶答只顯示計時,滅號數AJMP COUNT ;進入倒計時程序,"查詢有效搶答的程序"在COUNT里面NEXT: JNB P1.0,FALSE1 JNB P1.1,FALSE2 JNB P1.2,FALSE3 JNB P1.3,FALSE4AJMP STARTTZ1: JMP FALSE7TZ2: JMP FALSE8=非法搶答處理程序=FALSE1: ACALL BARK; ; 按鍵發聲MOV R3,#01H AJMP

15、ERRORFALSE2: ACALL BARKMOV R3,#02H AJMP ERRORFALSE3: ACALL BARKMOV R3,#03H AJMP ERRORFALSE4: ACALL BARKMOV R3,#04H AJMP ERROR=INT0(搶答時間R1調整程序)=INT0SUB:MOV A,R1 MOV B,#0AH DIV AB MOV R5,A MOV R4,BMOV R3,#0AHACALL DISPLAY ;先在兩個時間LED上顯示R1JNB P3.4,INC0 ; P3.4為+1s鍵,如按下跳到INCOJNB P3.5,DEC0 ; P3.5為-1s鍵,如按下跳

16、到DECOJNB P3.1,BACK0 ; P3.1為確定鍵,如按下跳到BACKOAJMP INT0SUBINC0: MOV A,R1CJNE A,#63H,ADD0 ;如果不是99,R2加1,如果加到99,R1就置0,重新加起。MOV R1,#00HACALL DELAY1AJMP INT0SUBADD0: INC R1ACALL DELAY1AJMP INT0SUBDEC0: MOV A,R1JZ SETR1 ;如果R1為0, R1就置99DEC R1ACALL DELAY1AJMP INT0SUBSETR1: MOV R1,#63H ACALL DELAY1 AJMP INT0SUBBA

17、CK0: RETI =INT1(回答時間R2調整程序)= INT1SUB:MOV A,R2 MOV B,#0AH DIV ABMOV R5,AMOV R4,BMOV R3,#0AHACALL DISPLAYJNB P3.4,INC1JNB P3.5,DEC1JNB P3.1,BACK1AJMP INT1SUBINC1: MOV A,R2 CJNE A,#63H,ADD1 MOV R2,#00H ACALL DELAY1AJMP INT1SUBADD1: INC R2 ACALL DELAY1 AJMP INT1SUBDEC1: MOV A,R2 JZ SETR2 DEC R2 ACALL DE

18、LAY1 AJMP INT1SUBSETR2: MOV R2,#63H ACALL DELAY1 AJMP INT1SUBBACK1: RETI =倒計時程序(搶答倒計時和回答倒計時都跳到改程序)=COUNT: MOV R0,#00H ;重置定時器中斷次數 MOV TH1,#3CH MOV TL1,#0B0H ;重置定時器RECOUNT:MOV A,R6;R6 保存了倒計時的時間,之前先將搶答時間或回答時間給R6 MOV B,#0AH DIV AB ;除十分出個位/十位 MOV 30H,A ;十位存于(30H) MOV 31H,B ;個位存于(31H) MOV R5,30H ; 取十位 MOV

19、 R4,31H ; 取個位 MOV A,R6 SUBB A,#07H JNC LARGER ; 大于5s跳到LARGER,小于等于5s會提醒 MOV A,R0 CJNE A,#0AH,FULL 1s中0.5s向下運行 CLR RING AJMP CHECKFULL: CJNE A,#14H,CHECK 下面是1s的情況,響并顯示號數并清R0,重新計 SETB RING MOV A,R6 JZ QUIT ;計時完畢 MOV R0,#00H DEC R6 ;一秒標志減1 AJMP CHECKLARGER: MOV A,R0 CJNE A,#14H,CHECK 如果1s向下運行,否者跳到查"

20、;停/顯示" DEC R6 ;計時一秒R6自動減1 MOV R0,#00HCHECK: JNB P3.1,QUIT ;如按下停止鍵退出 ACALL DISPLAY JB OK,ACCOUT 如果是搶答倒計時,如是則查詢搶答,否者跳過查詢繼續倒數(這里起到鎖搶答作用) AJMP RECOUNTACCOUT:JNB P1.0,TRUE1 JNB P1.1,TRUE2 JNB P1.2,TRUE3 JNB P1.3,TRUE4 JNB P1.4,TRUE5 JNB P1.5,TRUE6 JNB P1.6,TZ3 JNB P1.7,TZ4 AJMP RECOUNTTZ3: JMP TRUE7

21、TZ4: JMP TRUE8 QUIT: CLR OK ; 如果按下了"停止鍵"執行的程序 CLR RING AJMP START=正常搶答處理程序=TRUE1: ACALL BARK ;按鍵發聲 MOV A,R2 MOV R6,A ; 搶答時間R2送R6 MOV R3,#01H CLR OK 因為答題的計時不再查詢搶答,所以就鎖了搶答 AJMP COUNTTRUE2:ACALL BARK MOV A,R2 MOV R6,A MOV R3,#02H CLR OK AJMP COUNTTRUE3:ACALL BARK; MOV A,R2 MOV R6,A MOV R3,#03

22、H CLR OK AJMP COUNTTRUE4:ACALL BARK; MOV A,R2 MOV R6,A MOV R3,#04H CLR OK AJMP COUNT=犯規搶答程序=ERROR: MOV R0,#00H MOV TH1,#3CH MOV TL1,#0B0H MOV 34H,R3 ;犯規號數暫存與(34H)HERE: MOV A,R0 CJNE A,#0AH,FLASH ; 0.5s向下運行->滅并停響 CLR RING MOV R3,#0AH MOV R4,#0AH MOV R5,#0AH ; 三燈全滅 AJMP CHECK1FLASH: CJNE A,#14H,CHE

23、CK1 下面是1s的情況,響并顯示號數并清R0,重新計 SETB RING MOV R0,#00H MOV R3,34H ;取回號數 MOV R5,#0BH MOV R4,#0BH ;顯示FF和號數 AJMP CHECK1CHECK1: JNB P3.1,QUIT1 ACALL DISPLAY AJMP HEREQUIT1: CLR RING CLR OKAJMP START=顯示程序=DISPLAY:MOV DPTR,#DAT1 查表顯示程序,利用P0口做段選碼口輸出/P2低三位做位選碼輸出, MOV A,R3 MOVC A,A+DPTR MOV P2,#0feH MOV P0,A ACAL

24、L DELAY MOV DPTR,#DAT2 MOV A,R5 MOVC A,A+DPTR MOV P2,#0fdH MOV P0,A ACALL DELAY MOV A,R4 MOVC A,A+DPTR MOV P2,#0fbH MOV P0,A ACALL DELAY RETDAT1:DB 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H ;"滅","1","2","3","4","5","6","7","8","9",

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論