?? 8255.asm
字號:
CODE SEGMENT
;MAIN PROC FAR
ASSUME CS:CODE,DS:CODE
ORG 100H
START: MOV AX,CODE
MOV DS,AX
MOV DX,303H ;8255A命令口
MOV AL,10001000B ;工作方式字
OUT DX,AL ;A口0方式,C4-C7輸入,C0-C3輸出
;檢查是否有按鍵按下
BEGIN: MOV CX,4
MOV AL,00H
L0: OUT DX,AL ;循環輸出掃描碼,使所有行線C0-C3為0
ADD AL,02H
LOOP L0
WT: MOV DX,302H
IN AL,DX ;讀入列線C4-C7狀態,檢查是否有列線為0
AND AL,0FH
CMP AL,0FH
JZ WT
;延時去抖動
MOV CX,7FFH
L1: LOOP L1
;識別被按下的鍵
MOV BL,4 ;行數送BL
MOV BH,4 ;列數送BH
MOV AL,0FEH ;掃描碼,0行為0?????
MOV CL,0FH ;列線屏蔽碼送CL
MOV CH,0FFH ;置鍵號初值為-1
L2: OUT DX,AL ;掃描其中一行
ROL AL,1
MOV AH,AL ;修改掃描碼并送AH保存
IN AL,DX
AND AL,CL
CMP AL,CL ;讀入列線值,檢查是否有列線為0
JNZ L3 ;有列線為0時轉去找該列線
ADD CH,BH ;否則,指向該行末列鍵號
MOV AL,AH ;取回掃描碼
DEC BL
JNZ L2 ;行數減1,未完轉下一行
JMP BEGIN
L3: INC CH ;鍵號加1,指向本行首列鍵號
RCR AL,1
JC L3 ;該列非0,檢查下一列
MOV AL,CH ;該列為0,鍵號送AL
;JMP KEYTABLE ;轉查找鍵盤編碼表子程序,獲取與鍵功能對應的編碼
MOV AH,4CH
INT 21H ;返回DOC
;MAIN ENDP
;KEYTABLE PROC FAR ;AH存放行號,Al存放列號
;MOV DX,350H ;點亮LED
CODE ENDS ;代碼段結束
END START ;程序結束
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -