0% encontró este documento útil (0 votos)
73 vistas14 páginas

Símbolo ASCII Infinito en Teclado 4x4

Este documento describe un informe de laboratorio sobre el manejo de un teclado matricial 4x4 utilizando los puertos de un microcontrolador PIC16F877A. Incluye el objetivo, fundamentos teóricos, diagramas de bloques y flujo, tabla de variables, programa y conclusiones. El programa utiliza los puertos C y B para leer las filas y columnas del teclado matricial 4x4 y determinar qué tecla fue presionada.

Cargado por

NicolasJacome
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
73 vistas14 páginas

Símbolo ASCII Infinito en Teclado 4x4

Este documento describe un informe de laboratorio sobre el manejo de un teclado matricial 4x4 utilizando los puertos de un microcontrolador PIC16F877A. Incluye el objetivo, fundamentos teóricos, diagramas de bloques y flujo, tabla de variables, programa y conclusiones. El programa utiliza los puertos C y B para leer las filas y columnas del teclado matricial 4x4 y determinar qué tecla fue presionada.

Cargado por

NicolasJacome
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

DEPARTAMENTO DE ELECTRICA Y ELECTRONICA

ÁREA DE SISTEMAS DIGITALES

ASIGNATURA: MICROCONTROLADORES NRC: 3220

Informe Laboratorio No. 1.3

Tema: Teclado Matricial 4x4

Docente: Ing. Carlos Ponce

Integrantes: Roger Jácome, Christian Ruales

Base Aspectos de evaluación Calificación


0.25 Fundamento teórico
Valor de los registros de
0.50
configuración
0.25 Diagrama de bloques
3 Informe
0.75 Diagrama de flujo
0.25 Tabla de asignación de variables
0.75 Programa
0.25 Conclusiones
2 Simulación
3 Funcionamiento
2 Defensa

10 Total

Sangolquí 2018

FECHA - CIUDAD
1. Tema: Manejo de un teclado matricial de 4x4

2. Objetivos

• Entender el funcionamiento de un teclado matricial utilizando los puertos del


microcontrolador PIC 16F877A
• Entender el barrido de filas y columnas de un teclado matricial para que el algoritmo descifre
que tecla fué presionada

3. Fundamento Teórico

El microcontrolador PIC16F877A cuenta con diversos puertos de entrada/salida denominados como


A, B, C, D y E. El puerto C tiene 8 líneas bidireccionales disponibles (RC0, RC1, RCn, hasta RC7),
que pueden ser usadas independientemente. El TRIS C es el registro de control asociado al puerto C,
un 1 en el Bit “x” del registro TRIS C indica que será usado como entrada la línea asociada del Puerto.
Un 0 en el bit “x” de TRIS indica que será usado como salida.

Teclado matricial 4x4

Un teclado matricial es un arreglo de botones conectados en filas y columnas, de tal manera que se
pueden leer varios botones con el mínimo número de entradas requeridas. Un teclado matricial 4×4
solamente ocupa 4 líneas de un puerto para leer las filas y otras 4 líneas para las columnas, de este
modo se pueden leer 16 teclas utilizando solamente 8 entradas (un solo puerto) de un
microcontrolador.
El funcionamiento básico del teclado matricial consiste en rastrear la unión entre una fila y una
columna, mediante un algoritmo que descifra cual tecla fue presionada.

Ilustración 1 Teclado Matricial 4x4


4. Valor de los registros de configuración

__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF

• _CONFIG: Define la palabra de configuración específica para el PIC que se esté usando .

• _XT_OSC : Se inicia con la configuración del (Oscilador o resonador cerámico ) , XT se trata de


un oscilador estándar que permite una frecuencia de reloj comprendida entre 100 KHz y 4 MHz
Existen 4 configuraciones diferentes.

Tabla 1 Configuraciones del oscilador

FOSC1 FOSC0 Modo de operación del oscilador


0 0 LP : Baja frecuencia (y bajo consumo de potencia) Cristal/Resonador
cerámico,externos ,con frecuencias comprendidas entre 32 y 200KHz
0 1 XT:Media frecuencia (y medio consumo de potencia)Cristal/Resonador
cerámico,externos , con frecuencias comprendidas entre 100KHz y 4MHz
1 0 HS: Alta frecuencia o velocidad (y alto consumo de potencia)Cristal/Resonador
cerámico, externos , con frecuencias entre 4 y 8 MHz
1 1 RC: Resistencia/Capacitor externos , formador por una resistencia y un
condensador

• _PWRTE_ON : Es el bit de activación del temporizador Power-up . Es el permiso del timer de


conexión de alimentación . Se usa para resetear el PIC cada vez que se conecta la fuente de
alimentación a nuestra aplicación.
1 PWRT Deshabilitado
0 PWRT Habilitado

• WDT_OFF : El propósito del watchdog timer (WDT) es producir un reset del


microcontrolador PIC cada cierto período de tiempo con lo cual se reinicia la ejecución del
programa, con la finalidad de evitar que el dispositivo entre en un lazo infinito (se “cuelgue”) o
se quede en una espera muy prolongada por un determinado evento que no ocurre.

1 WDT Habilitado
0 WDT Deshabilitado

• _CP_OFF: Código de protección de memoria de programa . Si no están activos cualquiera


puede leer el programa grabado en la memoria
1 Sin potección
0 Datos de la EEPROM protegidos

5. Diagrama de bloques

1
LED C0
1
LED C1
1
LED C2
1
Teclado 8
Microcontrolador LED C3
Matricial
PIC 16F877A 1
4x4
LED C4

1
LED C5
1
LED C6
1
LED C7

6. Diagrama de flujo
7. Tabla de asignación de variables

VARIABLE ESPACIO DE MEMORIA DEFINICIÓN


cont1 27H Defino variable contador 1 para
delay
cont2 28H Defino variable contador 1 para
delay
masq 29H Defino variable para
enmascarar el puerto B

8. Programa

PROCESSOR 16F877A
RADIX DEC
INCLUDE "P16F877A.INC"
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
;Inicializo constantes para 20 milisegundos
DELAY1 EQU 0x1A ;CONSTANTE PARA GENERAR DELAY
DELAY2 EQU 0x0 ;CONSTANTE PARA GENERAR DELAY
;Define variables
cont1 EQU 27H ;DEFINO VARIABLE CONTADOR1 PARA DELAY
cont2 EQU 28H ;DEFINO VARIABLE CONTADOR2 PARA DELAY
masq EQU 29H ;DEFINO VARIABLE MASQ PARA MASCARA

org 0x00 ;Inicia en el vector de reset


CLRF STATUS ;Selecciona Banco 0
BSF STATUS,RP0 ;Selecciona Banco 1
MOVLW 0x00 ;configura puerto C como salidas
MOVWF TRISC
CLRF PORTB ;Inicializa latches de datos de PORTB
BSF STATUS,RP0 ;Selecciona Banco 1
MOVLW 0xF0 ;configura RB7 hasta RB4 como entradas
MOVWF TRISB ;y RB3 hasta RB0 como salidas
BCF OPTION_REG,7 ;resistencias Pull-Up
BCF STATUS,RP0 ;regresa al Banco 0

CLRF PORTC ;Limpio PORTC


Ciclo ;Creo subrutina ciclo
MOVLW 0xFF ;Cargo valor FF hex en w
MOVWF masq ;Muevo el valor de w a variable masq
CALL Presiona ;Llama a la subtutina Presiona
SUBWF masq,1 ; ;Resto masq-w
BTFSS STATUS,Z ;Compruebo si z=1 hay tecla presionada y va a imprimir
GOTO Ciclo ;Salta a Ciclo para seguir comprobando estado de teclas
CALL Imprimir ;Llama a la subtutina Imprimir
MOVWF PORTC ;Mueve la tecla presionada al puerto C
GOTO Ciclo ;Repite el proceso

Presiona
CLRF PORTB ;activa las cuatro filas
BTFSS PORTB,7 ;lee fila de 1,2,3,A
GOTO rebo ;si se presiona llama a rutina rebo
BTFSS PORTB,6 ;lee fila de 4,5,6,B
GOTO rebo ;si se presiona llama a rutina rebo
BTFSS PORTB,5 ;lee fila de 7,8,9,C
GOTO rebo ;si se presiona llama a rutina rebo
BTFSS PORTB,4 ;lee fila de *,0,#,D
GOTO rebo ;si se presiona llama a rutina rebo
RETLW 0x0 ;no hubo tecla presionada retorna con w=0
rebo
CALL Delay20ms ;pausa de 20 milisegundos para rebotes
BTFSS PORTB,7 ;lee renglón 1,2,3,A
RETLW 0xFF ;tecla presionada, retorna con w=0xFF
BTFSS PORTB,6 ;lee renglón 4,5,6,B
RETLW 0xFF ;tecla presionada, retorna con w=0xFF
BTFSS PORTB,5 ;lee renglón 7,8,9,C
RETLW 0xFF ;tecla presionada, retorna con w=0xFF
BTFSS PORTB,4 ;lee renglón *,0,#,D
RETLW 0xFF ;tecla presionada, retorna con w=0xFF
RETLW 0x0 ;Si no se preisona nada regresa con w=0

