Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
co
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).
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:
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).
ANTIRREBOTES:
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
//
}
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
switch(CodigoTecla)
{
case
0b01110111:
Cont++;
break;
case
0b10110111:
Cont--;
//Tecla 1
//Tecla 2
break;
}
}
char
{
ReadKeypad(void)
if(PORTB!=0b11110000)
{
TECLA=PORTB;
TRISB=0b00001111;
PORTB=TECLA;
TECLA=PORTB;
TRISB=0b11110000;
PORTB=0b00000000;
return TECLA;
}
else
{
return 0b11110000;
}
}
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.
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
8
Curso de Microcontroladores ndmunoz@elpoli.edu.co
DIAGRAMA DE CONEXIONES.