You are on page 1of 6

Teclado matricial

Un teclado matricial dispone sus teclas en una configuración fila-columna, de forma que
cada tecla se corresponde a la intersección de una fina con una columna.

Modo de operación
La exploración de las pulsaciones en el
teclado se basa en colocar
sucesivamecnte a nivel bajo una sola de
las columnas, y explorar si se recibe
dicho nivel bajo en alguna de las filas
(tecla pulsada de esa fila en la columna
que actualmente está a 0).

SISTEMAS DIGITALES 08/09 1

Teclado matricial. Teclado 2x2

#include "msp430x16x.h" ; Definición de etiquetas


; ------------------------------------------------------------------------------
; PROGRAMA PRINCIPAL
; ------------------------------------------------------------------------------
ORG 01200h ; Programa en FLASH
Main mov.w #0A00h,SP ; Inicializa base pila
mov.w #WDTPW+WDTHOLD, &WDTCTL ; Desactiva WDT
mov.b #00h,&P1DIR ; P1 como entrada
mov.b #0FFh,&P2DIR ; P2 como salida
Teclado mov #Teclas,R15 ; R15 inicio tabla rutinas teclas
call #Lee_teclado ; Explora teclado matricial
cmp.b #0FFh,R4 ; Comprueba tecla pulsada
jz Teclado ; Ninguna tecla->vuelve a explorar
rla R4 ; Tecla pulsada *2
add R4,R15 ; Dir rutina tecla pulsada
call @R15 ; Llama rutina tecla pulsada
jmp Teclado ; Vuelve a explorar teclado matric.

SISTEMAS DIGITALES 08/09 2


Teclado matricial. Teclado 2x2
; ------------------------------------------------------------------------------
; SUBRUTINAS
; ------------------------------------------------------------------------------
Lee_teclado clr.b R4 ; Limpia variable tecla pulsada
mov.b #0FEh,R5 ; R5 a 1110, Columna 0 activa
columna mov.b R5,&P2OUT ; Activa columna
mov #1,R6 ; R6 cont. Fila a explorar
fila bit.b R6,&P1IN ; Testa fila en columna actual
jz fin ; Tecla pulsada en fila y columna
inc.b R4 ; Tecla en fila no pulsada: inc.
rla.b R6 ; contadores de tecla y fila
cmp.b #4,R6 ; Si no se ha llegado a la última
jnz fila ; fila, prueba la siguiente
rlc.b R5 ; Activa columna sig.
cmp.b #0FBh,R5 ; Si no se han explorado todas las
jnz columna ; columnas, explora la sig.
mov.b #00FFh,R4 ; Ninguna tecla fue pulsada
fin ret

SISTEMAS DIGITALES 08/09 3

Teclado matricial. Teclado 2x2

ORG 01300h
Tecla0 nop ; Aquí iría el código de la tecla 0
ret ; Vuelve al programa principal
ORG 01400h
Tecla1 nop ; Aquí iría el código de la tecla 1
ret ; Vuelve al programa principal
ORG 01500h
Tecla2 nop ; Aquí iría el código de la tecla 2
ret ; Vuelve al programa principal
ORG 01600h
Tecla3 nop ; Aquí iría el código de la tecla 0
ret ; Vuelve al programa principal
; ------------------------------------------------------------------------------
; DEFINICION VARIABLES
; ------------------------------------------------------------------------------
ORG 0240h ; Dirección en RAM
Teclas DW 01300h,01400h,01500h,01600h ; Variable en RAM con valor inicial
; ------------------------------------------------------------------------------
; VECTORES INTERRUPCIÓN
; ------------------------------------------------------------------------------
ORG 0FFE0h+RESET_VECTOR ; Reset
DW Main
END Main

SISTEMAS DIGITALES 08/09 4


Teclado matricial. Diseño de ultrabajo consumo

• En modo espera pulsación las


filas están a 1 y el puerto 1
(Terminales P1.0 P1.1 y P1.2)
como entradas de interrupción
configuradas en flanco de bajada

SISTEMAS DIGITALES 08/09 5

Teclado matricial. Diseño de ultrabajo consumo


Reset

Inicialización MSP430

Espera de pulsación
Entrada en modo LPM4 Determinar la tecla
pulsada
INT
P1 Espera de despulsación
Entrada en modo LPM4
Anti-rebote SW
INT
Testeo teclado Anti-rebote SW P1
Testeo teclado

