2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩11頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  單片機課程設計</b></p><p>  實驗題目 智能搶答計分器 </p><p><b>  一、設計要求</b></p><p>  1、可允許八組選手進行搶答。 2、可顯示搶答選手號數及搶答時間、答題時間。3、擴展功能:能對各組選手進行計分。(計分

2、功能程序見標號字段TAKE)</p><p>  二、系統設計方案及硬件選擇</p><p>  單片機STC89C52 是系統工作的核心,它主要負責控制各個部分協調工作。 控制系統主要由單片機應用電路、存儲器接口電路、顯示接口電路組成。</p><p>  在其外圍接上復位電路、上拉電阻、數碼管、按鈕及揚聲器。元件為:晶振X1、電容C1、C2、C3、 電阻RP1、

3、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 接LED燈。</p>&

4、lt;p>  三、電路圖設計及程序仿真下載</p><p>  1、程序所需達到的效果:</p><p>  1、如果主持人未按"搶答開始"鍵,而有人按了搶答按鍵,犯規搶答,LED</p><p>  上不斷閃爍FF 和犯規號數,直到按下"停止" 鍵為止。</p><p>  2、P3.0 為開始

5、搶答,P3.1 為停止,p1.0-p1.7 為八路搶答輸入 數碼管段 選P0 口,位選P2 口低3 位,蜂鳴器輸出為P3.6 口。P3.2 搶答時間調整結,P3.3</p><p>  回答時間調整及選手得分記錄,P3.4 為時間和得分加1 調整,P3.5 為時間和得分減1 調整。</p><p>  3、、如果想調節搶答時間或答題時間,按"搶答時間調節"鍵或

6、"答題時間調節"</p><p>  鍵進入調節狀態,此時會顯示現在設定的搶答時間或回答時間值,如想加一秒按</p><p>  一下"加1s"鍵,如果想減一秒按一下"-1s"鍵,時間LED 上會顯示改變后的時間,</p><p>  調整范圍為0s~99s, 0s 時再減1s 會跳到99,99s 時再加1

7、s 會變到0s。</p><p>  主持人按"搶答開始"鍵,會有提示音,并立刻進入搶答倒計時(預設30s 搶答時</p><p>  間),如有選手搶答,LED燈閃爍,并會顯示其號數并立刻進入回答倒計時(預</p><p>  設60s 搶答時間),不進行搶答查詢,所以只有第一個按搶答的選手有效。倒數</p><p> 

8、 時間到小于5s 會每秒閃一下LED燈。</p><p>  如倒計時期間,主持人想停止倒計時可以隨時按"停止"按鍵,系統會自動進入準</p><p>  備狀態,等待主持人按"搶答開始"進入下次搶答計時。</p><p>  4、答題時間結束后跳轉入計分功能,回答正確,由P3.4加一,P3.5減一,若選手當前分數為0分則不進

9、行減分處理。</p><p><b>  五、系統仿真</b></p><p>  1、wave6000</p><p>  用于編譯程序并生成hex文件。</p><p><b>  2、proteus</b></p><p>  用于繪制電路原理圖并進行仿真(如下圖)&l

10、t;/p><p>  3、ptotel </p><p>  用于繪制pcb圖,制作PCB電路板(如下圖)</p><p><b>  擴展計分功能程序段</b></p><p>  TAKE:MOV R0 #00H; 設初始分數為00.</p><p><b>  MOV A,R0&l

11、t;/b></p><p><b>  MOV R6,A;</b></p><p>  JNB P3.4,INC0;P3.4 為+1 鍵,如按下跳到TAKE0</p><p>  JNB P3.5,DEC0;P3.5 為-1 鍵,如按下跳到TAKE1</p><p>  TAKE0:MOV A,R0</p&g

12、t;<p>  CJNE A,#63H,ADD0 </p><p>  MOV R1,#00H</p><p>  ACALL DELAY1;加一,若大于99,則歸零,重新加起</p><p>  TAKE1:MOV A,R1</p><p><b>  JZ SETR1</b></p>&l

