CODE如下:
DATA SEGMENT
TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,7FH,6FH 预置显示值
BUFFER DB ? 预留一个字节装键值
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA 初始化 *** 作
MOV DS,AX
SET: MOV DX,206H初始化8255
MOV AL,89H
OUT DX,AL
WAIT-IN: MOV AL,00H检测按键所有行输出0
MOV DX,2048255的 C口地址
OUT DX,AL
IN AL,DX读列线
AND AL,70H
CMP AL,70H比较是否有按键按下
JZ WAIT-IN无就等桐薯待
DONE: CALL DAELAY延时消除抖动
MOV BL,0键号初始值为0
MOV CL,0FEH扫描初始值
MOV DL,3计数值行数
SCANR: MOV AL,CL扫描一行
MOV DX,204HC口地址
OUT DX,AL
ROL AL,1修改行数
MOV CL,AL
IN AL,DX读列数
AND AL,70H
CMP AL,70H 判断列线状态
JNZ SCANL有低转
ADD BL,3没有使键号=键号值+列数
DEC DL
JNZ SCANR行未完衫亩转
JMP HANDLE扫描结束
SCANL: OR AL,0FH高位置1,避免出错
RCR AL,1
JNC HANDLE列为低,确定按键值
INC BL
JMP SCANL查找下一列
HANDLE MOV AL,BL传按键
MOV BX,OFFSET TABLE段码表首址
XLAT
MOV DX,200H A口地或轮森址
OUT DX,AL送段码
CALL DELAY
MOV AH,04H
INT 21H
CODE ENDS
END STATRT
2*2矩升拆阵键盘是不培笑谨是接P1.0~P1.3,配基程序如下:KEYS:
MOV P1,#0FH
KEYS1:
CLR P1.0
SETB P1.1
JB P1.2,KEYS11
MOV A,#1
RET
KEYS11:
JB P1.3,KEYS2
MOV A,#2
RET
KEYS2:
SETB P1.0
CLR P1.1
JB P1.2,KEY21
MOV A,#3
RET
KEY21:
JB P1.3,KEYN
MOV A,#4
RET
KEYN:
MOV A,#0
RET
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)