NO Tecla
pulsada? Tecla
pulsada?
NO

SISTEMAS DIGITALES 08/09 6


Multiplexación E/S: Matriz de LEDS
• Podemos controlar el encendido/apagado de un
LED mediante un pin de un puerto. PROBLEMA:
número de LEDS altos (10, 20,…60!)
¾ No solemos tener tantos pines de puertos libres
(función adicional).
¾ Además, puede que no tengamos suficiente
corriente para mantener tantos LEDS encendidos
a la vez (y aún así, la aplicación consumirá
mucho).

• SOLUCIÓN: Estructura matricial de LEDS

n º pines necesarios = 2 * ⎡ n º LEDS ⎤


Nº max de LEDS iluminados a la vez:
nº LEDS ó 1 (según técnica de control)

SISTEMAS DIGITALES 08/09 7

Multiplexación E/S: Matriz de LEDS


• Ejemplo de funcionamiento
• Programar pines puertos como salida
• Sacar un “0” por todos los pines para mantener apagados todos los LEDS

Δt
180Ω
Paso 1 : PX.Y0

•Enviar un “0” por la primera


columna.
180Ω
•Enviar un “1” por las filas de PX.Y1
los LEDS a encender en esa
columna
•Esperar un tiempo Δt. 180Ω
PX.Y2

180Ω
PX.Y3

PX.Y4 PX.Y5 PX.Y6 PX.Y7

SISTEMAS DIGITALES 08/09 8


Multiplexación E/S: Matriz de LEDS
• Ejemplo de funcionamiento
• Programar pines puertos como salida
• Sacar un “0” por todos los pines para mantener apagados todos los LEDS

180Ω
Δt
Paso 2 : PX.Y0

•Enviar un “0” por la segunda


columna.
180Ω
•Enviar un “1” por las filas de PX.Y1
los LEDS a encender en esa
columna
•Esperar un tiempo Δt. 180Ω
PX.Y2

180Ω
PX.Y3

PX.Y4 PX.Y5 PX.Y6 PX.Y7

SISTEMAS DIGITALES 08/09 9

Multiplexación E/S: Matriz de LEDS


• Ejemplo de funcionamiento
• Programar pines puertos como salida
• Sacar un “0” por todos los pines para mantener apagados todos los LEDS

180Ω
Δt
Paso 3 : PX.Y0

•Enviar un “0” por la tercera


columna.
180Ω
•Enviar un “1” por las filas de PX.Y1
los LEDS a encender en esa
columna
•Esperar un tiempo Δt. 180Ω
PX.Y2

180Ω
PX.Y3

PX.Y4 PX.Y5 PX.Y6 PX.Y7

SISTEMAS DIGITALES 08/09 10


Multiplexación E/S: Matriz de LEDS
• Ejemplo de funcionamiento
• Programar pines puertos como salida
• Sacar un “0” por todos los pines para mantener apagados todos los LEDS

180Ω
Δt
Paso 4 : PX.Y0

•Enviar un “0” por la cuarta


columna.
180Ω
•Enviar un “1” por las filas de PX.Y1
los LEDS a encender en esa
columna
•Esperar un tiempo Δt. 180Ω
•Volver al paso 1. PX.Y2

180Ω
PX.Y3

PX.Y4 PX.Y5 PX.Y6 PX.Y7

SISTEMAS DIGITALES 08/09 11

Multiplexación E/S: Matriz de LEDS

Si se ejecuta esta secuencia a una


180Ω
velocidad adecuada, debido a PX.Y0
la persistencia de la luz en los
LEDS, aparecerá una imagen
en toda la matriz. 180Ω
PX.Y1
• Aspectos a considerar:

1. Si Δt es pequeño, el LED
180Ω
lucirá con poca intensidad. PX.Y2

2. Si un LED tarda demasiado


tiempo en volver a
encenderse, se verá un 180Ω
PX.Y3
parpadeo.

Se puede reducir el consumo encendiendo solo un


LED a la vez (seleccionar una columna e ir PX.Y4 PX.Y5 PX.Y6 PX.Y7
sacando un 1 por las filas alternativamente),
pero dificulta el punto 2.

SISTEMAS DIGITALES 08/09 12

You might also like