Subido por Guillermo Sebastian Noguera

Teclado 4x4-pic

Anuncio
Manejo de un Teclado 4x4
/* *****************************************************************************
** Nombre
: teclado4x4.C
** Target
: PIC18F4620
** Compilador
: Microchip C18
** IDE
: Microchip MPLAB
** XTAL
: 20MHZ
** Autor
:
**
** ****************************************************************************/
#include <p18f4620.h>
#pragma config OSC=HS,PWRT=ON,MCLRE=OFF,LVP=OFF,WDT=OFF
#include <delays.h>
#include <stdio.h>
Función que lee el teclado.
unsigned char KeyScan(){
unsigned char k,j,dt=0;
k=0b11101111;
for(j=0;j<4;j++){
PORTB=k;
Delay10KTCYx(2);
switch (PORTB){
case 0x77: dt='D'; break;
case 0xB7: dt='C'; break;
case 0xD7: dt='B'; break;
case 0xE7: dt='A'; break;
case 0x7B: dt='E'; break;
case 0xBB: dt='3'; break;
case 0xDB: dt='6'; break;
case 0xEB: dt='9'; break;
case 0x7D: dt='F'; break;
case 0xBD: dt='2'; break;
case 0xDD: dt='5'; break;
case 0xED: dt='8'; break;
case 0x7E: dt='0'; break;
case 0xBE: dt='1'; break;
case 0xDE: dt='4'; break;
(Este teclado no corresponde a los
case 0xEE: dt='7'; break;
valores mostrados en el switch)
}
if(dt!=0){break;}
k<<=1;
}
return dt;
}
FUNCION PRNCIPAL
void main(void){
TRISB=0x0f;
// Configura el sentido de transferencia del puerto.
PORTB=0x0f;
// Define un valor en el puerto.
ADCON1 = 0X0F;
// Desactiva los canales analógicos
INTCON2bits.RBPU = 0; // Conecta las resistencias Pull-Up del puerto B.
lcd_init();
// Configura el LCD
lcd_gotoxy(1,1);
lcd_putrs("Teclado 4x4\n"); // Cartel inicial
lcd_putrs("Tecla:?");
while(1){
if(KeyScan()!=0){ // Pregunta si hay alguna tecla.
lcd_gotoxy(7,2);
stdout =_H_USER;
1
printf("%c ",KeyScan()); // Imprime la tecla apretada.
while(KeyScan()!=0){
// Espera que suelte la tecla.
Delay10KTCYx(5);
}
}
}
}
•
•
•
•
•
•
•
•
•
•
•
1 Microcontrolador PIC18F4620.
1 Teclado Matricial 4x4
1 Cristal de 20Mhz.
2 Condensadores de 18pF o 20pF.
1 Pantalla LCD 16x2 Hitachi 44780 o compatible
1 Resistencia de 1K.
1 Condensador de ,01uF y 10uF
1 Protoboard.
Cables de conexión.
Placa programadora de PIC´s.
Fuente de alimentación de 5 voltios.
2
Este trabajo muestra una forma sencilla de manejar un teclado con
matriz 4x4 pero fácilmente adaptable a cualquier matriz.
El corazón del programa es la función KeyScan.
unsigned char KeyScan(){
unsigned char k,j,dt=0;
k=0b11101111;
for(j=0;j<4;j++){
PORTB=k;
Delay10KTCYx(2);
switch (PORTB){
case 0x77: dt='D';
case 0xB7: dt='C';
case 0xD7: dt='B';
case 0xE7: dt='A';
case 0x7B: dt='E';
case 0xBB: dt='3';
case 0xDB: dt='6';
case 0xEB: dt='9';
case 0x7D: dt='F';
case 0xBD: dt='2';
case 0xDD: dt='5';
case 0xED: dt='8';
case 0x7E: dt='0';
case 0xBE: dt='1';
case 0xDE: dt='4';
case 0xEE: dt='7';
}
if(dt!=0){break;}
k<<=1;
}
return dt;
}
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
Esta función básicamente lee el puerto B y
dependiendo del valor leído será el dato
retornado, un teclado matricial es en esencia
un montón de pulsadores colocados de manera
particular conectando entre si filas y columnas.
Los pines del puerto B 33,34,35,36 son colocados
a las filas y los pines 37,38,39,40 son
colocados en las columnas de la matriz, esto se
puede cambiar ajustando todo a nuestro teclado.
Si observa la variable K=11101111 es puesta en el puerto B y el
valor leído en el puerto dependerá de si hay tecla activa y de que
tecla.
Por ejemplo si coloco el binario 11101111 que es la condición
inicial en el pin 37 habrá un cero y suponiendo que esté apretada
la tecla F se recibe un cero en el pin 33, el binario en el puerto
B en el momento de la lectura será 11101110, el valor de retorno
seria 7 de acuerdo a nuestra tabla y suponiendo que ese valor está
“pintado” en la tecla.
Cambiando los valores de retorno podemos ajustar cualquier matriz.
3
Descargar