Você está na página 1de 8

Curso de Microcontroladores ndmunoz@elpoli.edu.

co

TUTORIAL Teclado matricial


OBJETIVOS

Manejar teclados matriciales por el mtodo RWR.


Conocer el uso y la utilidad de las Pull-Up del puerto B.

INTRODUCCIN:
El teclado matricial es uno de los dispositivos de entrada de datos ms usados en
aplicaciones como introduccin de claves, nmeros en calculadoras, registradoras,
etc.
En esta prctica usaremos un teclado matricial conectado en el puerto B cuya
lectura realizaremos por medio del metodo RWR, asignaremos ciertas funciones a
cada letra (incrementar, decrementar etc) y mostraremos la salida utilizando los
display de siete segmentos.

CONCEPTOS TERICOS:

PULL-UPS DE PUERTO B :
Las pull-up de puerto B son unas resistencias que internamente en el
microcontrolador conectan cada pin del puerto B con la alimentacin
positiva, dichas resistencias pueden ser activadas y desactivadas por
software. Son controladas por el bit RBPU del registro OPTION_REG el
cual con 1 desactiva dichas pull-up y con 0 las activa.
Las pull-up de puerto B facilitan la conexin de pulsadores en los pines de
dicho puerto, con una configuracin de pulsador como la mostrada abajo la
resistencia es la pull - up interna del microcontrolador y solo es necesario
conectar externamente el pulsador y la tierra. Con esta configuracin debe
tenerse en cuenta que los pulsadores quedan en lgica negativa (un cero
significa presionado).

Curso de Microcontroladores ndmunoz@elpoli.edu.co

Curso de Microcontroladores ndmunoz@elpoli.edu.co

DESCRIPCIN DEL TECLADO MATRICIAL: Existen varios tipos de


teclados matriciales, en nuestro caso usaremos un teclado matricial de 16
teclas organizadas en 4 columnas y 4 filas, este teclado dispone de un
conector de 16 pines de los cuales cuatro corresponden a las filas y cuatro
a las columnas.
El conexionado interno de este teclado es como sigue:

Existen diferentes formas de realizar la lectura de estos teclados, una de


ellas es conocida como el mtodo RWR el cual ser utilizado en esta
prctica. Se recomienda consultar otros mtodos de lectura del teclado y
comparar ventajas y desventajas, hay varios ejemplos en (www.xrobotics.com)
El mtodo RWR (Read Write Read, leer escribir leer) consiste en, como su
nombre lo indica, en realizar una lectura, luego una escritura, y finalmente
otra lectura, lo obtenido en esta lectura permitir por medio de unos cdigos
que deben establecerse, obtener el digito presionado por el usuario .
Para aplicar el mtodo RWR dividimos el puerto en dos, una parte manejar
las columnas y otra parte manejar las filas, el teclado se conecta al puerto
B del PIC de tal manera que en las lneas RB4 a RB7 queden los pines que
representan las columnas y en las lneas RB0 a RB3 los pines que
representan las filas.

Curso de Microcontroladores ndmunoz@elpoli.edu.co

Curso de Microcontroladores ndmunoz@elpoli.edu.co

Inicialmente, la parte del puerto que maneja las columnas est como
entrada y las filas estn como salida entregando un valor lgico bajo, las
entradas de las columnas estn fijas a un valor alto por medio de
resistencias de pull-up, para esto usaremos las pull-up del microcontrolador.
El esquema circuital es el siguiente:

La secuencia para realizar una lectura por el mtodo RWR sera:


1) Inicialmente, los pines RB4, RB5, RB6 y RB7 leen 1, que se debe a la
configuracin previa de habilitar las pull-up. Esta configuracin lo que
hace es darle un estado lgico inicial de 1 a los pines del puerto B
configurados como entradas. Los pines RB0 RB3 estn configurados
como salidas y estn enviando un valor lgico 0.
2) El usuario presiona un botn, para ejemplificar supongamos que presion la
tecla 6.
3) El pin RB5 que estaba como entrada lee un 0, que ocurre porque la accin
de presionar la tecla cierra el circuito entre RB5 y RB2 y el RB2 recordemos
estaba enviando un 0.
4) Se lee el estado del puerto B, que para el ejemplo es: 11010000. El PIC se
entera que hemos presionado una tecla ya que ocurre una interrupcin por
cambio de estado en Puerto B; en el ejemplo vemos que fue el RB5 el pin
que cambio de estado (por pull-up estaba en 1 y al presionar la tecla pas a
0).
Curso de Microcontroladores ndmunoz@elpoli.edu.co

