P. 1
Teclado Matricial 4x4

Teclado Matricial 4x4

4.0

|Views: 21.256|Likes:
Publicado porapi-27535945

More info:

Published by: api-27535945 on Oct 14, 2008
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOC, PDF, TXT or read online from Scribd
See more
See less

03/18/2014

pdf

text

original

Teclado Matricial 4x4

Descripción: Dispositivo de entrada de datos que consta de 16 teclas o pulsadores, dispuestos e interconectados en filas y columnas. Dispone de un conector SIL (Single In Line) macho de 8 pines que se corresponden con las 4 filas y las cuatro columnas de las que dispone.

Funcionamiento: En la siguiente figura vemos el esquema de conexionado interno del teclado matricial y sus correspondientes pines de salida numerados de izquierda a derecha mirando el teclado tal y como se ve en la foto anterior. Cuando se presiona un pulsador se conecta una fila con una columna, teniendo en cuenta este hecho es muy fácil averiguar que tecla fue pulsada. También podemos ver el conexionado típico con el puerto B del µC PIC. Las resistencias de 2k2 son necesarias para poder compartir el puerto del pic independientemente del teclado y por ejemplo poder conectar un LCD o una barra de leds al mismo tiempo. Durante la fase de lectura del teclado la mitad de la puerta B es configurada como entrada y la otra mitad como lectura y durante la escritura en el lcd o otro sistema, la puerta B es configurada como salidas. Entonces se podrían cortocircuitar accidentalmente las salidas de los puertos provocando su destrucción, si pulsásemos alguna tecla es ese momento con lo que al poner estas resistencias evitamos este hecho y así si se produjera el cortocircuito tan solo circularía una pequeña corriente y el puerto del µC no correría ningún riesgo. La siguiente librería configura las salidas y entradas para usar el teclado escanea las teclas y si es pulsada alguna retorna el valor de tecla en modo hexadecimal para ser mostrado directamente en un display LCD. Las variables y subrutinas utilizadas son KB_Port KB_Scan Tecla Configura los puertos B del PIC para ser usados con el teclado. Escanea todas las teclas y devuelve la tecla pulsada en formato Hexadecimal. Variable en donde se devuelve la tecla pulsada

RUTINA

Descripción: 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, también se activan las resistencias de polarización 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 ;Inicializa la puerta B para las entradas del ;teclado. Programa RB0-3 como salidas y RB4-7 ;entradas con las resistencias de polarización ;habilitadas------------------------------------------BSF STATUS,RP0 ;Selecciona Pagina 1 (Banco) MOVLW 0F0h ;PB4-7 como entradas MOVWF TRISB ;y PB0-3 como salidas BSF OPCION,RBPU ;Habilita R de polarización en entradas BCF STATUS,RP0 ;Vuelve a la pagina 0 (Banco) RETURN ;Retorna.

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 líneas RB0 a RB3 (conectadas a las filas del teclado) a nivel bajo ya que estas salidas tienen conectada la resistencia de polarización a Vcc y por lo tanto están siempre a nivel lógico 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 ;Escanea el teclado ;Borra Tecla y ;prepara Tecla para primer código. ;Saca 0 a la primera fila ;de la Puerta B ;Nada para estabilización de señal. ;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 n£mero 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 rotaci¢n a izqda. ;Coloca variable Tecla a 0 ;y regresa.

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

;ahora se espera a que la tecla sea soltada para evitar rebotes ;y reactivaciones de tecla ;esta parte puede ser eliminada si para nuestro proyecto no es necesaria ;o es un inconveniente. PORTB,4 Espera1 PORTB,5 Espera2 PORTB,6 Espera3 PORTB,7 Espera4 ;Si no se suelta la tecla FILA 1 ;vuelve a esperar. ;Si no se suelta la tecla FILA 2 ;vuelve a esperar. ;Si no se suelta la tecla FILA 3 ;vuelve a esperar. ;Si no se suelta la tecla FILA 4 ;vuelve a esperar.

Espera1 BTFSS GOTO Espera2 BTFSS GOTO Espera3 BTFSS GOTO Espera4 BTFSS GOTO

MOVF CALL

Tecla,w T_Conv

;pone en w el numero contenido en la variable ;llama a la tabla de conversion y retorna

MOVWF Tecla RETURN

;con el valor en hexadecimal y lo pone en la variable. ;vuelve al programa principal que hizo la llamada

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 nº0 = 0 ;Tecla nº1 = 1 ;Tecla nº2 = 4 ;Tecla nº3 = 7 ;Tecla nº4 = A ;Tecla nº5 = 2 ;Tecla nº6 = 5 ;Tecla nº7 = 8 ;Tecla nº8 = 0 ;Tecla nº9 = 3 ;Tecla nº10 = 6 ;Tecla nº11 = 9 ;Tecla nº12 = B ;Tecla nº13 = F ;Tecla nº14 = E ;Tecla nº15 = D ;Tecla nº16 = C

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->