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				;程序结束