單片機課設-----智力競賽搶答器_第1頁
已閱讀1頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  智力競賽搶答器</b></p><p>  摘要 </p><p>  設計要求:1) 能容許2-8組進行搶答。2) 能顯示搶答組號。3) 各組記分,并能記分顯示。4) 比賽結束時,能發(fā)出報警聲。</p><

2、p><b>  硬件系統(tǒng)設計</b></p><p>  1)控制系統(tǒng)主要由單片機應用電路、存儲器接口電路、顯示接口電路組成。其中單片機AT89C51是系統(tǒng)工作的核心,它主要負責控制各個部分協(xié)調工作.</p><p>  2)硬件組成及所需元件:該系統(tǒng)的核心器件是AT89C51。在其外圍接上復位電路、上拉電阻、數(shù)碼管、按鈕及揚聲器。元件為:晶振X1、電容C1、C

3、2、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為搶答記時調整口,實現(xiàn)的對個隊進行計時,并且加減調整,外部中斷0,1實現(xiàn)了答題時間調整.P3.4 P3.5分別實現(xiàn)了時間的加一和減一.P3.6為蜂鳴器的控制口。</p><p> 

4、 控制系統(tǒng)防真用到了偉福軟件, 集成調試環(huán)境,集成了編緝器、編譯器、調試器,支持軟件模擬,支持項目管理功能強大的觀察窗口,支持所有的數(shù)據(jù)類型。樹狀結構顯示,一目了然,支持ASM(匯編)、C語言,多語言多模塊源程序混合調試,在線直接修改、編譯、調試源程序,錯誤指令定位。功能很強大。</p><p>  系統(tǒng)仿真還用到了PROTUCE軟件,可通過仿真可以完全顯示出所設計系統(tǒng)的功能,對于程序的調試等有很大的幫助.<

5、;/p><p><b>  目錄</b></p><p>  1 概述.................................................................................................... . ..............3</p><p>  2 系統(tǒng)總體方案及硬件

6、計............................................................................4</p><p>  2.1控制系統(tǒng)及所需元件組成..........................................................................4</p><p>  2.2實驗原理

7、.......................................................................................................4</p><p>  3 軟件設計.......................................................................................

8、..................8.</p><p>  4 Proteus軟件仿真.......................................................................................12</p><p>  4.1偉福軟件.............................................

9、.........................................................12</p><p>  4.2在Proteus軟件............................................................................................12</p><p>  5心得體會...

10、........................................................................................................19</p><p>  參考文獻.......................................................................................

11、.........................20</p><p>  附1:源程序代碼.............................................................................................21</p><p>  附2:計算器模擬系統(tǒng)電圖................................

12、.........................................30</p><p><b>  1 概述</b></p><p>  《單片機原理及應用技術》是一門技術性,應用性、實踐性很強的學科。課程設計是學好本門課程的又一重要實踐性教學環(huán)節(jié),課程設計的目的和任務就是</p><p>  配合單片機的教學和平時實驗,以達到

13、鞏固消化課程的內(nèi)容,進一步加強綜合應用能力及單片機應用系統(tǒng)開發(fā)和設計能力的訓練,啟發(fā)創(chuàng)新思維,使之具有獨立單片機產(chǎn)品和科研的基本技能,是以培養(yǎng)學生綜合運用所學知識的過程,是知識轉化為能力和能力轉化為工程素質的重要階段。在實際生活中有好多地方都用到了單片機,因此學習好這門課程有著十分重要的意義。</p><p>  要求的模擬的搶答器:1) 能容許2-8組進行搶答。2) 能顯示搶答組號。3) 各組記分,并能記分顯示

14、。4) 比賽結束時,能發(fā)出報警聲。</p><p><b>  硬件系統(tǒng)設計</b></p><p>  1)控制系統(tǒng)主要由單片機應用電路、存儲器接口電路、顯示接口電路組成。其中單片機AT89C51是系統(tǒng)工作的核心,它主要負責控制各個部分協(xié)調工作.</p><p>  2)硬件組成及所需元件:該系統(tǒng)的核心器件是AT89C51。在其外圍接上復位電

15、路、上拉電阻、數(shù)碼管、按鈕及揚聲器。元件為:晶振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為搶答記時調整口,實現(xiàn)的對個隊進行計時,并且加減調整,外部中斷0,1實現(xiàn)了答題時間調整.P3.4 P3.5分別實現(xiàn)了時間的加一和減一.P3

16、.6為蜂鳴器的控制口。</p><p>  控制系統(tǒng)防真用到了偉福軟件, 集成調試環(huán)境,集成了編緝器、編譯器、調試器,支持軟件模擬,支持項目管理功能強大的觀察窗口,支持所有的數(shù)據(jù)類型。樹狀結構顯示,一目了然,支持ASM(匯編)、C語言,多語言多模塊源程序混合調試,在線直接修改、編譯、調試源程序,錯誤指令定位。功能很強大。</p><p>  系統(tǒng)仿真還用到了PROTUCE軟件,可通過仿真可

17、以完全顯示出所設計系統(tǒng)的功能,對于程序的調試等有很大的幫助.</p><p>  2系統(tǒng)總體方案及硬件計</p><p>  1:控制系統(tǒng)及所需元件 </p><p>  控制系統(tǒng)主要由單片機應用電路、存儲器接口電路、顯示接口電路組成。其中單片機AT89C51是系統(tǒng)工作的核心,它主要負責控制各個部分協(xié)調工作.</p><p>  所需元件:該

18、系統(tǒng)的核心器件是AT89C51。在其外圍接上復位電路、上拉電阻、數(shù)碼管、按鈕及揚聲器。元件為:晶振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為搶答記時調整口,實現(xiàn)的對個隊進行計時,并且加減調整,外部中斷0,1實現(xiàn)了答題時間調整.P3

19、.4 P3.5分別實現(xiàn)了時間的加一和減一.P3.6為蜂鳴器的控制口。</p><p><b>  2:實驗原理 </b></p><p>  智力競賽搶答器用單片機來設計制作完成,由于其功能的實現(xiàn)主要通過軟件編程來完成, 采用單片機AT89C51,它是低功耗、高性能的CMOS型8位單片機。片內(nèi)帶有4KB的Flash存儲器,且允許在系統(tǒng)內(nèi)改寫或用編程器編程。該智力競

20、賽搶答器的準確度很高,其誤差主要由晶振自身的誤差所造成。</p><p>  AT89C51單片機由微處理器,存儲器,I/O口以及特殊功能寄存器SFR等部分構成。其存儲器在物理上設計成程序存儲器和數(shù)據(jù)存儲器兩個獨立的空間,片內(nèi)程序存儲器的容量為4KB,片內(nèi)數(shù)據(jù)存儲器為128個字節(jié)。89C51單片機有4個8位的并行I/O口:P0口,P1口,P2口和P3口。各個接口均由接口鎖存器,輸出驅動器,和輸入緩沖器組成。P1口

21、是唯一的單功能口,僅能用作通用的數(shù)據(jù)輸入/輸出口。P3口是雙功能口除了具有數(shù)據(jù)輸入/輸出功能外,每條接口還具有不同的第二功能,如P3.0是串行輸入口線,P3.1口是串行輸出口線。在需要外部程序存儲器和數(shù)據(jù)存儲器擴展時,P0可作為分時復用的低8位地址/數(shù)據(jù)總線,P2口可作為高8位的地址總線。P3口也可作為AT89C51的一些特殊功能口,同時為閃爍編程和編程校驗接收一些控制信號。</p><p>  AT89C51的

22、管腳圖:</p><p>  外部振蕩電路單片機必須在AT89C51的驅動下才能工作.在單片機內(nèi)部有一個時鐘振蕩電路,只需要外接一個振蕩源就能產(chǎn)生一定的時鐘信號送到單片機內(nèi)部的各個單元。外部振蕩電路見圖一</p><p><b>  (圖一)</b></p><p>  外部中斷和內(nèi)部中斷并存,單片機有硬件復位端,只要輸入持續(xù)4個機器周期的高電

23、平即可實現(xiàn)復位。硬件復位后的各狀態(tài)可知寄存器及存儲器的值都恢復到了初始值,應為本設計功能中有倒計時時間的記憶功能,所以不能對單片機進行硬件復位。只能用軟復位。軟復位實際上就是當程序執(zhí)行完畢之后,將程序指針通過一條跳轉指令讓它跳轉到程。</p><p>  復位電路采用圖二所示:</p><p>  外部還接有蜂鳴器(由于缺少驅動器,發(fā)生器不響,所以,用綠燈換了)用來發(fā)出報警音,其圖形如下:

24、</p><p>  采用七段碼7SEG-MPX4-CC 顯示,它是共陰極的由高電平點亮。圖形如下:</p><p>  采用八個BUTTON按鈕作為搶答的選擇按鍵如圖所示:</p><p><b>  3軟件系統(tǒng)設計</b></p><p>  智力競賽搶答器要求有計時記憶功能,一次時間設置完, 復位后不需重新進行時

25、間設定,通過鍵盤掃描輸出按鍵信息,再通過單片機將它轉換成能在七段數(shù)碼管上顯示字型碼.</p><p>  當搶答完畢時,會在數(shù)碼管上顯示搶答者數(shù)字號碼提示以表示搶答成功.同時顯示其分數(shù),分數(shù)的加減可由裁判手動進行. 采用獨立式鍵盤,可實現(xiàn)8路搶答. </p><p>  在顯示時使用的是七段數(shù)碼管顯示在本設計中根據(jù)實際情況采用的是動態(tài)顯示方法. 并通過查表法 將其在數(shù)碼管上顯示出來,其中P

26、1口為字型碼輸入端,P2口低6位為字選段輸入端.通過查表將字型碼送給7段數(shù)碼管顯示的數(shù)字。軟件去抖動,如果"開始鍵"按下就向下執(zhí)行,否者跳到開始。采用倒計時程序,使其具有倒計時功能?;卮鸬褂嫊r30秒。搶答時間5秒。采用發(fā)聲警報(由于發(fā)生器不響,所以,用綠燈換了),起到報警作用。</p><p>  1、如果想調節(jié)搶答時間或答題時間,按"搶答時間調節(jié)"鍵或"答題時間

27、調節(jié)"鍵進入調節(jié)狀態(tài),此時會顯示現(xiàn)在設定的搶答時間或回答時間值,如想加一秒按一下"加1s"鍵,如果想減一秒按一下"-1s"鍵,時間LED上會顯示改變后的時間,調整范圍為0s~99s, 0s時再減1s會跳到99,99s時再加1s會變到0s。</p><p>  主持人按"搶答開始"鍵,會有提示音,并立刻進入搶答倒計時(預設30s搶答時間),如有選

28、手搶答,會有提示音,并會顯示其號數(shù)并立刻進入回答倒計時(預設60s搶答時間),不進行搶答查詢,所以只有第一個按搶答的選手有效。倒數(shù)時間到小于5s會每秒響一下提示音。</p><p>  如倒計時期間,主持人想停止倒計時可以隨時按"停止"按鍵,系統(tǒng)會自動進入準備狀態(tài),等待主持人按"搶答開始"進入下次搶答計時。 </p><p>  4、如果主持人未按&

29、quot;搶答開始"鍵,而有人按了搶答按鍵,犯規(guī)搶答,LED上不斷閃爍FF和犯規(guī)號數(shù)并響個不停,直到按下"停止" 鍵為止。</p><p>  5、P3.0為開始搶答,P3.1為停止,p1.0-p1.7為八路搶答輸入 數(shù)碼管段選P0口,位選P2口低3位,蜂鳴器輸出為P3.6口。P3.2搶答時間調整結,P3.3回答時間調整,P3.4為時間加1調整,P3.5為時間減1調整。</p&

30、gt;<p>  下面是部分功能程序(附部分說明):</p><p>  ;=====查詢程序=====</p><p>  START: MOV R5,#0BH</p><p>  MOV R4,#0BH</p><p>  MOV R3,#0BH</p><p>  ACALL DISPLAY;未

31、開始搶答時候顯示FFF</p><p>  JB P3.0,NEXT;ddddddd</p><p>  ACALL DELAY</p><p>  JB P3.0,NEXT;去抖動,如果"開始鍵"按下就向下執(zhí)行,否者跳到非法搶答查詢</p><p>  ACALL BARK;按鍵發(fā)聲</p><p&g

32、t;<b>  MOV A,R1</b></p><p>  MOV R6,A;送R1->R6,因為R1中保存了搶答時間</p><p>  SETB OK;搶答標志位,用于COUNT只程序中判斷是否查詢搶答</p><p>  MOV R7,#01H ;讀搶答鍵數(shù)據(jù)信號標志,這里表示只讀一次有用信號</p><p&

33、gt;  MOV R3,#0AH;搶答只顯示計時,滅號數(shù)</p><p>  AJMP COUNT;進入倒計時程序,"查詢有效搶答的程序"在COUNT里面</p><p>  NEXT: JNB P1.0,FALSE1</p><p>  JNB P1.1,FALSE2</p><p>  JNB P1.2,FALSE

34、3</p><p>  JNB P1.3,FALSE4</p><p>  JNB P1.4,FALSE5</p><p>  JNB P1.5,FALSE6</p><p>  JNB P1.6,FALSE7</p><p>  JNB P1.7,FALSE8</p><p>  AJMP S

35、TART</p><p>  ;=====INT0(搶答時間R1調整程序)=====</p><p>  INT0SUB:MOV A,R1</p><p>  MOV B,#0AH</p><p><b>  DIV AB</b></p><p><b>  MOV R5,A</b

36、></p><p><b>  MOV R4,B</b></p><p>  MOV R3,#0AH</p><p>  ACALL DISPLAY;先在兩個時間LED上顯示R1</p><p>  JNB P3.4,INC0;P3.4為+1s鍵,如按下跳到INCO</p><p>  JN

37、B P3.5,DEC0;P3.5為-1s鍵,如按下跳到DECO</p><p>  JNB P3.1,BACK0;P3.1為確定鍵,如按下跳到BACKO</p><p>  AJMP INT0SUB</p><p>  INC0: MOV A,R1</p><p>  CJNE A,#63H,ADD0;如果不是99,R2加1,如果加到99

38、,R1就置0,重新加起。</p><p>  MOV R1,#00H</p><p>  ACALL DELAY1</p><p>  AJMP INT0SUB</p><p>  ADD0: INC R1</p><p>  ACALL DELAY1</p><p>  AJMP INT0

39、SUB</p><p>  DEC0: MOV A,R1</p><p>  JZ SETR1;如果R1為0, R1就置99,</p><p><b>  DEC R1</b></p><p>  ACALL DELAY1</p><p>  AJMP INT0SUB</p>&

40、lt;p>  SETR1: MOV R1,#63H</p><p>  ACALL DELAY1</p><p>  AJMP INT0SUB</p><p>  BACK0: RETI </p><p>  ;=====讀搶答按鍵數(shù)據(jù)口程序=====</p><p>  ;由于在讀搶答數(shù)據(jù)口的時候,單片機首