13、t;p><b>  DEC R1</b></p><p>  ACALL DELAY1</p><p>  AJMP INT0SUB;</p><p><b>  程序原代碼:</b></p><p>  OK EQU 20H;搶答開始標志位</p><p>  RIN

14、G EQU 22H;響鈴標志位</p><p><b>  ORG 0000H</b></p><p><b>  AJMP MAIN</b></p><p><b>  ORG 0003H</b></p><p>  AJMP INT0SUB</p><p

15、><b>  ORG 000BH</b></p><p>  AJMP T0INT</p><p><b>  ORG 0013H</b></p><p>  AJMP INT1SUB</p><p><b>  ORG 001BH</b></p><

16、p>  AJMP T1INT</p><p><b>  ORG 0040H</b></p><p>  MAIN: MOV R1,#30;初設搶答時間為30s</p><p>  MOV R2,#60;初設答題時間為60s</p><p>  MOV TMOD,#11H;設置未定時器/模式1</p>

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

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

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

20、gt;<p>  MOV R4,#0BH</p><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,NE

21、XT;去抖動,如果"開始鍵"按下就向下執行,否者跳到非法搶答查詢</p><p>  ACALL BARK;按鍵發聲</p><p><b>  MOV A,R1</b></p><p>  MOV R6,A;送R1->R6,因為R1 中保存了搶答時間</p><p>  SETB OK;搶答標

22、志位,用于COUNT 只程序中判斷是否查詢搶答</p><p>  MOV R7,#01H ;讀搶答鍵數據信號標志,這里表示只讀一次有用信號</p><p>  MOV R3,#0AH;搶答只顯示計時,滅號數</p><p>  AJMP COUNT;進入倒計時程序,"查詢有效搶答的程序"在COUNT 里面</p><p>

23、;  NEXT: JNB P1.0,FALSE1</p><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

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

25、</p><p>  FALSE2: MOV R3,#02H</p><p>  AJMP ERROR</p><p>  FALSE3: MOV R3,#03H</p><p>  AJMP ERROR</p><p>  FALSE4: MOV R3,#04H</p><p>  AJMP

26、ERROR</p><p>  FALSE5: MOV R3,#05H</p><p>  AJMP ERROR</p><p>  FALSE6: MOV R3,#06H</p><p>  AJMP ERROR</p><p>  FALSE7: MOV R3,#07H</p><p>  

27、AJMP ERROR</p><p>  FALSE8: MOV R3,#08H</p><p>  AJMP ERROR</p><p>  ;=====INT0(搶答時間R1 調整程序)=====</p><p>  INT0SUB:MOV A,R1</p><p>  MOV B,#0AH</p>

28、<p><b>  DIV AB</b></p><p><b>  MOV R5,A</b></p><p><b>  MOV R4,B</b></p><p>  MOV R3,#0AH</p><p>  ACALL DISPLAY;先在兩個時間LED 上顯示

29、R1</p><p>  JNB P3.4,INC0;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>

30、;<p>  INC0: MOV A,R1</p><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><

31、p>  ADD0: INC R1</p><p>  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&

32、gt;</p><p>  ACALL DELAY1</p><p>  AJMP INT0SUB</p><p>  SETR1: MOV R1,#63H</p><p>  ACALL DELAY1</p><p>  AJMP INT0SUB</p><p>  BACK0: RETI&l

33、t;/p><p>  ;=====INT1(回答時間R2 調整程序)=====</p><p>  INT1SUB:MOV A,R2</p><p>  MOV B,#0AH</p><p><b>  DIV AB</b></p><p><b>  MOV R5,A</b>&

34、lt;/p><p><b>  MOV R4,B</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

35、.1,BACK1</p><p>  AJMP INT1SUB</p><p>  INC1: MOV A,R2</p><p>  CJNE A,#63H,ADD1</p><p>  MOV R2,#00H</p><p>  ACALL DELAY1</p><p>  AJMP INT1

36、SUB</p><p>  ADD1: INC R2</p><p>  ACALL DELAY1</p><p>  AJMP INT1SUB</p><p>  DEC1: MOV A,R2</p><p><b>  JZ SETR2</b></p><p><

37、b>  DEC R2</b></p><p>  ACALL DELAY1</p><p>  AJMP INT1SUB</p><p>  SETR2: MOV R2,#63H</p><p>  ACALL DELAY1</p><p>  AJMP INT1SUB</p><

38、p>  BACK1: RETI</p><p>  ;=====倒計時程序(搶答倒計時和回答倒計時都跳到改程序)=====</p><p>  REPEAT:MOV A,R2 ;</p><p><b>  MOV R6,A</b></p><p><b>  CLR RING</b><

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

40、B,#0AH</p><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

41、><b>  MOV 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

42、.5s 向下運行</p><p><b>  CLR RING</b></p><p>  AJMP CHECK</p><p>  FULL: CJNE A,#14H,CHECK;下面是1s 的情況,響并顯示號數并清R0,重新計</p><p><b>  SETB RING</b></p&

43、gt;<p><b>  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

44、</p><p>  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>

45、  JNB OK,CHECKK ;只在回答倒計時才有效</p><p>  AJMP NEXTT</p><p>  CHECKK:JNB P3.0,REPEAT ;判斷是否使用錦囊</p><p>  NEXTT: ACALL DISPLAY</p><p>  JB OK,ACCOUT;如果是搶答倒計時,如是則查詢搶答,否者跳過查詢繼續倒

46、數(這里起到</p><p><b>  鎖搶答作用)</b></p><p>  AJMP RECOUNT</p><p><b>  ACCOUT:</b></p><p><b>  MOV A,36H</b></p><p>  JNB ACC.

47、0,TRUE1</p><p>  JNB ACC.1,TRUE2</p><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>  

48、JNB ACC.6,TZ1</p><p>  JNB ACC.7,TZ2</p><p>  AJMP RECOUNT</p><p>  TZ1:JMP TRUE7</p><p>  TZ2:JMP TRUE8</p><p>  QUIT: CLR OK;如果按下了"停止鍵"執行的程序<

49、;/p><p><b>  CLR RING</b></p><p>  AJMP START</p><p>  ;=====正常搶答處理程序=====</p><p>  TRUE1: ACALL BARK</p><p><b>  MOV A,R2</b></p&g

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

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

52、 BARK</p><p><b>  MOV A,R2</b></p><p><b>  MOV R6,A</b></p><p>  MOV R3,#03H</p><p><b>  CLR OK</b></p><p>  AJMP COUNT

53、</p><p>  TRUE4:ACALL BARK</p><p><b>  MOV A,R2</b></p><p><b>  MOV R6,A</b></p><p>  MOV R3,#04H</p><p><b>  CLR OK</b>

54、;</p><p>  AJMP COUNT</p><p>  TRUE5:ACALL BARK</p><p><b>  MOV A,R2</b></p><p><b>  MOV R6,A</b></p><p>  MOV R3,#05H</p>&

55、lt;p><b>  CLR OK</b></p><p>  AJMP COUNT</p><p>  TRUE6: ACALL BARK</p><p><b>  MOV A,R2</b></p><p><b>  MOV R6,A</b></p>

56、<p>  MOV R3,#06H</p><p><b>  CLR OK</b></p><p>  AJMP COUNT</p><p>  TRUE7:ACALL BARK</p><p><b>  MOV A,R2</b></p><p><b&g

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

58、/b></p><p><b>  MOV R6,A</b></p><p>  MOV R3,#08H</p><p><b>  CLR OK</b></p><p>  AJMP COUNT</p><p>  ;=====犯規搶答程序=====</p>

59、;<p>  ERROR: MOV R0,#00H</p><p>  MOV TH1,#3CH</p><p>  MOV TL1,#0B0H</p><p>  MOV 34H,R3;犯規號數暫存與(34H)</p><p>  HERE: MOV A,R0</p><p>  CJNE A,#06H

