Con esta rutina podras leer un teclado matricial de 16 teclas (4 renglones y 4 columnas). En el puerto P2 del microcontrolador de la familia MC51 se conecta el teclado. El código de la tecla solicitada se regresa en el acumulador (de 00H a 0FH para teclas individuales, 10H si no se oprimio ninguna tecla y 11H si se oprimieron mas de una tecla). Puedes hacer uso del Sistema de Desarrollo mC51. La distribución de las teclas es la siguiente:
;**************************************
; ------- Rutina para detectar una tecla -------
;-----------------------------------------------------
TECLADO:
mov R6,#0EFH ;inicia las columnas (nibble alto)
mov A,R6
CHK_TEC:
mov P2,A ;envia columna
djnz R7,$
mov A,P2 ;lee el renglón
mov R5,A
anl A,#0FH
cjne A,#0FH,TEC_00 ;verifica si hay tecla
mov A,R6
rl A ;siguiente columna
mov R6,A
cjne A,#0FEH,CHK_TEC ;verifica última columna
mov A,#10H ;código de no_tecla
ret
;------------------------------------------------------------
TEC_00:
mov A,R5
cjne A,#7EH,TEC01
mov A,#0FH
ret
TEC_01:
cjne A,#7DH,TEC02
mov A,#0BH
ret
TEC02:
cjne A,#7BH,TEC03
mov A,#00H
ret
TEC03:
cjne A,#77H,TEC04
mov A,#0AH
ret
TEC04:
cjne A,#0BEH,TEC05
mov A,#0EH
ret
TEC05:
cjne A,#0BDH,TEC06
mov A,#09H
ret
TEC06:
cjne A,#0BBH,TEC07
mov A,#08H
ret
TEC07:
cjne A,#0B7H,TEC08
mov A,#07H
ret
TEC08:
cjne A,#0DEH,TEC09
mov A,#0DH
ret
TEC09:
cjne A,#0DDH,TEC0A
mov A,#06H
ret
TEC0A:
cjne A,#0DBH,TEC0B
mov A,#05H
ret
TEC0B:
cjne A,#0D7H,TEC0C
mov A,#04H
ret
TEC0C:
cjne A,#0EEH,TEC0D
mov A,#0CH
ret
TEC0D:
cjne A,#0EDH,TEC0E
mov A,#03H
ret
TEC0E:
cjne A,#0EBH,TEC0F
mov A,#02H
ret
TEC0F:
cjne A,#0E7H,TEC_ERR
mov A,#01H
ret
TEC_ERR:
mov A,#11H ;código de más de una tecla
ret