41、先進入倒計時程序,再調用顯示程序,最后才檢測按鍵口</p><p>  ;然而在檢測按鍵口時動態(tài)掃描要調用三次(4ms)延時程序.這樣就會導致讀數(shù)據(jù)口出現(xiàn)滯后,造成1號優(yōu)先最高.8號最低.</p><p>  ;故采用在延時子程序中加了讀數(shù)據(jù)口程序.保證了靈敏度和可靠性</p><p>  AAAA1: MOV A,P1</p><p>

42、  CJNE A,#0FFH,AA1 ;當不全為1時的數(shù)據(jù)為有效數(shù)據(jù)</p><p>  AA0: MOV 36H,A ;將有效數(shù)據(jù)送到36H暫存</p><p>  AJMP LOOP2</p><p>  AA1: DEC R7 </p><p><b>  A

43、JMP AA0</b></p><p>  ;=====發(fā)聲程序=====</p><p>  BARK: SETB RING</p><p>  ACALL DELAY1</p><p>  ACALL DELAY1</p><p>  CLR RING;按鍵發(fā)聲</p><p&g

44、t;<b>  RET</b></p><p>  ;=====TO溢出中斷(響鈴程序)=====</p><p>  T0INT: MOV TH0,#0ECH</p><p>  MOV TL0,#0FFH</p><p>  JNB RING,OUT;</p><p>  CPL P3.6;

45、RING標志位為1時候P3.6口不短取反使喇叭發(fā)出一定頻率的聲音</p><p>  OUT: RETI</p><p>  ;=====T1溢出中斷(計時程序)=====</p><p>  T1INT: MOV TH1,#3CH</p><p>  MOV TL1,#0B0H</p><p><b&g

46、t;  INC R0</b></p><p><b>  RETI</b></p><p><b>  END</b></p><p><b>  4 系統(tǒng)仿真</b></p><p><b>  1:偉福軟件</b></p>&

47、lt;p>  用到了偉福軟件, 集成調試環(huán)境,集成了編緝器、編譯器、調試器,支持軟件模擬,支持項目管理功能強大的觀察窗口,支持所有的數(shù)據(jù)類型。樹狀結構顯示,一目了然,支持ASM(匯編)、C語言,多語言多模塊源程序混合調試,在線直接修改、編譯、調試源程序,錯誤指令定位。功能很強大。用于對程序的調試和編輯。</p><p><b>  其界面如下:</b></p><p

48、>  2:PROTUCE軟件</p><p>  系統(tǒng)仿真還用到了PROTUCE軟件,可通過仿真可以完全顯示出所設計系統(tǒng)的功能,對于程序的調試等有很大的幫助.</p><p>  系統(tǒng)仿真時首先要在使用偉福編譯器,把所寫的程序進行編譯,同時在仿真器里設置生成HEX文件,編譯無錯誤時進行PROTUCE仿真。首先要新建一個文檔是DNS型的找出需要的器件,可以使用搜索功能。接著把各個器件放

49、到合適的位置都要放到藍色框內(nèi)。然后根據(jù)自己的設計要求連線。等所有的元件都連接完成后可以把,偉福編譯生成的無錯誤文件加載到AT89C51中,方法是,右鍵點中器件</p><p>  然后在用左鍵點擊,出來一個對話框在program file后選擇要添加文件,文件要求必須是HEX文件。然后可以點擊運行觀察現(xiàn)象,看與自己設置的符合否,如果不相符在查找錯誤進行修改,一般的錯誤都是程序中的,所以要認真的讀取程序的每一個部分

50、</p><p>  作好的PROTUCE圖:</p><p>  六號搶答到時時的顯示圖:</p><p>  使用加法調整時的圖:</p><p><b>  減法調整圖:</b></p><p>  倒計時到30秒時的顯示圖:</p><p>  倒計時還有5秒時的報

51、警顯示圖:</p><p><b>  提示燈會呈閃亮狀:</b></p><p><b>  5心得體會</b></p><p>  單片機課程設計是一門很實用,很難的設計。這個設計用到了單片機,電路等方面的知識,通過這次課程設計,使我對單片機及其附屬電路有了一定的了解,對課本上的知識有了近一步的掌握,也深刻明白了自己的

52、不足。</p><p>  完成本次課程設計的過程,是一個從無到有的過程,經(jīng)歷了興奮、自信、失落、奮發(fā)、所悟、完成幾個過程。剛做做課程設計時,仔細閱讀設計的題目和要求,以為沒什么困難的,所用的知識書上都有??墒钱斘覄邮珠_始做的時候,才發(fā)現(xiàn)其中的算法,設計是那么繁瑣。經(jīng)過一天的努力,毫無結果。失落的心情油然而生。于是,再到圖書館和網(wǎng)上查找資料,在經(jīng)過借鑒很多類似的資料,文獻后,總算是有點眉目了。埋頭苦干的過程是痛苦

53、的,尤其是在思考算法和程序框架時,迷茫,煩躁,特別是當苦思出來一個結果,又被自己推翻,心痛的無法言繪。在痛苦中掙扎,建立,推翻,參考別人的思路,建立,再次在推翻,在這不斷循環(huán)中,終于最后完善了程序。其中的煎熬是很痛苦的,深刻明白攻克自己“未知領域”的困難。但當課程設計完成時,那感覺是甜蜜的,沒有耕耘,哪來得收獲的喜悅,不懂付出怎么能知道回報的快樂,一分耕耘一分收獲,有付出才會有回報,就在這樣的痛與快樂的交換中,我學到了知識, 學到了做人

54、的道理。</p><p>  通過這短短一周的實踐,我感覺到自己從課本上學到的理論知識和實踐仍有</p><p>  很大的差距。最少很多元器件根本不知道有什么功效,在仿真儀器中是什么代碼。有的知識,自己感覺已經(jīng)掌握得差不多了,但是實際操作起來就有問題出現(xiàn)了。我遇到了不少問題,花費了很多的時間。這讓我重新反思我們的學習,深刻領悟</p><p>  到我們這個專業(yè)動

55、手,實踐的重要性。理論不經(jīng)過實踐考驗,是沒法實施的,就像我們編的程序,很多方面考慮的都不夠,幾乎沒有涉及到實際應用時的防范方法措施。</p><p>  這次的課程設計,讓我學到了很多書本上學不到的東西,學到了實際應用時,是取用成本的最小化,做設計不僅要考慮大的方面,小的方面也必須做到完美。最大的收獲是:對鍵盤,顯示器,C51語言(雖然最后還是用匯編語言編寫的,但是,我也試著學用了C51)的應用有了深刻的了解。

56、</p><p><b>  6參考文獻</b></p><p>  中國礦業(yè)大學出版社《單片機原理及應用技術》 主編 余發(fā)山</p><p>  國防工業(yè)出版社《單片微型計算機接口技術及其應用》 主編 張淑清等</p><p>  北京航空航天大學出版社《單片機課程設計實例指導》 李光飛 樓然苗 胡佳文

57、謝象佐 編著</p><p><b>  附1:源程序代碼</b></p><p>  OK EQU 20H;搶答開始標志位</p><p>  RING EQU 22H;響鈴標志位</p><p><b>  ORG 0000H</b></p><p><b>

58、  AJMP MAIN</b></p><p><b>  ORG 0003H</b></p><p>  AJMP INT0SUB</p><p><b>  ORG 000BH</b></p><p>  AJMP T0INT</p><p><b>

59、;  ORG 0013H</b></p><p>  AJMP INT1SUB</p><p><b>  ORG 001BH</b></p><p>  AJMP T1INT</p><p><b>  ORG 0040H</b></p><p>  MAIN:

60、 MOV R1,#30;初設搶答時間為30s</p><p>  MOV R2,#60;初設答題時間為60s</p><p>  MOV TMOD,#11H;設置未定時器/模式1</p><p>  MOV TH0,#0F0H</p><p>  MOV TL0,#0FFH;越高發(fā)聲頻率越高,越尖</p><p>

61、  MOV TH1,#3CH</p><p>  MOV TL1,#0B0H;50ms為一次溢出中斷</p><p><b>  SETB EA</b></p><p><b>  SETB ET0</b></p><p><b>  SETB ET1</b></p>

62、;<p><b>  SETB EX0</b></p><p>  SETB EX1;允許四個中斷,T0/T1/INT0/INT1</p><p><b>  CLR OK</b></p><p><b>  CLR RING</b></p><p><b&

63、gt;  SETB TR1</b></p><p>  SETB TR0;一開始就運行定時器,以開始顯示FFF.如果想重新計數(shù),重置TH1/TL1就可以了</p><p>  ;=====查詢程序=====</p><p>  START: MOV R5,#0BH</p><p>  MOV R4,#0BH</p>

64、<p>  MOV R3,#0BH</p><p>  ACALL DISPLAY;未開始搶答時候顯示FFF</p><p>  JB P3.0,NEXT;ddddddd</p><p>  ACALL DELAY</p><p>  JB P3.0,NEXT;去抖動,如果"開始鍵"按下就向下執(zhí)行,否者跳到非

65、法搶答查詢</p><p>  ACALL BARK;按鍵發(fā)聲</p><p><b>  MOV A,R1</b></p><p>  MOV R6,A;送R1->R6,因為R1中保存了搶答時間</p><p>  SETB OK;搶答標志位,用于COUNT只程序中判斷是否查詢搶答</p><

66、p>  MOV R7,#01H ;讀搶答鍵數(shù)據(jù)信號標志,這里表示只讀一次有用信號</p><p>  MOV R3,#0AH;搶答只顯示計時,滅號數(shù)</p><p>  AJMP COUNT;進入倒計時程序,"查詢有效搶答的程序"在COUNT里面</p><p>  NEXT: JNB P1.0,FALSE1</p>&

