Manejar teclado matricial y mostrar en lcd

Hola cletus

Por aquí puedes encontrar varios
https://www.forosdeelectronica.com/f25/decodificador-teclado-matricial-3x4-57372/index2.html#post521098
De: BEKAR
Mensaje #22
Fechado: 05/Jul/2011

https://www.forosdeelectronica.com/f27/tablero-ajedrez-electronico-32599/index3.html#post583756
De: BEKAR
Mensaje #52
Fechado: 21/Nov/2011

https://www.forosdeelectronica.com/f25/usar-74ls374-73573/#post642469
De: coleman20
Mensaje #1
15/Abr/2012

Y si utilizas el buscador puedes encontrar más.

saludos
a sus ordenes
 
amigo muchas gracias pero ya e buscado en el foro y aun no encuentro en estos que me envias ahi no utilizan el pic 16f877a que es el que nesesito no es que no e buscado soloq ue no e encontrado por eso pido ayuda gracias :D otra cosa tambien es que lo busco en asm ya que no e usado nunca el lenguaje c
 
amigo muchas gracias pero ya e buscado en el foro y aun no encuentro en estos que me envias ahi no utilizan el pic 16f877a que es el que nesesito no es que no e buscado soloq ue no e encontrado por eso pido ayuda gracias :D otra cosa tambien es que lo busco en asm ya que no e usado nunca el lenguaje c
Saludos cletus
Ya que dices que no has encontrado aquí en el foro un ejemplo de teclado matricial en ensamblador,
te adjunto aquí un proyecto para el 16F877A.
Los números de las teclas son mostrados en un display de 7 segmentos cátodo común,
usando un 7448 conectado al puerto A, y el teclado al puerto B.

PD. A la simulación le puse también un display BCD, pero solo para ver el valor HEX.
Espero te sirva.

Suerte.
 

Adjuntos

  • 16F877A Teclado Matricial 4x4.rar
    34.3 KB · Visitas: 509
Hola Buenas Tardes, soy nuevo en el foro, quisiera pedir su ayuda, tengo un proyecto de un teclado matricial 4x4, que después de leer el 9, empieze a contar hexadecimal, he logrado armar la parte que cuenta hasta el 9, pero no logro hacer que muestre las letras, lo estoy haciendo con un 74c922, después tengo que meter una gal (pero ahorita lo que llevo hecho es metiendole un registro después). Alguien me podría ayudar a saber como funcionaría la gal después de que manda los datos el 74c922? Si alguien tiene un código ejemplo. Gracias por su ayuda.
 
Bueno cuando se usa el PIC 18F4550 no salen los numeros. Solo se modifica la libreria KBD a continuacion pongo lo que solo se modifico y el programa.
para modifica la libreria es necesario ver donde esta ubicada y copiar el codigo por win7 no deja hacer modificaciones, ya obtenida la libreria le modificamos las conecciones y le cambiamos el nombre de la libreria, la regresamos a su ubicacion original.
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)

#endif

//////////////////////////////////////

y el programa queda:

////////////////////////////////////
#include <18F4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock= 48000000)       
#define use_portb_kbd TRUE
#include <LCD.c>
#include <KBD18.c>
#use fast_io(D)
#use fast_io(B)

void main()
 {
   char k;
   int  x;
   lcd_init();
   kbd_init();
   port_b_pullups(TRUE);
   lcd_putc("\fListo...\n");
                                   
   while (TRUE)
    {
      k=kbd_getc();
      x=k-48;                             //Conversión numérica
      if(k!=0)
       {
        if(k=='*') 
          lcd_putc('\f');
        else
         { lcd_putc(k);             //Imprime carácter
           delay_ms(50);
           printf(lcd_putc,"\f Car=%c",k); //Imprime carácter
           delay_ms(50);
           printf(lcd_putc,"\f Car=%u",k); //Imprime valor ASCII
           delay_ms(50);
           printf(lcd_putc,"\f Num=%u",x); //Imprime valor numérico
           delay_ms(50);
           lcd_putc("\fListo...\n");
         } 
      }
   }
 }
////////////////////////////////////////////
solo queda como hacer las connecciones en proteus.
 
Última edición por un moderador:
Hola a todos soy nuevo en electronica y tengo que programar un pic para leer un teclado matricial 4x3 a traves del puerto B, y a la salida del pic, que encienda un display 7 segmentos. Necesitaría que me ayuden, a programarlo en ccs para simularlo en proteus. No se usar se pic, pero si tengo idea de c++ y veo que son similares. Alguien me ayuda a ptogramar?? Muchas gracias!!
 
Tengo un programa en assembler de ingreso por clave y visualizacion en lcd, el problema es q no estoy segura si este es el que me servia...pero me sirvió :p jejej Espero que al menos te sirva como guia :p

gracias ya pude realizar un programa bastante bien en cual podía cambiar la contraseña por medio del teclado y guardarlo en la eeprom del pic!! gracias por tu aporte!!! me sirvio de mucho
 
