Teclado matricial

11

Click here to load reader

Transcript of Teclado matricial

Page 1: 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]

Page 2: Teclado matricial

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

Page 3: Teclado matricial

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

Page 4: Teclado matricial

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

Page 5: Teclado matricial

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

Page 6: Teclado matricial

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

Page 7: Teclado matricial

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

Page 8: Teclado matricial

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

Page 9: Teclado matricial

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

Page 10: Teclado matricial

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-

Page 11: Teclado matricial

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