⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qiangdaqi.txt

📁 有一个主持人控制开关和6路抢答按扭
💻 TXT
字号:
         OK EQU 20H 

         RING EQU 22H 

         ORG 0000H 

         AJMP MAIN 

         ORG 0003H 

         AJMP INT0SUB 

         ORG 000BH 

         AJMP T0INT 

         ORG 0013H 

         AJMP INT1SUB 

         ORG 001BH 

         AJMP T1INT 

         ORG 0040H 

MAIN:    MOV R1,#30

         MOV R2,#60

         MOV TMOD,#11H

         MOV TH0,#0F0H 

         MOV TL0,#0FFH

         MOV TH1,#3CH 

         MOV TL1,#0B0H 

         SETB EA 

         SETB ET0 

         SETB ET1 

         SETB EX0 

         SETB EX1 

         CLR OK 

         CLR RING 

         SETB TR1 

         SETB TR0 
;=====查询程序===== 

START:    MOV R5,#0BH 

          MOV R4,#0BH 

          MOV R3,#0BH 

          ACALL DISPLAY

          JB P3.0,NEXT

          ACALL DELAY 

          JB P3.0,NEXT

          ACALL BARK

          MOV A,R1 

          MOV R6,A 

          SETB OK 

          MOV R7,#01H  

          MOV R3,#0AH

          AJMP 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 
   
          AJMP START 

;=====非法抢答处理程序===== 

  FALSE1: MOV R3,#01H 

          AJMP ERROR 

  FALSE2: MOV R3,#02H 

          AJMP ERROR 

  FALSE3: MOV R3,#03H 

          AJMP ERROR 

  FALSE4: MOV R3,#04H 

          AJMP ERROR 

  FALSE5: MOV R3,#05H 

          AJMP ERROR 

  FALSE6: MOV R3,#06H 

          AJMP ERROR 

  FALSE7: MOV R3,#07H 

          AJMP ERROR 

  FALSE8: MOV R3,#08H 

          AJMP ERROR 

;=====INT0(抢答时间 R1 调整程序)===== 

  INT0SUB:MOV A,R1 

          MOV B,#0AH 

          DIV AB 

          MOV R5,A 

          MOV R4,B 

          MOV R3,#0AH 

          ACALL DISPLAY

          ACALL DELAY 

          JNB P3.4,INC0 

          ACALL DELAY 

          JNB P3.5,DEC0

	  ACALL DELAY 

          JNB P3.1,BACK0

          AJMP INT0SUB 

    INC0: MOV A,R1 

          CJNE A,#63H,ADD0  

          MOV R1,#00H 

          ACALL DELAY1 

          AJMP INT0SUB 

    ADD0: INC R1 

          ACALL DELAY1 

          AJMP INT0SUB 

    DEC0: MOV A,R1 

          JZ SETR1 

          DEC R1 

          ACALL DELAY1 

          AJMP INT0SUB 

    SETR1:MOV R1,#63H 

          ACALL DELAY1 

          AJMP INT0SUB 

          BACK0: RETI 

;=====INT1(回答时间 R2 调整程序)===== 

INT1SUB:MOV A,R2 

        MOV B,#0AH 

        DIV AB 

        MOV R5,A 

        MOV R4,B 

        MOV R3,#0AH 

        ACALL DISPLAY 

        ACALL DELAY 

        JNB P3.4,INC1 

        ACALL DELAY 

        JNB P3.5,DEC1 

        JNB P3.1,BACK1 

        AJMP INT1SUB 

  INC1: MOV A,R2 

        CJNE A,#63H,ADD1 

        MOV R2,#00H 

        ACALL DELAY1 

        AJMP INT1SUB 

   ADD1:INC R2 

        ACALL DELAY1 

        AJMP INT1SUB 

   DEC1:MOV A,R2 

        JZ SETR2 

        DEC R2 

        ACALL DELAY1 

        AJMP INT1SUB 

  SETR2:MOV R2,#63H 

        ACALL DELAY1 

        AJMP INT1SUB 

  BACK1:RETI 

;=====倒计时程序(抢答倒计时和回答倒计时都跳到改程序)===== 

 REPEAT:MOV A,R2   

        MOV R6,A 

        CLR RING 

 COUNT: MOV R0,#00H

        MOV TH1,#3CH 

        MOV TL1,#0B0H 

RECOUNT:MOV A,R6

        MOV B,#0AH 

        DIV AB

        MOV 30H,A

        MOV 31H,B

        MOV R5,30H 

        MOV R4,31H 

        MOV A,R6 

        SUBB A,#07H 

        JNC LARGER 

        MOV A,R0 

        CJNE A,#0AH,FULL 

        CLR RING 

        AJMP CHECK 

   FULL:CJNE A,#14H,CHECK

        SETB RING 

        MOV A,R6 

        JZ QUIT

        MOV R0,#00H 

        DEC R6

        AJMP CHECK 