Última edición por un moderador:
Hola amigos. Espero estén bien. Tengo un problema con un pic16f877. Estoy tratando de configurar un teclado matricial y un display LCD al pic, programando en mplab y picbasic pro. Estoy configurando las 16 teclas como letras A, B, C, D, .......P. Pero al correr el programa aparece la letra E repetidamente y llena todo el display LCD. Les agradesco si me pueden ayudar. A continuación les muestro el programa a ver si ustedes me ayudan. El pic esta conectado a un programador de pic's que tiene el teclado matricial y el LCD incluido. Gracias de antemano amigos. Lo que puedan hacer por mi. Estoy empezando a programar pic's.

Código:
'hola
DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTD
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTD
DEFINE LCD_EBIT 2
DEFINE LCD_RWREG PORTD
DEFINE LCD_RWBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 44

trisb=%00001111
trisd= 0
portd.0= 1
portd.1= 0
portd.2= 1

dato  var byte
tempo var byte
tempo= 50
lcdout $fe,1

inicio:
'primera fila
portb=%10000000
if portb=%10000001 then dato= "A"
if portb=%10000010 then dato= "B"
if portb=%10000100 then dato= "C"
if portb=%10001000 then dato= "D"
pause tempo

'segunda fila
portb=%01000000
if portb=%01000001 then dato= "E"
if portb=%01000010 then dato= "F"
if portb=%01000100 then dato= "G"
if portb=%01001000 then dato= "H"
pause tempo

'tercera fila
portb=%00100000
if portb=%00100001 then dato= "I"
if portb=%00100010 then dato= "J"
if portb=%00100100 then dato= "K"
if portb=%00101000 then dato= "L"
pause tempo

'cuarta fila
portb=%00010000
if portb=%00010001 then dato= "M"
if portb=%00010010 then dato= "N"
if portb=%00010100 then dato= "O"
if portb=%00011000 then dato= "P"
pause tempo

if portb=%10000000 then dato= 0
if portb=%01000000 then dato= 0
if portb=%00100000 then dato= 0
if portb=%00010000 then dato= 0
pause tempo

if dato= 0 then goto inicio
lcdout dato
dato= 0
pause tempo
goto inicio
end
 
Última edición por un moderador:
Hola amigos. Espero estén bien. Tengo un problema con un pic16f877. Estoy tratando de configurar un teclado matricial y un display LCD al pic, programando en mplab y picbasic pro. Estoy configurando las 16 teclas como letras A, B, C, D, .......P. Pero al correr el programa aparece la letra E repetidamente y llena todo el display LCD. Les agradesco si me pueden ayudar. A continuación les muestro el programa a ver si ustedes me ayudan. El pic esta conectado a un programador de pic's que tiene el teclado matricial y el LCD incluido. Gracias de antemano amigos. Lo que puedan hacer por mi. Estoy empezando a programar pic's.

Saludos asdrurafael.

Si colocas la instrucción LCDOUT sin especificar la posición en el LCD,
siempre correra el caracter por el LCD por estar dentro de un bucle cerrado.

Prueba poniendo la instrucción LCDOUT de esta manera...

LCDOUT $FE,$80,dato ' Escribe en la línea 1 (Posc. 1)
o
LCDOUT $FE,$C0,dato ' Escribe en la línea 2 (Posc. 1)

Suerte.
 
Yo he usado el 74c922 en algunos proyectos y es bastante fácil de usar, pero no entiendo que es exactamente lo que quieres hacer.

podrías poner un diagrama de o que tienes hasta ahora y una explicación más detallada de lo que tu circuito debe hacer?
 
Hola de nuevo amigos. Espero que se encuentren bien. Estimado Darkbytes te escribo porque la letra sigue apareciendo repetidamente pero ahora con un espacio por medio. He notado que el programa se comporta como si no ejecutara la penúltima instrucción, es decir dato= 0, No me explico por qué, si es que fuera eso. Gracias por tu receptividad. Si observaras otro error en el programa te agradecería me corrijas. Saludos y que la pasen bien.
 
Hola de nuevo amigos. Espero que se encuentren bien. Estimado Darkbytes te escribo porque la letra sigue apareciendo repetidamente pero ahora con un espacio por medio. He notado que el programa se comporta como si no ejecutara la penúltima instrucción, es decir dato= 0, No me explico por qué, si es que fuera eso. Gracias por tu receptividad. Si observaras otro error en el programa te agradecería me corrijas. Saludos y que la pasen bien.
Saludos nuevamente asdurafael.

Para poder entender bien que es lo que esta pasando es necesario un esquema
de las conexiones del PIC al teclado matricial, porque hay varios tipos.
El código que implementas para manejar el teclado matricial es muy poco usual,
y existen varias formas de manejarlo.

Te adjunto una rutina sencilla 4x4 fácil de entender, y funciona bien.
Analizala y pruebala con tu entrenador, puede ser que te funcione.
Dentro del archivo viene también la simulación en ISIS del proyecto.

Suerte.
 

Adjuntos

  • 16F877_Keypad_4x4.gif
    16F877_Keypad_4x4.gif
    43.6 KB · Visitas: 163
  • 16F877 Teclado 4x4.rar
    13.4 KB · Visitas: 372
necesito guardar un parámetro de varios digitos en una direccion de la eeprom del pic 16f877A, esto es debido a que estoy creando un set point ( mínimo y máximo) para compararlo con un dato almacenado, ya he podido guardar parámetros en la eeprom con el teclado matricial, pero estos solo son de un dígito, estoy programando en con pic basic pro, toda la ayuda que me puedan brindar se las agradecería......

saludos
 
Amigo D@rkbytes. Espero que estés bien. Quiero preguntarte acerca del programa que me enviaste. Disculpa mi ignorancia. Cuando el programa hace el barrido lo inicia con una columna, puesta a cero. Y luego tu pones a cero una fila donde esta la tecla marcada y es la tecla que debe salir. Pero si está a cero es porque no ha sido pulsada, es lo que no entiendo, porque debería enviarse un uno (5 volts) por una columna y luego por la fila donde esta la tecla marcada salir un uno que entra en el puerto correspondiente, es la manera en que veo las cosas. Tu me dirás si estoy errado y si no es mucha molestia y me puedes dar una breve explicación para así corregir mi programa y mis errores. por lo demás el circuito de mi programador está conectado de manera semejante al del proteus tuyo excepto que yo utilizo la filas para el barrido y tu las columnas. También voy a corregir la frecuencia de operación, porque yo no he definido ninguna en el programa y tu empleas 4 mega hertz. Tampoco se que son las resistencias pullup. Bueno eso es todo. Gracias por tu receptividad. Nuevamente me despido deseandote mucha salud y paz. Pasala bien. Espero tu respuesta.
 
Amigo D@rkbytes. Espero que estés bien. Quiero preguntarte acerca del programa que me enviaste. Disculpa mi ignorancia. Cuando el programa hace el barrido lo inicia con una columna, puesta a cero. Y luego tu pones a cero una fila donde esta la tecla marcada y es la tecla que debe salir. Pero si está a cero es porque no ha sido pulsada, es lo que no entiendo, porque debería enviarse un uno (5 volts) por una columna y luego por la fila donde esta la tecla marcada salir un uno que entra en el puerto correspondiente, es la manera en que veo las cosas. Tu me dirás si estoy errado y si no es mucha molestia y me puedes dar una breve explicación para así corregir mi programa y mis errores. por lo demás el circuito de mi programador está conectado de manera semejante al del proteus tuyo excepto que yo utilizo la filas para el barrido y tu las columnas. También voy a corregir la frecuencia de operación, porque yo no he definido ninguna en el programa y tu empleas 4 mega hertz. Tampoco se que son las resistencias pullup. Bueno eso es todo. Gracias por tu receptividad. Nuevamente me despido deseandote mucha salud y paz. Pasala bien. Espero tu respuesta.
Saludos asdurafael.
El barrido del teclado es muy sencillo, pero para que lo entiendas,
primero debes saber que es una resistencia pull up y pull down.
Una resistencia pull up es un resistor que mantiene un estado alto.
(Una terminal hacia VDD y la otra hacia el pin de entrada del PIC)
Una resistencia pull down es un resistor que mantiene un estado bajo.
(Una terminal hacia VSS y la otra hacia el pin de entrada del PIC)
No solamente se usan en los PIC, también en los chips CMOS y TTL
Se usan para mantener una referencia de voltaje definida.
Ya que al declarar los pines como entradas, quedan sin referencia de niveles.
El ejemplo del teclado que subí las usa, pero están internamente dentro del PIC.
Al puerto B se le pueden activar resistores de pull up por software,
declarando el Bit 7 del registro OPTION en 0
Es por eso que quizás no lograste entender su funcionamiento.

Sencillamente lo que se hace es así:
Para saber cual tecla se pulso, se hace un barrido.
Se pone un 0 en la primer columna y se leen las filas.
Se hace la comparación de que fila esta en 0 y esa corresponderá con la tecla pulsada.
En este caso lo que se espera cuando una tecla esta pulsada es un 0
Leídas las 4 filas, se pone en 1 la primer columna.
Se pone en 0 la siguiente columna y se vuelven a leer las filas, y así repetidamente.

Bien, pues esa es la forma en que se lee el teclado de ese ejemplo.
Espero que la explicación te haya servido.

Suerte.
 
Gracias D@rkbytes. Ya he comprendido esa parte. Ahora me queda comprender el lazo (Bucle) principal y como logra la escritura de las letras. Muy agradecido por tu colaboración, espero poder configurar bien mi programa. Salud y dicha te sean dadas siempre y donde te encuentres mi amigo.
 
Hola Amigos de nuevo con Ustedes. Espero que estén bien. Sigo trabajando con el teclado 4X4 y el display LCD. Voy bien hasta los momentos y muchas gracias a D@rkbytes y a todos Ustedes por estar ahí siempre. Que bueno poder escribirles. Pásenla bien y feliz día a todos.



Hola Amigos de Foros de Electrónica. Espero estén bien. Continuo trabajando con el display LCD y el teclado 4X4. Gracias a D@rkbytes y a todos aquí. Pásenla bien. Feliz día. :D:)
 
Última edición:
Atrás
Arriba