RUTINA
Descripcin: Para controlar el teclado, los puertos del C conectados a las filas se
programan como salidas y los conectados a las columnas del teclado se programan como
entradas, tambin se activan las resistencias de polarizacin internas en los puertos de
salida. Esto se hace mediante la llamada a la etiqueta "KB_Port" que inicializa los puertos
para ser usados con el teclado matricial.
KB_Port
Ahora para saber que tecla esta siendo pulsada necesitamos escanear el teclado, y esto se
consigue mediante la siguiente rutina que consiste en ir poniendo una a una las lneas RB0
a RB3 (conectadas a las filas del teclado) a nivel bajo ya que estas salidas tienen
conectada la resistencia de polarizacin a Vcc y por lo tanto estn siempre a nivel lgico
alto. Cada vez que una fila se pone a nivel bajo se hacen 4 comprobaciones para ver si
una de las cuatro columnas se a puesto a nivel bajo y as saber la tecla pulsada.
KB_Scan
CLRF
INCF
MOVLW
MOVWF
NOP
Cheq_Col BTFSS
GOTO
INCF
BTFSS
GOTO
INCF
BTFSS
GOTO
INCF
BTFSS
GOTO
INCF
Tecla
Tecla,f
0Eh
PORTB
PORTB,4
antirebotes
Tecla,f
PORTB,5
antirebotes
Tecla,f
PORTB,6
antirebotes
Tecla,f
PORTB,7
antirebotes
Tecla,f
Ultima_Tecla
MOVLW d'17'
SUBWF Tecla,w
BTFSC
STATUS,Z
GOTO
NTeclas
BSF
STATUS,C
RLF
PORTB,f
GOTO
Cheq_Col
NTeclas CLRF Tecla
RETURN
antirebotes
;Escanea el teclado
;Borra Tecla y
;prepara Tecla para primer cdigo.
;Saca 0 a la primera fila
;de la Puerta B
;Nada para estabilizacin de seal.
;Primera columna = 0
;Sale si se ha pulsado tecla.
;Si no tecla pulsada, incrementa tecla.
;Segunda columna = 0
;Sale si se ha pulsado tecla.
;Si no tecla pulsada, incrementa tecla.
;Tercera columna = 0
;Sale si se ha pulsado tecla.
;Si no tecla pulsada, incrementa tecla.
;Cuarta columna = 0
;Sale si se ha pulsado tecla.
;Si no tecla pulsada, incrementa Tecla.
;comprueba si se a escaneado todo el teclado
;Carga W con el nmero de Teclas + 1.
;y lo compara con el valor actual de Tecla.
;Si Tecla + 1 = valor actual.
;No ha sido pulsada ninguna tecla.
;Pone a 1 Bit C.
;as la Fila 1 pasa a 1 con la rotacin a izqda.
;Coloca variable Tecla a 0
;y regresa.
Espera1 BTFSS
GOTO
Espera2 BTFSS
GOTO
Espera3 BTFSS
GOTO
Espera4 BTFSS
GOTO
MOVF
CALL
PORTB,4
Espera1
PORTB,5
Espera2
PORTB,6
Espera3
PORTB,7
Espera4
Tecla,w
T_Conv
T_Conv ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
PCL,1
'0'
'1'
'4'
'7'
'A'
'2'
'5'
'8'
'0'
'3'
'6'
'9'
'B'
'F'
'E'
'D'
'C'
;Tecla n0 = 0
;Tecla n1 = 1
;Tecla n2 = 4
;Tecla n3 = 7
;Tecla n4 = A
;Tecla n5 = 2
;Tecla n6 = 5
;Tecla n7 = 8
;Tecla n8 = 0
;Tecla n9 = 3
;Tecla n10 = 6
;Tecla n11 = 9
;Tecla n12 = B
;Tecla n13 = F
;Tecla n14 = E
;Tecla n15 = D
;Tecla n16 = C
PROYECTO
CUESTIONARIO
Cmo modificara el programa anterior a fin de obtener el mismo
resultado pero usando interrupciones?
Cul es la razn por el cual se usa un teclado 4x4 en un PIC16F84A?
Disee un programa que guarde en la memoria EEPROM el valor de la
tecla pulsada en el Teclado Hexadecimal.
Por qu se usan las resistencias internas del Co activadas por
software (registro OPTION Bit RBPU)?
Disee un programa usando el teclado 4x4 de tal modo que cuando se
pulse pueda ser mostrado en el Display a 7 segmentos. Este programa
debe usar subrutinas del manejo del teclado
CONCLUSIONES