Manejar teclado matricial y mostrar en lcd

Ok ya pude hacer funcionar el teclado matricial, ahora lo que necesito es hacer que se desplieguen dos números en dos displays, para esto necesito guardar los datos en un registro.

Lo que no se es que tipo de registro usar si uno en serie o paralelo. La idea que tenemos es poner un registro en serie para que los datos se pasen cuando haya un clock. Sin embargo el clock que estamos utilizando es del decoder la salida data available.
 
Hola a todos!! Bueno tengo que sacar un programa sencillo donde el usuario ingrese una clave de 4 dígitos y de ahí haga otra cosa si la clave es correcta (eso es lo de menos por el momento)...si el usuario no digita nada en el teclado el programa automáticamente pone un "#" para que la clave sea incorrecta después de un tiempo...El problema es que no quiere capturar el dato ni nada, de una pone los asteriscos y sale que está mal, iba a utilizar la eeprom interna pero primero quiero que salga la clave bien, ahí está el programa, estoy utilizando mplab y las conexiones del lcd y teclado están bien hechas porque ya hemos probado otros programas por opciones en el teclado y estan bn, es el problema de la clave el que no sirve :S les agradecería mucho la ayuda :)
 

Adjuntos

  • ingreso por clave.txt
    2.7 KB · Visitas: 378
Como puedo saber si el teclado esta funcionando como debe? Bueno, en proteus conecto el teclado al pic pero solo se pone en 1 todo el puerto b y al pulsar una tecla no pasa nada. Es problema del proteus o alguna otra cosa?
 
Bueno, trate de hacer algo pero no me sale. Tengo problemas con la conexión de teclado creo, o no se si es en la programación. Quiero mostrar en el lcd la tecla que acabo de pulsar. Según mi lógica el programa esta bien pero al simular en el proteus no pasa nada, solo se queda en el primer mensaje el lcd "Pulse una tecla" y cuando pulso la tecla no sale nada en el lcd.

Código:
#include <18F4550.h>           //Libreria del PIC
#fuses XT,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,NOVREGEN,NOPBADEN //Configuracion de los fuses:
#use delay (clock=4000000)    //Configuramos oscilador a 4Mhz
#include <lcd.c>   //Libreria para la lcd
#include <kbd.c>   //Libreria para teclado matricial
#use fast_io(A)
#use fast_io(B)



//---------- PROGRAMA PRINCIPAL ----------------

void main ()
{
   char tecla;
   set_tris_b(0xff);
   port_b_pullups(true);
   kbd_init();
   lcd_init();
   lcd_putc("\fPulse una tecla\n");
   delay_ms(300);
   for(;;)
   {
   tecla = kbd_getc();
   printf(lcd_putc,"Tecla pulsada: %c" tecla);
   delay_ms(100);
   }
}

El esquema de proteus es el siguiente:
EsquemaProyecto.png


El código lo hice yo, el esquema también. Quiero mostrar lo que se pulsa en el lcd, con el manejo del lcd no tengo mucho problema, incluso ya hasta hice un contador con lcd :LOL:. Pero este teclado matricial si me esta dando dolores de cabeza.
Por favor que alguien me explique.
Gracias de antemano.
 
Y donde haces la asignación de los pines para el teclado matricial?????????????

Ya leíste la librería kbd.c????????????????

Saludos hermano politécnico......... je!
 
Buenas tardes señores electronicos;
Tengo una duda con un teclado matricial 4x4 y su decodificador 922

Resulta que tomo el 1er PIN que sale del teclado del lado izquierdo y lo conecto al
Y1, tomo del PIN 2 y lo conecto al Y2 del 922 y asi en secuencia hasta llegar al
PIN 8 y entrada X4, utilizo capacitores de .1mf y 1 mf en en OSC y KBM respectivamente,
conecto LEDS en las salidas para ver el resultado de las teclas y nomas no me salen los numeros que deben de salir y ya he hecho varias conexiones y nomas nada,


Por cierto, se que este teclado tiene una bronca, que si presionas 1 te sale 0,
si presionas 2 te sale 1 y asi sucesivamente, pero eso es lo que quiero que salga.

Ahi si alguien me echara la mano se lo agradeceria bastante, gracias y saludos

922 datasheet

http://www.datasheetcatalog.org/datasheets/120/243040_DS.pdf

e imagen del teclado que uso
 

Adjuntos

  • tecla.jpg
    tecla.jpg
    10 KB · Visitas: 18
Gracias Mr. Carlos, ya me puse en contacto con un profesor y me dio esta tabla
PIN Symbol
1 ROW 2
2 ROW 3
3 COL 1
4 ROW 4
5 COL 2
6 COL 3
7 COL 4
8 ROW 1

Tomando a partir de la izquierda.

Gracias por su respuesta y pues hay circulen la tablita
Buenas noches: atte Mike
 
Amigo tengo el mismo problema que tu, tengo echo el programa pero a la hora de pulsar una tecla no se me refleja en la lcd. Te agradeceria si lograste resolver tu programa me lo envies para poder ver cual era el error. de ante mano muchas gracias

Bueno, trate de hacer algo pero no me sale. Tengo problemas con la conexión de teclado creo, o no se si es en la programación. Quiero mostrar en el lcd la tecla que acabo de pulsar. Según mi lógica el programa esta bien pero al simular en el proteus no pasa nada, solo se queda en el primer mensaje el lcd "Pulse una tecla" y cuando pulso la tecla no sale nada en el lcd.

Código:
#include <18F4550.h>           //Libreria del PIC
#fuses XT,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,NOVREGEN,NOPBADEN //Configuracion de los fuses:
#use delay (clock=4000000)    //Configuramos oscilador a 4Mhz
#include <lcd.c>   //Libreria para la lcd
#include <kbd.c>   //Libreria para teclado matricial
#use fast_io(A)
#use fast_io(B)



//---------- PROGRAMA PRINCIPAL ----------------

void main ()
{
   char tecla;
   set_tris_b(0xff);
   port_b_pullups(true);
   kbd_init();
   lcd_init();
   lcd_putc("\fPulse una tecla\n");
   delay_ms(300);
   for(;;)
   {
   tecla = kbd_getc();
   printf(lcd_putc,"Tecla pulsada: %c" tecla);
   delay_ms(100);
   }
}

El esquema de proteus es el siguiente:
EsquemaProyecto.png


El código lo hice yo, el esquema también. Quiero mostrar lo que se pulsa en el lcd, con el manejo del lcd no tengo mucho problema, incluso ya hasta hice un contador con lcd :LOL:. Pero este teclado matricial si me esta dando dolores de cabeza.
Por favor que alguien me explique.
Gracias de antemano.



Amigo tengo el mismo problema que tu, tengo echo el programa pero a la hora de pulsar una tecla no se me refleja en la lcd. Te agradeceria si lograste resolver tu programa me lo envies para poder ver cual era el error. de ante mano muchas gracias
 
Última edición:
Hola, ya pude resolver el problema.
La libreria kbd.c viene por defecto para trabajar con el puerto D, si queremos trabajar con algun otro puerto debemos editarla:

Esta es la parte que debemos editar, por defecto viene comentada la linea del define use_portb_kbd TRUE, debemos "descomentarla" para que el teclado sea administrado por el puerto b.
Código:
// Un-comment the following define to use port B
#define use_portb_kbd TRUE

Posteriormente viene en la librera el orden en que se deben conectar los pines del teclado matricial:
Código:
#ifdef blue_keypad  ///////////////////////////////////// For the blue keypad
#define COL0 (1 << 2)
#define COL1 (1 << 3)
#define COL2 (1 << 6)

#define ROW0 (1 << 4)
#define ROW1 (1 << 7)
#define ROW2 (1 << 1)
#define ROW3 (1 << 5)

#else ////////////////////////////////////////////////// For the black keypad
#define COL0 (1 << 0)
#define COL1 (1 << 1)
#define COL2 (1 << 2)

#define ROW0 (1 << 4)
#define ROW1 (1 << 5)
#define ROW2 (1 << 6)
#define ROW3 (1 << 7)

La libreria por defecto trabaja con el orden del black key pad, si queremos trabajar con el blue key pad debemos añadir al principio de la libreria la linea "#define blue_keypad TRUE".
Los pines para las columnas del black key pad serian el 0,1,2 y para los reenglones seria 4,5,6,7.

Este es un código sencillo que imprime en el lcd todo lo que pulsas en el teclado.

Código:
#include <18f4550.h>
#include <18f4550.h>
#use delay(clock=48000000)
#include <KBD_PTOB.c> //windows 7 no dejó editar la libreria, por eso cree otra idéntica pero  para trabajar con el puerto b y la copié en la carpeta "Drivers" del compilador
#include <lcd.c>
#fuses XTPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG
char k; //caracter que será leido
void main(void)
{
   lcd_init();
   kbd_init();
   port_b_pullups(TRUE); 
   while(true){
   k=kbd_getc();//para cachar lo que se pulse o no se pulse en el teclado
   if(k!=0){ //esta instrucción verifica si se ha pulsado una tecla      
      printf(lcd_putc,"%c",k);
      }
   }
}

Adjuntaria el código de la libreria pero seria poner en bandeja de plata el programa y no aprenderian nada y recordemos que aprender es el objetivo de esta comunidad :LOL:.

Así queda finalmente el esquema:
EsquemaProyectoBueno.png


Lo que deseen hacer ya depende de ustedes. Yo hice una cerradura electrónica comprendiendo solo el código que les proporciono y tomando en cuenta algunas propiedades de la pantalla LCD.

Dudas y aclaraciones por aquí, en cuanto tenga tiempo responderé.

Saludos.
 
hola, he estado buscando asuntos referentes a teclados matriciales, y me doy cuenta que las aplicaciones se dan mas con microcontroladores, no se puede usarlas directamente como elementos de salida asi como por ejemplo en un ingresador de password con flip-flop?, estaba practicando en proteus el modo de configuracion del teclado pero el error es que al presionar cualquiera de las teclas de la misma columna mi salida es uno, es decir:

vcc - 1 2 3 (las "rayitas" que estan debajo del 7 8 9 son salidas)
- 4 5 6
- 7 8 9
' ' '
si presiono el 2 la salida es 1, lo mismo pasaria si presiono el 5 o el 8, entonces como sabe el flip-flop que tecla pulso?
 
Atrás
Arriba