系統程序 P1.0為開始搶答,P1.7為停止,P1.1-P1.6為六路搶答輸入,數碼管段選P0口,為選P2口,蜂鳴器輸出為P3.6口。 OK EQU 20H; 搶答開始標志位 RING EQU 22H; 響鈴標志位 ORG 0000H AJMP MAIN ORG 0003H AJMP INT0SUB ORG 000BH AJMP TOINT ORG 0013H AJMP INT1SUB ORG 001BH AJMP T1INT ORG 0040H MAIN: MOV R1, #0FH; 初始搶答時間為15S MOV R2,#0AH; 初始答題時間為10S MOV TMOD,#11H; 設置為定時器/模式1 MOV TH0,#0F0H MOV TL0, #0FFH; 越高發聲頻率越高,越尖 MOV TH1,#3CH MOV TL1,#0B0H; 50ms 為一次溢出中斷 SETB EA SETB ET0 SETB ET1 SETB EX0 SETB EX1; 允許四個中斷,T0/T1/INT0/INT1 CLR OK CLR RING SETB TR1 SETB TR0; 查詢程序 START: MOV R5,#0BH MOV R4,#0BH MOV R3, #0BH ACALL DISPLAY; 未開始搶答時候顯示FFF JB P3.1,NEXT ACALL DELAY JB P3.1,NEXT;如果“開始鍵”按下就向下執行, 否則跳到非法搶答查詢 ACALL BARK; 按鍵發聲 MOV A,R1 MOV R6,A; 送R1到R6,因為R1中保存了搶答時間 SETB OK;搶答標志,用于COUNT子程序中判斷是否查詢搶 答 MOV R3,0AH;搶答只顯示時,滅號數 ALMP COUNT; NEXT: JNB P1.0,FALSE1 JNB P1.1,FALSE2 JNB P1.2,FALSE3 JNB P1.3,FALSE4 JNB P1.4,FALSE5 JNB P1.5,FALSE6 JNB P1.6,FALSE7 JNB P1.7,FALSE8 正常搶答處理程序: TRUE1:ACALL BARK; 按鍵發聲 MOV A,R2 MOV R6,A; 搶答時間R2送R6 MOV R3,#01H CLR OK; 因為答題的計時不再查詢搶答,所以就鎖了搶答 AJMP COUNT TURE2:ACALL BARK; 按鍵發聲 MOV A,R2 MOV R6,A; 搶答時間R2送R6 MOV R3,#02H CLR OK; 因為答題的計時不再查詢搶答,所以就鎖了搶答 AJMP COUNT TURE3:ACALL BARK; 按鍵發聲 MOV A,R2 MOV R6,A; 搶答時間R2送R6 MOV R3,#03H CLR OK; 因為答題的計時不再查詢搶答,所以就鎖了搶答 AJMP COUNT TURE4:ACALL BARK; 按鍵發聲 MOV A,R2 MOV R6,A; 搶答時間R2送R6 MOV R3,#04H CLR OK; 因為答題的計時不再查詢搶答,所以就鎖了搶答 AJMP COUNT TURE5:ACALL BARK; 按鍵發聲 MOV A,R2 MOV R6,A; 搶答時間R2送R6 MOV R3,#05H CLR OK; 因為答題的計時不再查詢搶答,所以就鎖了搶答 AJMP COUNT TURE6:ACALL BARK; 按鍵發聲 MOV A,R2 MOV R6,A; 搶答時間R2送R6 MOV R3,#06H CLR OK; 因為答題的計時不再查詢搶答,所以就鎖了搶答 AJMP COUNT TURE7:ACALL BARK; 按鍵發聲 MOV A,R2 MOV R7,A; 搶答時間R2送R6 MOV R3,#02H CLR OK; 因為答題的計時不再查詢搶答,所以就鎖了搶答 AJMP COUNT TURE8:ACALL BARK; 按鍵發聲 MOV A,R2 MOV R6,A; 搶答時間R2送R6 MOV R3,#08H CLR OK; 因為答題的計時不再查詢搶答,所以就鎖了搶答 AJMP COUNT MOV A,R2 MOV R6,A MOV R3,#03# CLR OK AJMP COUNT 顯示程序: MOV A,R5 MOVC A,@A+DPTR MOV P2,#01H MOV P0,A ACALL DELAY MOV DPTR,#DAT2 MOV A,R4 MOVC A,@A+DPTR MOV P2,#02H MOV P0,A ACALL DELAY MOV A,R3 MOVC A,@A+DPTR MOV P2,#04H MOV P0,A ACALL DELAY RET DELAY1:MOV 35H,#08H LOOPO: ACALL DISPLAY DJNZ 35H,LOOPO RET 發聲程序: BARK: SETB RING ACALL DELAY1 ACALL DELAY1 CLR RING; 按鍵發聲 RET END
|