📄 8255.asm
字号:
DATA SEGMENT
PC8255A EQU 2CH
PC8255B EQU 2DH
PC8255C EQU 2EH
PC8255CTL EQU 2FH
CONVERSE DB 00H
MATRIX_TABLE DB 10000000B,00000000B,00000000B ;COL1
DB 00110110B,10110110B,00000000B ;COL2
DB 00110110B,00110110B,10000000B ;COL3
DB 00110110B,00110110B,01000000B ;COL4
DB 00110000B,00110000B,00100000B ;COL5
DB 00110000B,00000111B,00010000B ;COL6
DB 00110110B,01110111B,00001000B ;COL7
DB 00110110B,01110111B,00000100B ;COL8
DB 00110110B,01110111B,00000010B ;COL9
DB 00000110B,00000000B,00000001B ;COL10
DATA ENDS
STACK1 SEGMENT STACK
STT DW 20H DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
DELAY16 PROC
PUSH CX
MOV CX,0FFFFH
D16: NOP
LOOP D16
POP CX
RET
DELAY16 ENDP
PROCESS2 PROC ;FUN OF KEY2
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
CMP CONVERSE,00H
JNZ CONVERSE1
;62/64
MOV CX,0AH
XOR SI,SI
SCANCOL: MOV AL,MATRIX_TABLE[SI]
OUT PC8255A,AL
MOV AL,MATRIX_TABLE[SI+1]
OUT PC8255B,AL
MOV AL,MATRIX_TABLE[SI+2]
OUT PC8255C,AL
ADD SI,03H
LOOP SCANCOL
JMP GO_OUT
CONVERSE1: ;64/62
;IT'S SPECAIL IN FIRST TWO SCAN
MOV AL,00000000B ;!!!!!!
OUT PC8255B,AL
MOV AL,10000000B
OUT PC8255A,AL
MOV AL,00000000B
OUT PC8255C,AL ;COL1
MOV AL,10110110B
OUT PC8255B,AL
MOV AL,00110110B
OUT PC8255A,AL
MOV AL,00000000B ;COL2
OUT PC8255C,AL
MOV CX,08H
XOR SI,SI
ADD SI,06H
SCANCOL2: MOV AL,MATRIX_TABLE[SI]
OUT PC8255B,AL
MOV AL,MATRIX_TABLE[SI+1]
OUT PC8255A,AL
MOV AL,MATRIX_TABLE[SI+2]
OUT PC8255C,AL
ADD SI,03H
LOOP SCANCOL2
GO_OUT: POP SI
POP DX
POP CX
POP BX
POP AX
RET
PROCESS2 ENDP
BEGIN: MOV AX,DATA
MOV DS,AX
MOV AX,1000H
MOV ES,AX
MOV AL,10000000B ;INITIALIZE 8255
OUT PC8255CTL,AL
AGAIN: CALL PROCESS2
MOV DL,CONVERSE
XOR DL,00000001B
MOV CONVERSE,DL
CALL DELAY16
JMP AGAIN
INT 20H
CODE ENDS
END BEGIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -