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

📄 mcu51.asm

📁 用于单片机键盘扩展,由于单片机的扩展接口少,而采用这种方法 的,8155用于扩展,
💻 ASM
字号:
        KM EQU 00H ; 设定标志位  ”0“是锁键盘”1“解锁
    DERECT EQU 01H  ;0时左移动,1时候右移
         KP EQU 02H ; 设定标志位  "0"是长按,“1”是短按
         ORG 0000H
         LJMP MAIN

         ORG 000BH;开中断
         LJMP PTT0

   MAIN:MOV  R2,#5
DL21:MOV  R4,#200
DL41:MOV  R5,#200
DL51:DJNZ R5,DL51
    DJNZ R4,DL41
    DJNZ  R2,DL21
        MOV DPTR ,#7F00H
        MOV A   ,#03H
        MOVX @DPTR ,A    ;8155初始化
        MOV  76H,#00H    ;4
        MOV  77H,#00H    ;3
        MOV  78H,#00H    ;2
        MOV  79H,#00H   ;低位显示缓冲区

        MOV  40H,#12H
        MOV  41H,#00H
        MOV  42H,#13H
        MOV  43H,#0EH
        MOV  44H,#11H
        MOV  45H,#14H
        MOV  46H,#00H
        MOV  47H,#13H

        MOV  48H,#11H

        MOV  49H,#15H
        MOV  4AH,#01H
        MOV  4BH,#01H
        MOV  4CH,#00H
        MOV  4DH,#03H
        MOV  4EH,#00H
        MOV  4FH,#00H
        MOV  50H,#05H
        MOV  51H,#03H
        MOV  52H,#01H
        MOV  53H,#11H
        MOV  54H,#11H
        MOV  55H,#11H                ; 键值保存区
        MOV  R2 ,#05H   ; 显示次数

        SETB KM         ;清设定标志位
        
        MOV TMOD,#01H ;中断初始化
        MOV TH0,#3CH
        MOV TL0,#0B0H
        SETB ET0
        SETB EA
        MOV  60H,#50

   RD:
        LCALL RDKEY
        SUBB  A,#0AH    ;

        JNB   KP ,LONG  ;判断是否长按键
        JNC   GN        ;判断是否为功能键
        JNB   KM ,RD    ;判断是否在设定状态


        MOV   76H,77H
        MOV   77H,78H
        MOV   78H,79H
        MOV   79H,30H
        SJMP   RD

  GN :
       MOV   DPTR,#TAB1;GAI
       MOV   A, 30H
       SUBB  A ,#0AH
       MOV   B, #03H
       MUL   AB
       JMP  @A+DPTR



 PKA : LCALL FUN_A
      LJMP RD

 PKB :LCALL FUN_B
      LJMP RD

 PKC :LCALL FUN_C
      LJMP RD

 PKD : LCALL FUN_D
       LJMP RD  ;设定键



PKE :
       MOV  76H,#11H
        MOV  77H,#11H
        MOV  78H,#11H
        MOV  79H,#11H
       SJMP RD  ;清零


 PKF : CPL KM
       JNB KM,PKF_LOP
        MOV  76H,#10H
        MOV  77H,#10H
        MOV  78H,#10H
        MOV  79H,#10H
PKF_LOP: SJMP RD ;  开解锁



LONG : SETB  KP
       MOV   DPTR,#TAB2
       MOV   A, 30H
       SUBB  A ,#0AH
       MOV   B, #03H
       MUL   AB
       JMP  @A+DPTR



 PKA_L : LCALL FUN_B
      LJMP RD

 PKB_L :LCALL FUN_A
      LJMP RD

 PKC_L :LCALL FUN_D
      LJMP RD

 PKD_L: LCALL FUN_C
       LJMP RD  ;设定键