67、lt;p>  JNB P1.1,FALSE2</p><p>  JNB P1.2,FALSE3</p><p>  JNB P1.3,FALSE4</p><p>  JNB P1.4,FALSE5</p><p>  JNB P1.5,FALSE6</p><p>  JNB P1.6,FALSE7</

68、p><p>  JNB P1.7,FALSE8</p><p>  AJMP START</p><p>  ;=====非法搶答處理程序=====</p><p>  FALSE1: MOV R3,#01H</p><p>  AJMP ERROR</p><p>  FALSE2: MOV R3

69、,#02H</p><p>  AJMP ERROR</p><p>  FALSE3: MOV R3,#03H</p><p>  AJMP ERROR</p><p>  FALSE4: MOV R3,#04H</p><p>  AJMP ERROR</p><p>  FALSE5: M

70、OV R3,#05H</p><p>  AJMP ERROR</p><p>  FALSE6: MOV R3,#06H</p><p>  AJMP ERROR</p><p>  FALSE7: MOV R3,#07H</p><p>  AJMP ERROR</p><p>  FALS

71、E8: MOV R3,#08H</p><p>  AJMP ERROR</p><p>  ;=====INT0(搶答時間R1調整程序)=====</p><p>  INT0SUB:MOV A,R1</p><p>  MOV B,#0AH</p><p><b>  DIV AB</b>&l

72、t;/p><p><b>  MOV R5,A</b></p><p><b>  MOV R4,B</b></p><p>  MOV R3,#0AH</p><p>  ACALL DISPLAY;先在兩個時間LED上顯示R1</p><p>  JNB P3.4,INC0;

73、P3.4為+1s鍵,如按下跳到INCO</p><p>  JNB P3.5,DEC0;P3.5為-1s鍵,如按下跳到DECO</p><p>  JNB P3.1,BACK0;P3.1為確定鍵,如按下跳到BACKO</p><p>  AJMP INT0SUB</p><p>  INC0: MOV A,R1</p>&l

74、t;p>  CJNE A,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。</p><p>  MOV R1,#00H</p><p>  ACALL DELAY1</p><p>  AJMP INT0SUB</p><p>  ADD0: INC R1</p><p>  

75、ACALL DELAY1</p><p>  AJMP INT0SUB</p><p>  DEC0: MOV A,R1</p><p>  JZ SETR1;如果R1為0, R1就置99,</p><p><b>  DEC R1</b></p><p>  ACALL DELAY1<

76、/p><p>  AJMP INT0SUB</p><p>  SETR1: MOV R1,#63H</p><p>  ACALL DELAY1</p><p>  AJMP INT0SUB</p><p>  BACK0: RETI </p><p>  ;=====INT1(回答時間R2調

77、整程序)=====</p><p>  INT1SUB:MOV A,R2</p><p>  MOV B,#0AH</p><p><b>  DIV AB</b></p><p><b>  MOV R5,A</b></p><p><b>  MOV R4,B&

78、lt;/b></p><p>  MOV R3,#0AH</p><p>  ACALL DISPLAY</p><p>  JNB P3.4,INC1</p><p>  JNB P3.5,DEC1</p><p>  JNB P3.1,BACK1</p><p>  AJMP INT1

79、SUB</p><p>  INC1: MOV A,R2</p><p>  CJNE A,#63H,ADD1</p><p>  MOV R2,#00H</p><p>  ACALL DELAY1</p><p>  AJMP INT1SUB</p><p>  ADD1: INC

80、R2</p><p>  ACALL DELAY1</p><p>  AJMP INT1SUB</p><p>  DEC1: MOV A,R2</p><p><b>  JZ SETR2</b></p><p><b>  DEC R2</b></p>

81、<p>  ACALL DELAY1</p><p>  AJMP INT1SUB</p><p>  SETR2: MOV R2,#63H</p><p>  ACALL DELAY1</p><p>  AJMP INT1SUB</p><p>  BACK1: RETI </p>&

82、lt;p>  ;=====倒計時程序(搶答倒計時和回答倒計時都跳到改程序)=====</p><p>  REPEAT:MOV A,R2 ;使用錦囊時重新計時</p><p><b>  MOV R6,A</b></p><p><b>  CLR RING </b></p><p>

83、  COUNT: MOV R0,#00H;重置定時器中斷次數(shù)</p><p>  MOV TH1,#3CH</p><p>  MOV TL1,#0B0H;重置定時器</p><p>  RECOUNT:MOV A,R6;R6保存了倒計時的時間,之前先將搶答時間或回答時間給R6</p><p>  MOV B,#0AH</p>

84、<p>  DIV AB;除十分出個位/十位</p><p>  MOV 30H,A;十位存于(30H)</p><p>  MOV 31H,B;個位存于(31H)</p><p>  MOV R5,30H;取十位</p><p>  MOV R4,31H;取個位</p><p><b>  MO

85、V A,R6</b></p><p>  SUBB A,#07H</p><p>  JNC LARGER;大于5s跳到LARGER,小于等于5s會提醒</p><p><b>  MOV A,R0</b></p><p>  CJNE A,#0AH,FULL;1s中0.5s向下運行</p>&

86、lt;p><b>  CLR RING </b></p><p>  AJMP CHECK</p><p>  FULL: CJNE A,#14H,CHECK;下面是1s的情況,響并顯示號數(shù)并清R0,重新計</p><p><b>  SETB RING</b></p><p><b

87、>  MOV A,R6</b></p><p>  JZ QUIT;計時完畢</p><p>  MOV R0,#00H</p><p>  DEC R6;一秒標志減1</p><p>  AJMP CHECK</p><p>  LARGER: MOV A,R0</p><p&g

88、t;  CJNE A,#14H,CHECK;如果1s向下運行,否者跳到查"停/顯示"</p><p>  DEC R6;計時一秒R6自動減1</p><p>  MOV R0,#00H</p><p>  CHECK: JNB P3.1,QUIT;如按下停止鍵退出</p><p>  JNB OK,CHECKK

89、;只在回答倒計時才有效</p><p>  AJMP NEXTT</p><p>  CHECKK:JNB P3.0,REPEAT ;判斷是否使用錦囊</p><p>  NEXTT: ACALL DISPLAY</p><p>  JB OK,ACCOUT;如果是搶答倒計時,如是則查詢搶答,否者跳過查詢繼續(xù)倒數(shù)(這里起到鎖搶答作用)

90、</p><p>  AJMP RECOUNT</p><p><b>  ACCOUT:</b></p><p><b>  MOV A,36H</b></p><p>  JNB ACC.0,TRUE1</p><p>  JNB ACC.1,TRUE2</p>

91、;<p>  JNB ACC.2,TRUE3</p><p>  JNB ACC.3,TRUE4</p><p>  JNB ACC.4,TRUE5</p><p>  JNB ACC.5,TRUE6</p><p>  JNB ACC.6,TZ1</p><p>  JNB ACC.7,TZ2</

92、p><p>  AJMP RECOUNT</p><p>  TZ1:JMP TRUE7</p><p>  TZ2:JMP TRUE8 </p><p>  QUIT: CLR OK;如果按下了"停止鍵"執(zhí)行的程序</p><p><b>  CLR RING</b><

93、;/p><p>  AJMP START</p><p>  ;=====正常搶答處理程序=====</p><p>  TRUE1: ACALL BARK</p><p><b>  MOV A,R2</b></p><p>  MOV R6,A;搶答時間R2送R6</p><p

94、>  MOV R3,#01H</p><p>  CLR OK;因為答題的計時不再查詢搶答,所以就鎖了搶答</p><p>  AJMP COUNT</p><p>  TRUE2:ACALL BARK</p><p><b>  MOV A,R2</b></p><p><b>

95、  MOV R6,A</b></p><p>  MOV R3,#02H</p><p><b>  CLR OK</b></p><p>  AJMP COUNT</p><p>  TRUE3:ACALL BARK</p><p><b>  MOV A,R2</b

96、></p><p><b>  MOV R6,A</b></p><p>  MOV R3,#03H</p><p><b>  CLR OK</b></p><p>  AJMP COUNT</p><p>  TRUE4:ACALL BARK</p>

97、<p><b>  MOV A,R2</b></p><p><b>  MOV R6,A</b></p><p>  MOV R3,#04H</p><p><b>  CLR OK</b></p><p>  AJMP COUNT</p><p

98、>  TRUE5:ACALL BARK </p><p><b>  MOV A,R2</b></p><p><b>  MOV R6,A</b></p><p>  MOV R3,#05H</p><p><b>  CLR OK</b></p><

99、;p>  AJMP COUNT</p><p>  TRUE6: ACALL BARK </p><p><b>  MOV A,R2</b></p><p><b>  MOV R6,A</b></p><p>  MOV R3,#06H</p><p><b&

100、gt;  CLR OK</b></p><p>  AJMP COUNT</p><p>  TRUE7:ACALL BARK </p><p><b>  MOV A,R2</b></p><p><b>  MOV R6,A</b></p><p>  MOV

101、 R3,#07H</p><p><b>  CLR OK</b></p><p>  AJMP COUNT</p><p>  TRUE8:ACALL BARK </p><p><b>  MOV A,R2</b></p><p><b>  MOV R6,A&

102、lt;/b></p><p>  MOV R3,#08H</p><p><b>  CLR OK</b></p><p>  AJMP COUNT</p><p>  ;=====犯規(guī)搶答程序=====</p><p>  ERROR: MOV R0,#00H</p>&l

103、t;p>  MOV TH1,#3CH</p><p>  MOV TL1,#0B0H</p><p>  MOV 34H,R3;犯規(guī)號數(shù)暫存與(34H)</p><p>  HERE: MOV A,R0</p><p>  CJNE A,#06H,FLASH;0.3s向下運行->滅并停響</p><p>

104、;<b>  CLR RING </b></p><p>  MOV R3,#0AH</p><p>  MOV R4,#0AH</p><p>  MOV R5,#0AH;三燈全滅</p><p>  AJMP CHECK1</p><p>  FLASH: CJNE A,#0CH,CHECK