LARGER: MOV A,R0 

        CJNE A,#14H,CHECK

        DEC R6 

        MOV R0,#00H 

 CHECK: JNB P3.1,QUIT

        JNB OK,CHECKK  

        AJMP NEXTT 

 CHECKK:JNB P3.0,REPEAT  

 NEXTT: ACALL DISPLAY 

        JB OK,ACCOUT

        AJMP RECOUNT 

  ACCOUT:MOV A,36H 

         JNB ACC.0,TRUE1 

         JNB ACC.1,TRUE2 

         JNB ACC.2,TRUE3 

         JNB ACC.3,TRUE4 

         JNB ACC.4,TRUE5 

         JNB ACC.5,TRUE6 

         JNB ACC.6,TZ1 

         JNB ACC.7,TZ2 

         AJMP RECOUNT 

     TZ1:JMP TRUE7 

     TZ2:JMP TRUE8 

    QUIT: CLR OK

          CLR RING 

          AJMP START 

;=====正常抢答处理程序===== 

   TRUE1: ACALL BARK 

          MOV A,R2 

          MOV R6,A

          MOV R3,#01H 

          CLR OK

          AJMP COUNT 

   TRUE2:ACALL BARK 

          MOV A,R2 

          MOV R6,A 

          MOV R3,#02H 

          CLR OK 

          AJMP COUNT 

    TRUE3:ACALL BARK 

          MOV A,R2 

          MOV R6,A 

          MOV R3,#03H 

          CLR OK 

          AJMP COUNT 

    TRUE4:ACALL BARK 

          MOV A,R2 

          MOV R6,A 

          MOV R3,#04H 

          CLR OK 

          AJMP COUNT 

    TRUE5:ACALL BARK 

          MOV A,R2 

          MOV R6,A 

          MOV R3,#05H 

          CLR OK 

          AJMP COUNT 

   TRUE6: ACALL BARK 

          MOV A,R2 

          MOV R6,A 

          MOV R3,#06H 

          CLR OK 

          AJMP COUNT 

    TRUE7:ACALL BARK 

          MOV A,R2 

          MOV R6,A 

          MOV R3,#07H 

          CLR OK 

          AJMP COUNT 

    TRUE8:ACALL BARK 

          MOV A,R2 

          MOV R6,A 

          MOV R3,#08H 

          CLR OK 

          AJMP COUNT 

;=====犯规抢答程序===== 

   ERROR: MOV R0,#00H 

          MOV TH1,#3CH 

          MOV TL1,#0B0H 

          MOV 34H,R3

    HERE: MOV A,R0 

          CJNE A,#06H,FLASH

          CLR RING 

          MOV R3,#0AH 

          MOV R4,#0AH 

          MOV R5,#0AH

          AJMP CHECK1 

   FLASH: CJNE A,#0CH,CHECK1 

          SETB RING 

          MOV R0,#00H 

          MOV R3,34H

          MOV R5,#0BH 

          MOV R4,#0BH

          AJMP CHECK1 

   CHECK1:JNB P3.1,QUIT1 

          ACALL DISPLAY 
 
          AJMP HERE 

   QUIT1: CLR RING 

          CLR OK 

          AJMP START 

;=====显示程序===== 

  DISPLAY:MOV DPTR,#DAT1 

          MOV A,R3 

          MOVC A,@A+DPTR 

          MOV P2,#0fbH

          MOV P0,A 

          ACALL DELAY2 

          MOV DPTR,#DAT2 

          MOV A,R5 

          MOVC A,@A+DPTR 

          MOV P2,#0feH

          MOV P0,A 

          ACALL DELAY2 

          MOV A,R4 

          MOVC A,@A+DPTR 

          MOV P2,#0fdH

          MOV P0,A 

          ACALL DELAY2 

          RET 

DAT1:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,00H

;"灭","1","2","3","4","5","6","7","8","9","灭","F" 

DAT2:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,00H
;第一个为零,其他与上相同,因为十位如果为零显示熄灭 

;====加减时间延时(起到不会按下就加 N 个数)====== 

  DELAY1: MOV 35H,#08H 

   LOOP0: ACALL DISPLAY 

          DJNZ 35H,LOOP0 

          RET 

;=====延时 4236 个机器周期(去抖动用到)===== 

   DELAY: MOV 32H,#12H 

    LOOP: MOV 33H,#0AFH 

   LOOP1: DJNZ 33H,LOOP1 

          DJNZ 32H,LOOP 

          RET 

;=====延时 4236 个机器周期(显示用到)===== 

  DELAY2: MOV 32H,#43H 

  LOOP3:  MOV 33H,#1EH 

          MOV A,R7 

          JNZ AAAA1  
                                                               
          LOOP2: DJNZ 33H,LOOP2 

          DJNZ 32H,LOOP3 

          RET 

;=====读抢答按键数据口程序===== 


   AAAA1: MOV A,P1 

          CJNE A,#0FFH,AA1   

     AA0: MOV 36H,A   

          AJMP LOOP2 

     AA1: DEC R7 

          AJMP AA0 

   ;=====发声程序===== 

    BARK: SETB RING 

          ACALL DELAY1 

          ACALL DELAY1 

          CLR RING

          RET 

;=====TO 溢出中断(响铃程序)===== 

   T0INT: MOV TH0,#0ECH 

          MOV TL0,#0FFH 

          JNB RING,OUT; 

          CPL P3.6 

     OUT: RETI 

;=====T1 溢出中断(计时程序)===== 

   T1INT: MOV TH1,#3CH 

          MOV TL1,#0B0H 

          INC R0 

          RETI 

          END 



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -