Teclado matricial
Click here to load reader
-
Upload
rodrigo-cruz -
Category
Engineering
-
view
19 -
download
0
Transcript of Teclado matricial
Laboratorio de Sistemas Digitales II 4MM1
Tec. en Sistemas Digitales: Cruz Bazán Iván
Rodrigo
Extra: Piano con teclado matricial 4x4 y LCD 2x16
Cruz Bazán Iván Rodrigo Academia de Ingeniería Eléctrica y Electrónica,
Bioingeniería-UPIBI
México D. F.
E-mail: [email protected] (Rodrigo)
Resumen Se realiza un programa que detecte las pulsaciones en un teclado matricial 4x4 y cada tecla tendrá un sonido diferente,
esta se escuchara en un buzzer que por medio de variación de frecuencias que se implementara por medio de
interrupciones por desbordamiento de timer 0, tendrá diferentes sonidos, en el LCD se desplegara la nota
correspondiente a la tecla al mismo tiempo que reproduce el sonido.
Palabras clave: Teclado matricial, lcd 2x16, piano, buzzer, TMR0, interrupciones, rutina antirrebotes.
I. INTRODUCCIÓN
Las interrupciones en un programa ayudan a
atender un evento, que en el caso del
microcontrolador, son provocados por diversas
circunstancias internas o externas a este, en el caso de
externas son provocadas por un cambio de estado en
el pin RA4 o en los pines RB4:RB7, y en las
interrupciones internas son provocados por el
desbordamiento de timer.[1]
Los timer son contadores ascendentes de 8 o 16
bits que cuando ocurre un desbordamiento indican con
un bit que a ocurrido el desbordamiento, ese bit se
encuentra en el registro INTCON que es el registro
que se encarga de activar y señalizar con banderas las
interrupciones.
Nosotros usaremos las interrupción es globales y
las interruciones locales, una interrupción global es
cuando al momento de producir una interrupción
accesa al vector interrucion además de encender
cualquiera de las banderas del INTCON
correspondiente a la interrupción, y en la interrupción
local no se envia al vector inicio, pero si se activa la
bandera correspondiente a la interrupción en el
registro INTCON.
Los teclados matriciales utilizan una combinación
de cuatro filas y cuatro columnas para proporcionar
estados de botón para el host del dispositivo,
típicamente un microcontrolador. Debajo de cada tecla
es un botón pulsador, con un extremo conectado a una
fila, y el otro extremo conectado a una columna. Estas
conexiones se muestran en la Figura 1. [2]
Como el teclado es una parte física, tiende a
mantener ruido en sus terminales provocando que
afecte ejecución ideal del programa, debido a eso se
emplean rutina antirrebotes manipulando un contador.
Los buzzer son pequeñas bocinas o zumbadores
que su tarea principal es como indicador auditivo,
pero puede se manipulado para producir diferentes
sonidos.
Figura 1. Diagrama esquematico de un teclado.
En sistemas de control o sistemas que
implementan como indicadores, display de 7
segmentos ya es poco usual, debido al desarrollo
tecnológico, ahora se utilizan display LCD. Estos
permiten visualizar indicadores o mensajes de forma
más detallada.
La LCD de display más común es la que cuenta
con 2 lineas y 16 columnas. Llamada asi, LCD 2x16
que tiene incorporado un controlador Hitachi
HD44780. [3]
El principio de funcionamiento se da
principalmete en 3 pines del LCD que son Enable(E),
escritura de instrucción o dato (RS) y pin de lectura o
escritura(R/W) en este ultimo se deja como escritura,
también cuenta con los pines de datos que van desde
D0 hasta D7.
Para mandar un dato necesitamos tener RS como
estado bajo y habilitar Enable teniendo listo ya
nuestros datos en los pines de D0-D7[4]
Se muestra un diagrama de flujo (Figura 2) para
configurar la LCD a 4 bits.[5]
Laboratorio de Sistemas Digitales II 4MM1
Tec. en Sistemas Digitales: Cruz Bazán Iván
Rodrigo
Fig. 2. Inicializacion de LCD, 4-bit
En el lenguaje de programación ensamblador, una
macro es un nombre que define un conjunto de
instrucciones que serán sustituidas por la macro
cuando el nombre de ésta aparezca en un programa
(proceso denominado expansión de macros) en el
momento de ensamblar el programa. Las instrucciones
de macros se pueden guardar en el programa mismo o
en un archivo separado que el programa pueda
identificar.[6]
II. DESARROLLO Se realiza un programa que por medio de un
teclado matricial 4x4 detecte la tecla presionada y con
base a la asignación simbólica de la nota pueda
reproducir un sonido en el Buzzer, y la nota
correspondiente se despliegue en la pantalla LCD.
Se utilizó un display LCD 16x2, el programador
Master Prog resistencias, potenciometro, capacitores,
cristal 4MHz, PIC18F4550, Software MPLabX.
Proteus 8.1 para simular, Buzzer 5V, Teclado
matricial 4x4.
Se crea un diagrama de procesos para simplificar
el código con base en las rutinas que se encuentran en
el programa
Inicio
Inicializa LCD
Configura Puertos
Configura Interrupciones
Espera a que se presione una tecla
Identificar la tecla
Reproducir sonido
correspondiente a la tecla
Desplegar nota reproducida
en LCD
No reproducir sonido y
desplegar blonco el LCD
Se solto la tecla?
No
No
Diagrama de procesos
Se realiza el diagrama de flujo para el código
en la LCD
Laboratorio de Sistemas Digitales II 4MM1
Tec. en Sistemas Digitales: Cruz Bazán Iván
Rodrigo
Diagrama de flujo para desplegar en LCD
Se muestra el diagrama de flujo para identificar la tecla
que se presionó.
Inicio
Configurar RB4:RB7 como entrada
Bajar la bandera RBIF
Esperar a que se active RBIF
Determinar la columna que activo
la bandera
Configurar RB4:RB7 como salida
sacando unos y RB0:RB3 como
entrada
Determinar que fila fue
Determinar la tecla correspondiente
Asignar valor a TMR0
Ya se solto la tecla
No
Diagrama de flujo teclado matricial
Código:
;********************************************
;Unidad Interdiciplinaria de Biotecnologia
;Laboratorio de sistemas digitales ;Practica 7 ;25 de mayo del 2015 ;Cruz Bazan Ivan Rodrigo
Inicio
TRISD=0
TRISA=0
INICIALIZA
(Power ON)
INICIA EN
LINEA 1
LETRA W
DATO
LETRA W
DATO
LETRA W
DATO
TERMINA DE
ENVIAR LETRAS
Fin
DATO
RS(RA0)=1
WNIBLE
E
SWAP=NIBLEW
WPORTB
ENABLE(RA1)=1
RETARDO
ENABLE(RA1)=0
NIBLEPORTD
WPORTD
ENABLE(RA1)=1
RETARDO
ENABLE(RA1)=0
Laboratorio de Sistemas Digitales II 4MM1
Tec. en Sistemas Digitales: Cruz Bazán Iván
Rodrigo
;******************************************
;Librerias LIST P=18F4550 #INCLUDE <P18F4550.INC> ;Configuracion CONFIG FOSC=HS CONFIG PWRT=ON CONFIG BOR=OFF CONFIG WDT=OFF CONFIG MCLRE=ON CONFIG PBADEN=OFF CONFIG LVP=OFF CONFIG DEBUG=OFF CONFIG XINST=OFF CBLOCK 0X07 REG_1 REG_2 NIBBLE ;------- TIEMPO ;----- C_ANTI T_ANTI T_1 T_2 T_3 FRECUENCIA ;TIEMPO A PRESCALER APOYO ;-------- ENDC #DEFINE BUZ PORTA,0 #DEFINE EN PORTA,1 #DEFINE RS PORTA,2 #DEFINE PORTLCD PORTD LCD_CLR EQU B'00000001' ;=
Borra pantalla, cursor a Inicio LCD_HOME EQU B'00000010' ;= Cursor
a Inicio, DDRAM sin cambios LCD_ON EQU B'00001100' ;=
Pantalla On LCDBUS_4_2 EQU B'00101000' ;= Bus 4
bits, 2 líneas, 5x7 CARAC MACRO CARACTER MOVLW CARACTER
BSF RS ;RS=1(MODO DATO)
CALL COMANDO; ENDM CARACT MACRO CARACTER BSF RS
;RS=1(MODO DATO) CALL COMANDO; ENDM ORG 0X00 GOTO MAIN ORG 0X08 GOTO INTERRUPCION MAIN ;----DEFINE SALIDAS DE PUERTOS----- MOVLW 0XF0 MOVWF TRISD MOVLW B'11111000' MOVWF TRISA CLRF PORTLCD MOVLW 0X0F MOVWF ADCON1 MOVLW .7 MOVWF CMCON CALL LCD_INI
;INICIALIZA LCD CALL LINEA_1 CALL TEXTO_1 ;--------------- CLRF TMR0L MOVLW B'11010010';PRESCALER 1:8 MOVWF T0CON MOVLW B'10100000' MOVWF INTCON ;----------- ;TECLADO------------------------ MOVLW .10 MOVWF T_ANTI ;TIEMPO CONTROL
ANTIRREBOTES MOVFF T_ANTI,C_ANTI CLRF FRECUENCIA ;T_X POSICIONES DE TECLAS ;PRESCALER 8
Laboratorio de Sistemas Digitales II 4MM1
Tec. en Sistemas Digitales: Cruz Bazán Iván
Rodrigo
MOVLW ' ' MOVWF T_1 MOVLW ' ' MOVWF T_2 MOVLW ' ' MOVWF T_3 ;------------------------------- MOVLW 0xF0 ;CONFIGURACION
DEL PUERTO MOVWF TRISB MOVLW 0x0F MOVWF PORTB ;SACANDO 1'S POR
RB3:RB0 MOVF PORTB,W BCF INTCON,0 ;SE BAJA LA BANDERA CALL LINEA_2 CALL TEXTO_2 ;---------- ;---PROGRAMA PRINCIPAL------ INICIO CALL TECLADO GOTO INICIO ;---------------------------- ;@@@@@@@@@@@@@@@@@@@@@@@@@@ INTERRUPCION BTG BUZ BCF INTCON,2 MOVFF FRECUENCIA,TMR0L MOVLW B'11010010';PRESCALER 1:8 MOVWF T0CON RETFIE PERIODO MOVFF FRECUENCIA,TMR0L MOVLW B'11010010';PRESCALER 1:8 MOVWF T0CON CALL LINEA_2 CALL TEXTO_2 RETURN ;----------- ;%%%%%%%%%%%%%%%%%%%%%% TECLADO MOVLW 0xF0 ;CONFIGURACION DEL
PUERTO MOVWF TRISB MOVLW 0x0F MOVWF PORTB ;SACANDO 1'S POR
RB3:RB0 SIN_SONIDO
MOVLW ' ' MOVWF T_1 MOVLW ' ' MOVWF T_2 MOVLW ' ' MOVWF T_3 CALL LINEA_2 CALL TEXTO_2 BSF TRISA,0 MOVF PORTB,W BCF INTCON,RBIF ;SE BAJA LA
BANDERA HASTA BTFSS INTCON,RBIF ;SE OPRIMIO
TECLA? GOTO HASTA ;ALGUNA
INTERRUPCION EN RB7:RB4 BTFSC PORTB, 4 ;DISCERNIMIENTO
DE COLUMNA CALL COL1 ;Y ACCESO A LA
CORRESPONDIENTE BTFSC PORTB, 5 CALL COL2 BTFSC PORTB, 6 CALL COL3 BTFSC PORTB, 7 CALL COL4 RETURN ;Código para discernir en que FILA
de la columna uno se oprimio la tecla: COL1 ;codigo antirrebote BCF TRISA,0 SWAPF TRISB ;INTERCAMBIO DE
ENTRADAS POR SALIDAS -0xF0 MOVLW 0xF0 MOVWF PORTB ;SACANDO 1'S POR
RB7:RB4 BTFSC PORTB, 0 ;DISCERNIMIENTO
DE FILA CALL T1 ;Y ACCESO A TECLA
CORRESPONDIENTE BTFSC PORTB, 1 CALL T4 BTFSC PORTB, 2 CALL T7 BTFSC PORTB, 3
Laboratorio de Sistemas Digitales II 4MM1
Tec. en Sistemas Digitales: Cruz Bazán Iván
Rodrigo
CALL TAST RETURN COL2 BCF TRISA,0 SWAPF TRISB ;INTERCAMBIO DE
ENTRADAS POR SALIDAS MOVLW 0xF0 MOVWF PORTB ;SACANDO 1'S POR
RB7:RB4 BTFSC PORTB, 0 ;DISCERNIMIENTO
DE FILA CALL T2 ;Y ACCESO A TECLA
CORRESPONDIENTE BTFSC PORTB, 1 CALL T5 BTFSC PORTB, 2 CALL T8 BTFSC PORTB, 3 CALL T0 RETURN COL3 BCF TRISA,0 SWAPF TRISB ;INTERCAMBIO DE
ENTRADAS POR SALIDAS MOVLW 0xF0 MOVWF PORTB ;SACANDO 1'S POR
RB7:RB4 BTFSC PORTB, 0 ;DISCERNIMIENTO
DE FILA CALL T3 ;Y ACCESO A TECLA
CORRESPONDIENTE BTFSC PORTB, 1 CALL T6 BTFSC PORTB, 2 CALL T9 BTFSC PORTB, 3 CALL TGATO RETURN COL4 BCF TRISA,0 SWAPF TRISB ;INTERCAMBIO DE
ENTRADAS POR SALIDAS
MOVLW 0xF0 MOVWF PORTB ;SACANDO 1'S POR
RB7:RB4 BTFSC PORTB, 0 ;DISCERNIMIENTO
DE FILA CALL TA ;Y ACCESO A TECLA
CORRESPONDIENTE BTFSC PORTB, 1 CALL TB BTFSC PORTB, 2 CALL TC BTFSC PORTB, 3 CALL TD RETURN ;Código correspondiente a la tecla
uno: T1 MOVLW 'C' MOVWF T_1 MOVLW '4' MOVWF T_2 MOVLW ' ' MOVWF T_3 MOVLW .17 MOVWF FRECUENCIA CALL PERIODO T1_ BTFSC PORTB,0 GOTO T1_ RETURN T2 MOVLW 'D' MOVWF T_1 MOVLW '4' MOVWF T_2 MOVLW ' ' MOVWF T_3 MOVLW .43 MOVWF FRECUENCIA CALL PERIODO T2_ BTFSC PORTB,0 GOTO T2_ RETURN T3 MOVLW 'E' MOVWF T_1
Laboratorio de Sistemas Digitales II 4MM1
Tec. en Sistemas Digitales: Cruz Bazán Iván
Rodrigo
MOVLW '4' MOVWF T_2 MOVLW ' ' MOVWF T_3 MOVLW .67 MOVWF FRECUENCIA CALL PERIODO T3_ BTFSC PORTB,0 GOTO T3_ RETURN T4 MOVLW 'F' MOVWF T_1 MOVLW '4' MOVWF T_2 MOVLW ' ' MOVWF T_3 MOVLW .77 MOVWF FRECUENCIA CALL PERIODO T4_ BTFSC PORTB,1 GOTO T4_ RETURN T5 MOVLW 'G' MOVWF T_1 MOVLW '4' MOVWF T_2 MOVLW ' ' MOVWF T_3 MOVLW .97 MOVWF FRECUENCIA CALL PERIODO T5_ BTFSC PORTB,1 GOTO T5_ RETURN T6 MOVLW 'A' MOVWF T_1 MOVLW '4' MOVWF T_2 MOVLW ' '
MOVWF T_3 MOVLW .114 MOVWF FRECUENCIA CALL PERIODO T6_ BTFSC PORTB,1 GOTO T6_ RETURN T7 MOVLW 'B' MOVWF T_1 MOVLW '4' MOVWF T_2 MOVLW ' ' MOVWF T_3 MOVLW .129 MOVWF FRECUENCIA CALL PERIODO T7_ BTFSC PORTB,2 GOTO T7_ RETURN T8 MOVLW 'C' MOVWF T_1 MOVLW '5' MOVWF T_2 MOVLW ' ' MOVWF T_3 MOVLW .136 MOVWF FRECUENCIA CALL PERIODO T8_ BTFSC PORTB,2 GOTO T8_ RETURN T9 MOVLW 'D' MOVWF T_1 MOVLW '5' MOVWF T_2 MOVLW ' ' MOVWF T_3 MOVLW .150 MOVWF FRECUENCIA
Laboratorio de Sistemas Digitales II 4MM1
Tec. en Sistemas Digitales: Cruz Bazán Iván
Rodrigo
CALL PERIODO T9_ BTFSC PORTB,2 GOTO T9_ RETURN TAST MOVLW 'E' MOVWF T_1 MOVLW '5' MOVWF T_2 MOVLW ' ' MOVWF T_3 MOVLW .161 MOVWF FRECUENCIA CALL PERIODO TAST_ BTFSC PORTB,3 GOTO TAST_ RETURN T0 MOVLW 'F' MOVWF T_1 MOVLW '5' MOVWF T_2 MOVLW ' ' MOVWF T_3 MOVLW .166 MOVWF FRECUENCIA CALL PERIODO T0_ BTFSC PORTB,3 GOTO T0_ RETURN TGATO MOVLW 'A' MOVWF T_1 MOVLW '4' MOVWF T_2 MOVLW '#' MOVWF T_3 MOVLW .122 MOVWF FRECUENCIA CALL PERIODO TGATO_ BTFSC PORTB,3 GOTO TGATO_ RETURN
TA MOVLW 'C' MOVWF T_1 MOVLW '4' MOVWF T_2 MOVLW '#' MOVWF T_3 MOVLW .30 MOVWF FRECUENCIA CALL PERIODO TA_ BTFSC PORTB,0 GOTO TA_ RETURN TB MOVLW 'D' MOVWF T_1 MOVLW '4' MOVWF T_2 MOVLW '#' MOVWF T_3 MOVLW .55 MOVWF FRECUENCIA CALL PERIODO TB_ BTFSC PORTB,1 GOTO TB_ RETURN TC MOVLW 'D' MOVWF T_1 MOVLW '4' MOVWF T_2 MOVLW '#' MOVWF T_3 MOVLW .87 MOVWF FRECUENCIA CALL PERIODO TC_ BTFSC PORTB,2 GOTO TC_ RETURN TD MOVLW 'G' MOVWF T_1 MOVLW '4' MOVWF T_2 MOVLW '#' MOVWF T_3
Laboratorio de Sistemas Digitales II 4MM1
Tec. en Sistemas Digitales: Cruz Bazán Iván
Rodrigo
MOVLW .105 MOVWF FRECUENCIA CALL PERIODO TD_ BTFSC PORTB,3 GOTO TD_ RETURN ;%%%%%%%%%%%%%%%%%%%%%%% ;++++++++++++++++++++++++++++++ ;LCD ;++++++++++++++++++++++++++++++ TEXTO_1 ;TEXTO DE LA PRIMERA LINEA CARAC 'S' CARAC 'U' CARAC 'P' CARAC 'E' CARAC 'R' CARAC ' ' CARAC 'T' CARAC 'E' CARAC 'C' CARAC 'L' CARAC 'A' CARAC 'D' CARAC 'O' CARAC ' ' CARAC ':' CARAC 'D' RETURN TEXTO_2 ;TEXTO DE LA SEGUNDA LINEA CARAC 'T' CARAC 'e' CARAC 'c' CARAC 'l' CARAC 'a' CARAC ':' CARAC ' ' MOVF T_1,W CARACT WREG MOVF T_2,W CARACT WREG MOVF T_3,W CARACT WREG RETURN
LCD_INI ;SUBRUTINA DE IICIALIZACION
BCF RS ;RS=0 (MODO INSTRUCCION)
MOVLW B'00000011' CALL COMANDO MOVLW B'00000011' CALL COMANDO MOVLW B'00000011' CALL COMANDO MOVLW B'00000010' CALL COMANDO MOVLW LCDBUS_4_2 ;AJUSTES
DEL CURSOR CALL COMANDO MOVLW LCD_ON ;AJUSTES
DEL CURSOR CALL COMANDO MOVLW LCD_CLR ;AJUSTES
DEL CURSOR CALL COMANDO MOVLW LCD_HOME ;AJUSTES
DEL CURSOR CALL COMANDO BSF RS
;RS=1(MODO DATO) RETURN COMANDO ;HABILITA
Y MANDA DATOS MOVWF NIBBLE SWAPF NIBBLE,0 ANDLW 0X0F MOVWF PORTLCD BSF EN ;EN=1
(HABILITA ENABLE) CALL RET_1 BCF EN
;EN=0(DESHABILITA ENABLE) MOVFF NIBBLE,WREG ANDLW 0X0F MOVWF PORTLCD BSF EN ;EN=1
(HABILITA ENABLE) CALL RET_1 BCF EN
;EN=0(DESHABILITA ENABLE) CALL RET_1
Laboratorio de Sistemas Digitales II 4MM1
Tec. en Sistemas Digitales: Cruz Bazán Iván
Rodrigo
RETURN LINEA_1
;PONE CURSOR A LINEA 1 BCF RS
;RS=0(MODO INSTRUCCION) MOVLW B'10000000'
;SELECCIONA PRIMERA LINEA CALL COMANDO BSF RS
;RS=1(MODO DATO) RETURN LINEA_2
;PONE CURSOR A LINEA 2 BCF RS
;RS=0(MODO INSTRUCCION) MOVLW B'11000000'
;SELECCIONA SEGUNDA LINEA CALL COMANDO BSF RS
;RS=1(MODO DATO) RETURN ;---RETARDO----- RET_1 MOVLW .17;48 MOVWF REG_1 LOOP_1 MOVLW .50;255 MOVWF REG_2 LOOP_2 DECFSZ REG_2,1 GOTO LOOP_2 DECFSZ REG_1,1 GOTO LOOP_1 RETURN ;--------------------------------
----- mS MOVLW .10 MOVWF REG_1 TWO DECFSZ REG_1,F GOTO TWO RETURN ;-------------------- END
Diagrama de conexión electrica
III. CONCLUSION
Cruz Bazán
Existen diferentes formas para programar un Teclado
matricial, pero haciéndolo de esa forma permiten ejecutar
otras actividades, El uso del Timer0 como temporizador
permite una repetición exacta y es útil cuando se requiere
pulsos de frecuencias exactas. El uso del LCD permite una
mejor indicación para el operador, y para este caso saber
que nota musical se está tocando. El buzzer puede inducir
mayor cantidad de sonidos si se opera de forma adecuada.
IV. REFERENCIAS
[1] hoja de datos del microcontrolador PIC18F4550,
Interrupciones.
http://ww1.microchip.com/downloads/en/devicedoc/39632
c.pdf
[2] hoja de datos de teclado matricial 4x4, Parallax
<http://www.electronicoscaldas.com/datasheet/27899_Para
llax.pdf>
[3] Jose Salas, TodoElectrodo, blogspot. Lcd 16x2.
http://todoelectrodo.blogspot.mx/2013/02/lcd-16x2.html
Consultado 2 de junio de 2015.
[4] Quito Ecuador, TecMikro, programación de
microcontroladores PIC en mikroC PRO. Display LCD
16x2 (2x16) con el HD44780 en mikroC PRO.
http://programarpicenc.com/articulos/display-lcd-16x2-
Laboratorio de Sistemas Digitales II 4MM1
Tec. en Sistemas Digitales: Cruz Bazán Iván
Rodrigo
2x16-con-el-hd44780-en-mikroc-pro/ . Consultado 2 de
junio de 2015.
[5] VISHAY Datasheet, 16x2 LCD-016M002B
http://www.engineersgarage.com/sites/default/files/LCD%
2016x2.pdf
[6] Galeon, Hipavista, Macros
http://ciceron.galeon.com/macros.html