60、,FLASH;0.3s 向下運行->滅并停響</p><p><b>  CLR RING</b></p><p>  MOV R3,#0AH</p><p>  MOV R4,#0AH</p><p>  MOV R5,#0AH;三燈全滅</p><p>  AJMP CHECK1<

61、/p><p>  FLASH: CJNE A,#0CH,CHECK1;下面是0.8s 的情況,響并顯示號數并清R0,重新計</p><p><b>  SETB RING</b></p><p>  MOV R0,#00H</p><p>  MOV R3,34H;取回號數</p><p>  MOV

62、 R5,#0BH</p><p>  MOV R4,#0BH;顯示FF 和號數</p><p>  AJMP CHECK1</p><p>  CHECK1: JNB P3.1,QUIT1</p><p>  ACALL DISPLAY</p><p><b>  AJMP HERE</b><

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

64、/P2 低三位做位選碼輸出,</p><p><b>  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 DELAY

65、2</p><p>  MOV DPTR,#DAT2</p><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>

66、<p>  ACALL DELAY2</p><p><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>  

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

68、;4","5","6","7","8","9","滅","F"</p><p>  DAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H</p><p>  ;第一個為零,其他與上相同

69、,因為十位如果為零顯示熄滅</p><p>  ;====加減時間延時(起到不會按下就加N 個數)======</p><p>  DELAY1: MOV 35H,#08H</p><p>  LOOP0: ACALL DISPLAY</p><p>  DJNZ 35H,LOOP0</p><p><b>

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

71、JNZ 32H,LOOP</p><p><b>  RET</b></p><p>  ;=====延時4236 個機器周期(顯示用到)=====</p><p>  DELAY2: MOV 32H,#43H</p><p>  LOOP3: MOV 33H,#1EH</p><p>  MOV

72、 A,R7 ;每隔60~70 個機器周期讀一次P1 口,全為1 時為無效數</p><p>  據,繼續讀,有一個不為1 時,轉到正常搶答處理</p><p>  JNZ AAAA1 ;沒讀到有效數據時繼續轉到AAAA1</p><p>  LOOP2: DJNZ 33H,LOOP2</p><p>  DJNZ 32H,LOOP3</

73、p><p><b>  RET</b></p><p>  ;=====讀搶答按鍵數據口程序=====</p><p>  ;由于在讀搶答數據口的時候,單片機首先進入倒計時程序,再調用顯示程序,最后才檢測</p><p><b>  按鍵口</b></p><p>  ;然而在檢

74、測按鍵口時動態掃描要調用三次(4ms)延時程序.這樣就會導致讀數據口出現滯后,</p><p>  造成1 號優先最高.8 號最低.</p><p>  ;故采用在延時子程序中加了讀數據口程序.保證了靈敏度和可靠性</p><p>  AAAA1: MOV A,P1</p><p>  CJNE A,#0FFH,AA1 ;當不全為1 時的數據

75、為有效數據</p><p>  AA0: MOV 36H,A ;將有效數據送到36H 暫存</p><p>  AJMP LOOP2</p><p>  AA1: DEC R7</p><p><b>  AJMP AA0</b></p><p>  BARK: SETB RING</p&g

76、t;<p>  ACALL DELAY1</p><p>  ACALL DELAY1</p><p>  CLR RING;按鍵發聲</p><p><b>  RET</b></p><p>  CPL P3.6;RING 標志位為1 時候P3.6 口不短取反使喇叭發出一定頻率的聲音</p>

77、<p><b>  OUT: RETI</b></p><p>  ;=====T1 溢出中斷(計時程序)=====</p><p>  T1INT: MOV TH1,#3CH</p><p>  MOV TL1,#0B0H</p><p><b>  INC R0</b></p

78、><p><b>  RETI</b></p><p><b>  END</b></p><p><b>  心得體會</b></p><p>  通過這次試驗學會單片機開發過程所用的軟件,并加深對單片機各引腳及內部存儲結構的理解。設計以及制作過程遇到很多問題,需要自己去查找資料

溫馨提示

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

評論

0/150

提交評論