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

📄 8155控制led显示和键盘扫描程序.asm

📁 通过51控制8155
💻 ASM
字号:
 ;键盘和8155的PA和PB口相连,PA口的地址为7F01H
 ;键盘扫描程序如下:
       ORG    0000H
       AJMP   START
       ORG    0100
START: MOV    40H,#70H	       ;键列扫描码,分别从第一列到第四列
       MOV    41H,#0B0H
       MOV    42H,#0D0H
       MOV    43H,#0E0H

       MOV    44H,#71H         ;0的键值码
       MOV    45H,#0B1H
       MOV    46H,#0D1H
       MOV    47H,#0E1H
       MOV    48H,#72H
       MOV    49H,#0B2H
       MOV    4AH,#0D2H
       MOV    4BH,#0E2H
       MOV    4CH,#74H
       MOV    4DH,#0B4H
       MOV    4EH,#0D4H
       MOV    4FH,#0E4H
       MOV    50H,#78H
       MOV    51H,#0B8H
       MOV    52H,#0D8H
       MOV    53H,#0E8H
       MOV    60H,#00H           ;存入键码

       MOV    R0,#61H
LOK0:  MOV    A,#0               ;显示缓冲区清0
       MOV    @R0,A
       INC    R0
       CJNE   R0,#65H,LOK0
     
       MOV    DPTR,#7F00H
       MOV    A,#43H            ;定义PA,PB口为输出,PC口为输入
       MOVX   @DPTR,A

LOK1:  LCALL  DISP
       LCALL  SAO_MIAO          ;调用键盘扫描程序       
       SJMP   LOK1


DISP:
       MOV    R0,#64H           ;显示数码存放在74H~77H(BCD形式)
       MOV    R4,#7FH           ;把显示位码取到R4
LOK2:
       MOV    A,@R0
       MOV    65H,A              ;把显示数码取到65H单元
       ACALL  DISP_A_BIT
       ACALL  DELAY

       MOV    A,R4
       RR     A                 ;下一位码
       MOV    R4,A

       DEC    R0                ;下一显示数码
       CJNE   R0,#60H,LOK2
       RET



DISP_A_BIT:
       MOV    DPTR,#TABLE
       MOV    A,65H
       MOVC   A,@A+DPTR         ;取段码:TABLE+x

       MOV    DPTR,#7F01H       ;从PA口输出码值
       MOVX   @DPTR,A
       MOV    DPTR,#7F02H       ;从PB口输出位码
       MOV    A,R4
       MOVX   @DPTR,A
       RET

DELAY: MOV    66H,#2
LOK3:  MOV    67H,#0FFH
       DJNZ   67H,$
       DJNZ   66H,LOK3
       RET                      ;延迟(2us*255+2us)*2=1Ms


TABLE:
       DB  0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
       DB  80H,90H,88H,83H,0C6H,0A1H,86H,8EH,8CH


SAO_MIAO:
       ACALL  UP_DOWN
       JNZ    LOK4
TIP1:  ACALL  DISP
       AJMP   SAO_MIAO
LOK4:  ACALL  DISP
       ACALL  DISP
       ACALL  UP_DOWN
       JNZ    LOK5
       AJMP   TIP1
LOK5:  MOV    R0,#40H             ;设R0为键扫描码入口地址
LOK6:  MOV    DPTR,#7F02H         ;从PB口输出扫描码
       MOV    A,@R0
       MOVX   @DPTR,A
       MOV    DPTR,#7F03H         ;从PC口输入行的状态
       MOVX   A,@DPTR
       CPL    A
       ANL    A,#0FH
       JZ     RIGHT_MOVE
       ADD    A,@R0
       MOV    60H,A

       MOV    R5,#00H             ;键值置初值
       MOV    R1,#44H             ;键码首地址送R1,查键值
CMP:   CLR    C
       MOV    A,60H
       SUBB   A,@R1
       JNZ    LOK7
LOK8:  LCALL  DISP
       LCALL  UP_DOWN
       JNZ    LOK8
       MOV    A,R5
       MOV    64H,63H
       MOV    63H,62H
       MOV    62H,61H
       MOV    61H,A
       RET

LOK7:  INC    R5
       INC    R1
       AJMP   CMP

RIGHT_MOVE:
       INC    R0                ;修改列扫描码
       CJNE   R0,#44H,LOK6
       AJMP   SAO_MIAO

UP_DOWN:

       MOV    DPTR,#7F02H
       MOV    A,#00H           ;从PB口输出00H
       MOVX   @DPTR,A
       MOV    DPTR,#7F03H      ;从PC口输入
       MOVX   A,@DPTR
       CPL    A
       ANL    A,#0FH
       RET
       END







⌨️ 快捷键说明

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