www.pudn.com > 8255接口程序.rar > 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 ;程序结束