105、1;下面是0.8s的情況,響并顯示號數(shù)并清R0,重新計</p><p><b>  SETB RING</b></p><p>  MOV R0,#00H</p><p>  MOV R3,34H;取回號數(shù)</p><p>  MOV R5,#0BH</p><p>  MOV R4,#0BH;顯

106、示FF和號數(shù)</p><p>  AJMP CHECK1</p><p>  CHECK1: JNB P3.1,QUIT1</p><p>  ACALL DISPLAY</p><p><b>  AJMP HERE</b></p><p>  QUIT1: CLR RING</p>

107、;<p><b>  CLR OK</b></p><p>  AJMP START</p><p>  ;=====顯示程序=====</p><p>  DISPLAY:MOV DPTR,#DAT1;查表顯示程序,利用P0口做段選碼口輸出/P2低三位做位選碼輸出,</p><p><b>  

108、MOV A,R3</b></p><p>  MOVC A,@A+DPTR</p><p>  MOV P2,#0feH</p><p><b>  MOV P0,A</b></p><p>  ACALL DELAY2</p><p>  MOV DPTR,#DAT2</p&g

109、t;<p><b>  MOV A,R5</b></p><p>  MOVC A,@A+DPTR</p><p>  MOV P2,#0fdH</p><p><b>  MOV P0,A</b></p><p>  ACALL DELAY2</p><p>

110、<b>  MOV A,R4</b></p><p>  MOVC A,@A+DPTR</p><p>  MOV P2,#0fbH</p><p><b>  MOV P0,A</b></p><p>  ACALL DELAY2</p><p><b>  RE

111、T</b></p><p>  DAT1:DB 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H </p><p>  ;"滅","1","2","3","4","5","6","7

112、","8","9","滅","F"</p><p>  DAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H</p><p>  ;第一個為零,其他與上相同,因為十位如果為零顯示熄滅</p><p>  ;====加減時

113、間延時(起到不會按下就加N個數(shù))======</p><p>  DELAY1: MOV 35H,#08H</p><p>  LOOP0: ACALL DISPLAY</p><p>  DJNZ 35H,LOOP0</p><p><b>  RET</b></p><p>  ;=====

114、延時4236個機器周期(去抖動用到)=====</p><p>  DELAY: MOV 32H,#12H</p><p>  LOOP: MOV 33H,#0AFH</p><p>  LOOP1: DJNZ 33H,LOOP1</p><p>  DJNZ 32H,LOOP</p><p><b>

115、;  RET</b></p><p>  ;=====延時4236個機器周期(顯示用到)=====</p><p>  DELAY2: MOV 32H,#43H</p><p>  LOOP3: MOV 33H,#1EH</p><p>  MOV A,R7 ;每隔60~70個機器周期讀一次P1口,全為1

116、時為無效數(shù)據(jù),繼續(xù)讀,有一個不為1時,轉到正常搶答處理</p><p>  JNZ AAAA1 ;沒讀到有效數(shù)據(jù)時繼續(xù)轉到AAAA1</p><p>  LOOP2: DJNZ 33H,LOOP2</p><p>  DJNZ 32H,LOOP3</p><p><b>  RET</b></p

117、><p>  ;=====讀搶答按鍵數(shù)據(jù)口程序=====</p><p>  ;由于在讀搶答數(shù)據(jù)口的時候,單片機首先進入倒計時程序,再調用顯示程序,最后才檢測按鍵口</p><p>  ;然而在檢測按鍵口時動態(tài)掃描要調用三次(4ms)延時程序.這樣就會導致讀數(shù)據(jù)口出現(xiàn)滯后,造成1號優(yōu)先最高.8號最低.</p><p>  ;故采用在延時子程序中加

118、了讀數(shù)據(jù)口程序.保證了靈敏度和可靠性</p><p>  AAAA1: MOV A,P1</p><p>  CJNE A,#0FFH,AA1 ;當不全為1時的數(shù)據(jù)為有效數(shù)據(jù)</p><p>  AA0: MOV 36H,A ;將有效數(shù)據(jù)送到36H暫存</p><p>  AJMP LOOP2

119、</p><p>  AA1: DEC R7 </p><p><b>  AJMP AA0</b></p><p>  ;=====發(fā)聲程序=====</p><p>  BARK: SETB RING</p><p>  ACALL DELAY1</p>

120、<p>  ACALL DELAY1</p><p>  CLR RING;按鍵發(fā)聲</p><p><b>  RET</b></p><p>  ;=====TO溢出中斷(響鈴程序)=====</p><p>  T0INT: MOV TH0,#0ECH</p><p>  MO

121、V TL0,#0FFH</p><p>  JNB RING,OUT;</p><p>  CPL P3.6;RING標志位為1時候P3.6口不短取反使喇叭發(fā)出一定頻率的聲音</p><p>  OUT: RETI</p><p>  ;=====T1溢出中斷(計時程序)=====</p><p>  T1INT

122、: MOV TH1,#3CH</p><p>  MOV TL1,#0B0H</p><p><b>  INC R0</b></p><p><b>  RETI</b></p><p><b>  END</b></p><p><b>

溫馨提示

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

評論

0/150

提交評論