FUN_A:
        MOV  76H,#11H
        MOV  77H,#11H
        MOV  78H,#11H
        MOV  79H,#11H
        MOV  R1,#40H
  LOP_A:
       JB  DERECT,LOP_B
        MOV   76H,77H
        MOV   77H,78H
        MOV   78H,79H
        MOV   A,@R1
        MOV   79H,A
        LCALL   DL500MS
        INC   R1
        LCALL  KS
        JNZ   OUT_A
       CJNE   R1,#56H,LOP_A
        MOV   R1,#40H
        JMP   FUN_A
  OUT_A:RET
  FUN_B:    CPL  DERECT
        JNB  DERECT,LOP_A
        DEC R1
         DEC R1
        DEC R1
  LOP_B:MOV  79H,78H
        MOV  78H,77H
        MOV  77H,76H
        MOV   A,@R1
        MOV   76H,A
        LCALL   DL500MS
        DEC   R1
        LCALL  KS
        JNZ   OUT_A
       CJNE   R1,#39H,LOP_B
        MOV   R1,#55H
        JMP   LOP_B
        RET


 RDKEY:  LCALL  DIS
         LCALL  KS     ;有键闭合否
         JZ     RDKEY
         LCALL  DIS  ;调用延时去抖动
         LCALL  KS
         JZ     RDKEY ;  键是否还闭合
         MOV    R3 ,#0F7H ;开始查键
         MOV    R4 ,#00H


 KEY1:  MOV  DPTR ,#7F01H
        MOV  A    ,R3
        MOVX @DPTR,A
        INC   DPTR
        INC   DPTR
        MOVX  A ,@DPTR
        JB   ACC.0,ONE
        MOV  A    ,#00H
        SJMP  PADD

 ONE:   JB  ACC.1,TWO
        MOV  A,#04H
        SJMP PADD

 TWO:   JB  ACC.2,THR
        MOV  A  ,#08H
        SJMP  PADD

 THR:   JB  ACC.3,NEXT
        MOV  A ,#0CH
 PADD:  ADD  A,R4
        PUSH   ACC
        

        SETB TR0
KEY2:   LCALL  DIS
        LCALL  KS
        JNZ   KEY2
        CLR   TR0
        MOV   60H,#50
        MOV TH0,#3CH
        MOV TL0,#0B0H
        POP ACC
        MOV   30H ,A
          
        RET

 NEXT:  INC  R4
        MOV  A,R3
        RR   A
        MOV  R3,A
        JB   ACC.7,KEY1
        SJMP  RDKEY



 DIS:   MOV  R0,#79H
        MOV  R5,#0F7H

 DIS1:  MOV  A,@R0
 MOV   DPTR ,#TAB
        MOVC  A,@A+DPTR
        MOV  DPTR ,#7F02H
        MOVX  @DPTR,A
        DEC   DPL
        MOV   A,R5
        MOVX  @DPTR,A
        RR    A
        MOV   R5,A
        DEC   R0
        LCALL DLY1MS
        JB    ACC.7,DIS1
        CLR  A
        MOV  DPTR ,#7F02H
        MOVX @DPTR,A
        RET

 DLY1MS: MOV R6,#10
   DLY2: MOV  R7,#100
   DLY1:DJNZ R7 ,DLY1
        DJNZ R6 ,DLY2
        RET

  KS:MOV A,#00H
     MOV DPTR,#7F01H
    MOVX @DPTR,A
     INC DPTR
     INC DPTR
    MOVX A,@DPTR
     CPL A
     ANL A,#0FH
     RET

 DL500MS:MOV R2,#50
LOP_DL:LCALL DIS
        DJNZ R2,LOP_DL
        RET

 FUN_C: INC 79H
        MOV A,79H
       SUBB A,#0AH
         JC OUT_C
        MOV 79H,A
        INC 78H
        MOV A,78H
       SUBB A,#0AH
         JC OUT_C
        MOV 78H,A
        INC 77H
        MOV A,77H
       SUBB A,#0AH
         JC OUT_C
        MOV 77H,A
        INC 76H
        MOV A,76H
        SUBB A,#0AH
         JC OUT_C
        MOV  76H,#09H
        MOV  77H,#09H
        MOV  78H,#09H
        MOV  79H,#09H
  OUT_C:RET


 FUN_D: DEC 79H
        MOV A,79H
        JNB ACC.7,OUT_D
        MOV 79H,#9
        DEC 78H
        MOV A,78H
        JNB ACC.7,OUT_D
        MOV 78H,#9
        DEC 77H
        MOV A,77H
        JNB ACC.7,OUT_D
        MOV 77H,#9
        DEC 76H
        MOV A,76H
        JNB ACC.7,OUT_D
        MOV  76H,#00H
        MOV  77H,#00H
        MOV  78H,#00H
        MOV  79H,#00H
  OUT_D:RET

PTT0:MOV TH0,#3CH
     MOV TL0,#0B0H
     DJNZ 60H,PRETI
     MOV 60H,#50
     CLR KP
     CLR TR0
PRETI:RETI

  TAB2:  LJMP PKA_L
         LJMP PKB_L
         LJMP PKC_L
         LJMP PKD_L


  TAB1:  LJMP PKA
         LJMP PKB
         LJMP PKC
         LJMP PKD
         LJMP PKE
         LJMP PKF


  TAB:  DB  3FH 06H 5BH 4FH 66H 6DH 7DH 07H
        DB  7FH 6FH 77H 7CH 39H 5EH 79H 71H
        DB  40H 00H 38H 3EH 6EH 40H                  ;-, ,L,U,Y,S

⌨️ 快捷键说明

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