Curso de Microcontroladores ndmunoz@elpoli.edu.co

5) Este dato aun no nos dice cual de las 16 teclas fue la presionada, ya que el
11010000 tambin se da si presionamos las teclas 3, 9 #.
6) Se reconfigura el puerto B, esta vez se colocan las lneas RB0 a RB3 como
entradas y las RB4 a RB7 como salidas (TRISB=0b00001111)
7) A PORTB le asigno el valor ledo, para el ejemplo es PORTB=0b11010000.
Como las pull-up siguen habilitadas los pines RB0, RB1, y RB3 leen 1. El
pin RB2 lee un 0, ya que la tecla presionada cierra el circuito que conecta a
RB2 con RB5, y este RB5 ahora esta enviando 0.
8) Vuelve a leerse el estado del puerto, en el caso del puerto es: 11011011.
Este valor si es nico y con l se puede identificar por completo la tecla
presionada, en este caso el 6.
9) Se reconfigura de nuevo el puerto B como estaba inicialmente para que
pueda ser leda de nuevo otra tecla (pines de mayor peso como entrada, los
de menor como salida de 0)
De esta forma podemos realizar los cdigos correspondientes a cada uno de los
dgitos del teclado, con dichos cdigos y la respectiva configuracin del micro
podemos realizar la implementacin de esto en el cdigo.
Configuracin del microcontrolador: Para este mtodo de lectura necesitamos
realizar las siguientes configuraciones en el microcontrolador:

Configurar el OPTION_REG para habilitar las pull up (se pone el bit RBPU
en 0).
Configurar las lneas RB4 a RB7 como entradas y las lneas RB0 a RB3
como salidas, sacando un 0 lgico por ellas (TRISB=0b11110000).

A continuacin mostraremos un cdigo que lee el teclado matricial y realiza


incrementos de al pulsar la tecla 1 y decrementos al pulsar la tecla 2.

ANTIRREBOTES:

la instruccin while: la sintaxis de esta expresin es la siguiente:


while(condicin)
{
Instrucciones a realizar mientras que la condicin sea verdadera.
------------}
El bloque incluido por el ciclo while se repetir mientras que la condicin sea
verdadera, una vez se llegue al final del bloque volver a evaluarse la condicin y
Curso de Microcontroladores ndmunoz@elpoli.edu.co

Curso de Microcontroladores ndmunoz@elpoli.edu.co

si es verdadera se ejecutar el bloque un vez ms, en caso de ser falsa se


continuar con la seccin siguiente al bloque.
Para mantener el micro esperando que se libere la tecla se utilizara el siguiente
cdigo:
while(PORTB!=0b11110000) {};
Esta lnea significa que mientras el puerto B sea diferente del valor dado por
defecto cuando las teclas estn sueltas (0b11110000) el pic ejecutar el bloque en
el cual no hay instrucciones (en otras palabras, el micro esperar), cuando el
puerto sea igual al valor dado cuando no hay ninguna tecla presionada el pic
continuar la ejecucin del cdigo restante. .
#include <pic.h>
#include "delay.h"
#include "delay.c"
char
void

ReadKeypad(void);
ProcesarKeypad(char);

signed
unsigned
unsigned char
bit

char
char

TECLA,Cont=89,DEC,UNI;
AuxTecla;
Display[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
FlagTecla=0;

void
main(void)
{
//Configuracion del conversor A/D como entradas/salidas digitales
ANSEL=0x00;
//Entradas analogas como digitales
ANSELH=0x00; //Entradas analogas como digitales
//

configuracion del teclado


TRISB=0b11110000; //configuracion inicial del puerto metodo RWR
RBPU=0;
//activo resistencias de pull-up
PORTB=0b00000000;
TRISA0=0;
TRISA1=0;
TRISC=0b10000000;
PORTA=0;
PORTC=0;
while(1)
{
AuxTecla=ReadKeypad(); // deteccion de la activacion de una tecla
if((AuxTecla!=0b11110000)&&(FlagTecla==0))
{
ProcesarKeypad(AuxTecla);
FlagTecla=1;
}
if(AuxTecla==0b11110000)
{
FlagTecla=0;

Curso de Microcontroladores ndmunoz@elpoli.edu.co

Curso de Microcontroladores ndmunoz@elpoli.edu.co

}
DEC=Cont/10;
UNI=Cont%10;
//3. Mostrar decenas
RA1=0; //desactivo el display de unidades
RA0=1; //activo el display de decenas
PORTC=Display[DEC];
DelayMs(25);
//4. Mostrar unidades
RA1=1; //desactivo el display de unidades
RA0=0; //activo el display de decenas
PORTC=Display[UNI];
DelayMs(25);
}
}
void
{

ProcesarKeypad(char

CodigoTecla) //comandos a ejecutar segun tecla activada

switch(CodigoTecla)
{
case
0b01110111:
Cont++;
break;
case

0b10110111:
Cont--;

//Tecla 1

//Tecla 2

break;
}
}
char
{

ReadKeypad(void)

//APLICACION del metodo RWR

if(PORTB!=0b11110000)
{
TECLA=PORTB;
TRISB=0b00001111;
PORTB=TECLA;
TECLA=PORTB;
TRISB=0b11110000;
PORTB=0b00000000;
return TECLA;
}
else
{
return 0b11110000;
}
}

LA SENTENCIA SWITCH: La sentencia switch se utiliza para comparar una


variable con varias constantes y realizar una accin si coincide con una de estas,
en nuestro caso seria til para realizar la decodificacin de la tecla, su sintaxis es
la siguiente:

Curso de Microcontroladores ndmunoz@elpoli.edu.co

Curso de Microcontroladores ndmunoz@elpoli.edu.co

switch(variable)
{
case constante1: { - - -Instrucciones a ejecutar
- - - si variable es igual a constante1
Break;
}
case constante2: { - - -Instrucciones a ejecutar
- - - si variable es igual a constante2
Break;
}
.
.
.
}
Para nuestro ejemplo la decodificacin de la tecla podra hacerse tambin de la
siguiente forma:
switch (teclado)
{case 0b10111110: {boton=0; break;}
case 0b01110111: {boton=1; break;}
case 0b10110111: {boton=2; break;}
case 0b11010111: {boton=3; break;}
case 0b01111011: {boton=4; break;}
case 0b10111011: {boton=5; break;}
case 0b11011011: {boton=6; break;}
case 0b01111101: {boton=7; break;}
case 0b10111101: {boton=8; break;}
case 0b11011101: {boton=9; break;}
case 0b01111110: {boton='A'; break;}
case 0b11011110: {boton='B'; break;}
case 0b11101110: {boton='C'; break;}
case 0b11101101: {boton='D'; break;}
case 0b11101011: {boton='E'; break;}
case 0b11100111: {boton='F'; break;}
}

Se sugiere que cada uno realice el cdigo y lo compare con este cdigo ya dado,
la idea es que cada uno disee un cdigo que genere distintos conteos al oprimir
diferentes teclas.

Curso de Microcontroladores ndmunoz@elpoli.edu.co

GND

VCC

R1
10k

1
2
3
4
5
6
7
14
13
33
34
35
36
37
38
39
40

U1

RD0
RD1
RD2
RD3
RD4
RD5/P1B
RD6/P1C
RD7/P1D

RE0/AN5
RE1/AN6
RE2/AN7

RE3/MCLR/VPP
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RA0/AN0/ULPWU/C12IN0RC2/P1A/CCP1
RA1/AN1/C12IN1RC3/SCK/SCL
RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA
RA3/AN3/VREF+/C1IN+
RC5/SDO
RA4/T0CKI/C1OUT
RC6/TX/CK
RA5/AN4/SS/C2OUT
RC7/RX/DT
RA6/OSC2/CLKOUT
RA7/OSC1/CLKIN
RB0/AN12/INT
RB1/AN10/C12IN3RB2/AN8
RB3/AN9/PGM/C12IN2RB4/AN11
RB5/AN13/T1G
RB6/ICSPCLK
RB7/ICSPDAT

PIC16F887

15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30
8
9
10

1
2
3
4
5
6
7
8

RN1

330

16
15
14
13
12
11
10
9

Curso de Microcontroladores ndmunoz@elpoli.edu.co

8
Curso de Microcontroladores ndmunoz@elpoli.edu.co

DIAGRAMA DE CONEXIONES.

Você também pode gostar