Imprimir
;BARRIDO DE PRIMERA COLUMNA
MOVLW 11110111B ;Carga 247 decimal a w
MOVWF PORTB ;saca w para activar la primera columna por puerto B y activa la columna
1,4,7,*
BTFSS PORTB,7 ;Compara el puerto B, si se presiona 1 retorna 1 en ascii
RETLW B'110001' ;retorna codigo ascii de 1
BTFSS PORTB,6 ;Compara el puerto B, si se presiona 4 retorna 4 en ascii
RETLW B'110100' ;retorna codigo ascii de 4
BTFSS PORTB,5 ;Compara el puerto B, si se presiona 5 retorna 5 en ascii
RETLW B'110111' ;retorna codigo ascii de 7
BTFSS PORTB,4 ;Compara el puerto B, si se presiona * retorna * en ascii
RETLW B'101010' ;retorna codigo ascii de *
;BARRIDO DE SEGUNDA COLUMNA
MOVLW 11111011B ;Carga 251 decimal a w
MOVWF PORTB ;saca w para activar la segunda columna por puerto B y activa la columna
2,5,8,0
BTFSS PORTB,7 ;Compara el puerto B, si se presiona 2 retorna 2 en ascii
RETLW B'110010' ;retorna codigo ascii de 2
BTFSS PORTB,6 ;Compara el puerto B, si se presiona 5 retorna 5 en ascii
RETLW B'110101' ;retorna codigo ascii de 5
BTFSS PORTB,5 ;Compara el puerto B, si se presiona 8 retorna 8 en ascii
RETLW B'111000' ;retorna codigo ascii de 8
BTFSS PORTB,4 ;Compara el puerto B, si se presiona 0 retorna 0 en ascii
RETLW B'0000' ;retorna codigo ascii de 0
;BARRIDO DE TERCCERA COLUMNA
MOVLW 11111101B ;Carga 253 decimal a w
MOVWF PORTB ;saca w para activar la 3ra columna por puerto B y activa la columna
3,6,9,#
BTFSS PORTB,7 ;Compara el puerto B, si se presiona 3 retorna 3 en ascii
RETLW B'110011' ;retorna codigo ascii de 3
BTFSS PORTB,6 ;Compara el puerto B, si se presiona 6 retorna 6 en ascii
RETLW B'110110' ;retorna codigo ascii de 6
BTFSS PORTB,5 ;Compara el puerto B, si se presiona 9 retorna 9 en ascii
RETLW B'111001' ;retorna codigo ascii de 9
BTFSS PORTB,4 ;Compara el puerto B, si se presiona # retorna # en ascii
RETLW B'100011' ;retorna codigo ascii de #
;BARRIDO DE CUARTA COLUMNA
MOVLW 11111110B ;Carga 254 decimal a w
MOVWF PORTB ;saca w para activar la 4ta columna por puerto B y activa la columna
A,B,C,D
BTFSS PORTB,7 ;Compara el puerto B, si se presiona A retorna A en ascii
RETLW B'1000001' ;retorna codigo ascii de A
BTFSS PORTB,6 ;Compara el puerto B, si se presiona B retorna B en ascii
RETLW B'1000010' ;retorna codigo ascii de B
BTFSS PORTB,5 ;Compara el puerto B, si se presiona C retorna C en ascii
RETLW B'1000011' ;retorna codigo ascii de C
BTFSS PORTB,4 ;Compara el puerto B, si se presiona D retorna D en ascii
RETLW B'1000100' ;retorna codigo ascii de D
RETLW 0B ;retorna 0 ya que no se presionó ninguna tecla

Delay20ms
MOVLW DELAY1 ;cargo dato delay1
MOVWF cont1 ;inicializa contador1 ciclo externo
rep1 MOVLW DELAY2 ;carga dato delay2
MOVWF cont2 ;inicializa contador2 ciclo interno
rep2 DECFSZ cont2,1 ;Decrementa contador2 y escapa si cero
GOTO rep2 ;si no es cero, repite ciclo interno
DECFSZ cont1,1 ;Decrementa contador1 y escapa si cero
GOTO rep1 ;si no es cero repite ciclo externo
RETURN ;regresa de esta subrutina

END

9. Simulación
Ilustración 2 Teclado matricial precionado tecla 1 y mostrando su codigo ASCII

Ilustración 3 Teclado matricial 4x4 presionado tecla A y presentando codigo ASCII


10. Conclusiones

• Para completar la lectura del teclado matricial de 4x4 es necesario hacer un barrido bien en modo
de fila en fila o de columna en columna para poder computar qué tecla ha sido presionada,
posteriormente se realiza una decodificación para definir la secuencia de leds a imprimir.

• Para evitar problemas con rebotes generados por la acción de los pulsadores bajo cada tecla, es
indispensable crear una subrutina que genere un delay o retraso en la lectura.

11. Referencias

Luis Llamas. (2018). Usar un teclado matricial con Arduino. [online] Available at:
https://www.luisllamas.es/arduino-teclado-matricial/ [Accessed 3 Dec. 2018].

Www0.unsl.edu.ar. (2018). [online] Available at:


http://www0.unsl.edu.ar/~pmp/archivos/Guia_TP7_Directivas%20PIC16F628_v2.pdf [Accessed 3 Dec.
2018].

También podría gustarte