desktop

Manejar teclado matricial y mostrar en lcd

de izquierda a derecha comenzando en el pin 17:
1-2-4-8
les soldé resistencia como de 360 ohms y si van a GND
 
sii es tierraa !!! ya lo konecte igual pero nada mas para un display para k me funcione peroo no me da nada me marka un 0 en el display y al momento k kiero poenerle un numero en el teklado no me da nada =(
 
pero para el Display, me parece que tienes que ponerle primero un decodificador

y pues tambien me parece que necesitas primero hacer un arreglo de 2 flip flops y estos van a los decodificadores y de ahi a los displays
 
Última edición:
Hola amigos del foro

Alguien me puede colaborar con un codigo en pic basic pro el cual me multiplexe un CI74154, yo se que este integrado no prende varias salidas a la vez, pero se que por multiplexacion se puede hacer que parescan que prenden varias salidas a la vez, estoy utilizando un teclado matricial de 8x4, un pic 16f883.

Lo que quiero hacer es que cuando presione una de las teclas prenda una de las salidas y cuando presione cualquiera de las otras teclas tambien se parescan que estan encendidas.
Yo tengo trabajando el teclado y visualizando cada salida del CI74154 cada vez que oprimo una tecla.

Espero me pueda colaborar, adjunto la foto del esquematico.

Cordial saludo

Codigo del programa

HTML:
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2011 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 26/04/2011 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
'ensayo teclado
 
anselh=0
trisa=0
porta=%00011111
 
A var portb.4
B var portb.5
C var portb.6
D var portb.7
UNO VAR portc.0
DOS VAR portc.1
TRES VAR portc.2
CUATRO VAR portc.3
CINCO VAR portc.4
SEIS VAR portc.5
SIETE VAR portc.6 
OCHO VAR portc.7
 
main: 
teclado:
low a
if UNO=0 then PORTA=0
if dos=0 then PORTA=1
if tres=0 then porta=2
if cuatro=0 then porta=3
if cinco=0 then porta=4
if seis=0 then porta=5
if siete=0 then porta=6
if ocho=0 then porta=7
high a
low b
if UNO=0 then porta=8
if dos=0 then porta=9
if tres=0 then porta=10
if cuatro=0 then porta=11
if cinco=0 then porta=12
if seis=0 then porta=13
if siete=0 then porta=14
if ocho=0 then porta=15
high b
low c
if UNO=0 then porta=16
if dos=0 then porta=17
if tres=0 then porta=18
if cuatro=0 then porta=19
if cinco=0 then porta=20
if seis=0 then porta=21
if siete=0 then porta=22
if ocho=0 then porta=23
high c
low d
if UNO=0 then porta=24
if dos=0 then porta=25
if tres=0 then porta=26
if cuatro=0 then porta=27
if cinco=0 then porta=28
if seis=0 then porta=29
if siete=0 then porta=30
if ocho=0 then porta=31
high d
pause 10
goto teclado
end
 

Adjuntos

  • Montaje en proteus.jpg
    Montaje en proteus.jpg
    265.5 KB · Visitas: 20
Última edición:
Buenas
soy nuevo en el foro y necesito ayuda para hacer el sigueinte proyecto
con un 89c51 necesito mostrar en una lcd de 16x2 un numero que sea oprimido en el teclado 4x4....
hasta el momento he buscado informacion de como funciona la lcd, incluso vi un codigo en asm de un "hola mundo" y lo simule en proteus, pero no me funciona.. les agradeceria si me ayudan
 
Sabes.......con el 16f877a no hay ningun problema con esa libreria, de hecho yo tengo hasta dos librerias que puedo usar.......

Debido a que se hicieron algunas modificaciones al 16f887, que segun es el hermano mayor del 16f877a, a la hora de la migracion viene el problema, ya que tienes que configurar los pines del puerto B para poder utilizar las interrupciones en el teclado. Esa parte se me ha complicado, y a la fecha no eh podido hacer adnar el teclado en el 887, que para mi es un dispositivo muy poderoso, ya que no hay necesidad de colocarle un oscilador, ya que lo tiene internamente, aparte de ser mas economico, todo funciona perfectamente hasta que queires configurar el teclado, si alguien sabes como configurarlo lo agradecere.

no soy un experto en el 877a pero si necesitan algo no duden en preguntar.
 
Tengo un problema.
Me compila bien el código el CCS pero en el Proteus no hace nada el teclado.
Le pongo cualquier dígito y no sale nada.
A ver si pueden ayudarme.

Código:
#include <16F876.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock= 4000000)        
#define use_portb_kbd TRUE
#include <lcd.c>
#include <kbd.c>
        

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(500);
           printf(lcd_putc,"\f Car=%c",k); //Imprime carácter
           delay_ms(500);
           printf(lcd_putc,"\f Car=%u",k); //Imprime valor ASCII
           delay_ms(500);
           printf(lcd_putc,"\f Num=%u",x); //Imprime valor numérico
           delay_ms(500);
           lcd_putc("\fListo...\n");
      }
   }
}
 
Última edición por un moderador:
Hola GABAVAGA

En las hojas de datos del MM74C922 dice que este es de la familia CMOS y que es compatible con la familia LPTTL, que quien sabe qué será. es probable que quiera decir Low Power TTL.

saludos
a sus ordenes
 
bueno... problema es q necesito crear mediante compuertas un decodificador o un metodo que me permita decodificar o conocer el numero qeu ha sido pulsado en un teclado matricial 3x4 sin usar el 74c922 o cuanquier key encoder(n) intente hacer las ecuaciones logicas y ok no son muchas pero a la hora de construir el circuito queda demasiado mostro :confused::cry: y no puedo simplificar con mapas k xq son siete ¡¡¡¡ variables con el otro metodo en el que se agrupan el nuimero de unos tampoco porque siempre es el mismo numero (5unos)...... si alguin sabe un metodo por fa ayuda
 
Hola!! :) estoy haciendo un teclado matricial (sin usar pic), y bueno simulando en proteus debo conectar un reloj en una de las entradas de una compuerta AND de dos entradas. En el propetus pues el reloj es un dibujito de pulsos, pero no te dice componentes que utilizaras ni nada.. ahora que lo estoy armando en mi protoboard quisiera saber si puedo usar el N555 (que tengo uno guardado de un montaje anterior) pero no se si servira... y en el caso que si sirva, como lo conecto?? osea me refiero a los pines que trae el 555 con la entrada de la AND. Les agradezco de antemano si me pueden ayudar por favor!! :)

Andrea Liz



Hola Andrea, no se si ya solucionaste tu duda con respecto al N555, en caso de que no; debes saber si usaras flanco de subida y de bajada. Te tengo una propuesta, porque no me das tu correo y yo te envio un pdf donde te explican como usarlo y ademas del circuito a usar, pero me gustaria que me compartieras como usar el teclado sin el pic. He intentando y no he podido.

Si deseas, mi correo es










, me envias un inbox y nos ponemos en contacto, o me pones un mensajito por el mismo foro. Espero tu respuesta.

Por el momento solo te puedo adjuntar esto!!! el peso del articulo me impide subirlo al foro
 

Adjuntos

  • Captura.PNG
    Captura.PNG
    141.1 KB · Visitas: 79
Última edición por un moderador:
Hola GABAVAGA

Entonces el que te envié por el otro tema no te sirvió?. El que viene de ejemplo en el CircuitMaker.

Ve si este te sirve.

saludos
a sus ordenes
 

Adjuntos

  • Borrame 2.jpg
    Borrame 2.jpg
    270.1 KB · Visitas: 218
to tengo e mismo problema con el pic 18f2550 es el mismo código ejemplo. no hace nada en la simulación y me salen muchas advertencias en el proteus.......

Código:
#include <18f2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOMCLR
#use delay(clock= 4M)

#include <lcd.c>
#include <kbd.c>

//Configuración requerida para utilizar el bootloader
#define LOADER_END 0x7FF
#define LOADER_SIZE 0x6FF
#build(reset=LOADER_END+1, interrupt=LOADER_END+9)
#org 0, LOADER_END {} // nothing will replace the bootloader memory space
// Fin de la configuración



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(500);
           printf(lcd_putc,"\f Car=%c",k); //Imprime carácter
           delay_ms(500);
           printf(lcd_putc,"\f Car=%u",k); //Imprime valor ASCII
           delay_ms(500);
           printf(lcd_putc,"\f Num=%u",x); //Imprime valor numérico
           delay_ms(500);
           lcd_putc("\fListo...\n");
      }
   }
 
Última edición por un moderador:
YO TENGO UN PROBLEMA,ME COMPILA BIEN EL CODIGO EL CCS PERO EN EL PROTEUS NO HACE NADA EL TECLADO LE PONGO CUANLQUIERDIGITO Y NO SALE NADA. AVER SI PUDIERAN AYUDARME:

Qué versión del CCS C estás usando?

Porque el código que muestras (creo que es el del libro Compilador C CCS y Simulador PROTEUS p.77) me funcionó perfectamente después de agregar la línea #define use_portb_kbd TRUE que tu también agregaste.

Lo que no he podido hacer es que me funcione el LCD con la versión 4.114, por eso te pregunto la versión que usas.

A mi me ha funcionado bien con la 4.106.

Saludos.
 
to tengo e mismo problema con el pic 18f2550 es el mismo codigo ejemplo. no hace nada en la simulacion y me selen muchas advertencias en el proteus.......

Hola divedwin, tu código solo necesita unas pequeñas modificaciones:

Código:
#include <18F2550.h>
[COLOR="Red"][B]#fuses XT,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOUSBDIV,NOVREGEN,NOMCLR,NOPBADEN[/B][/COLOR]
[COLOR="Red"][B]#use delay(clock= 1M)[/B][/COLOR]

[COLOR="Red"][B]#define LCD_DATA_PORT getenv("SFR:PORTC")[/B][/COLOR]
#include <lcd.c>
[COLOR="Red"][B]#define use_portb_kbd TRUE[/B][/COLOR]
#include <kbd.c>

//Configuración requerida para utilizar el bootloader
#define LOADER_END 0x7FF
#define LOADER_SIZE 0x6FF
#build(reset=LOADER_END+1, interrupt=LOADER_END+9)
#org 0, LOADER_END {} // nothing will replace the bootloader memory space
// Fin de la configuración

void main()
{
    char k;
    int x;
    
    lcd_init();
    kbd_init();
    [COLOR="Red"][B]//port_b_pullups(TRUE);[/B][/COLOR]
    
    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(500);
            printf(lcd_putc,"\f Car=%c",k); //Imprime carácter
            delay_ms(1000);
            printf(lcd_putc,"\f Car=%u",k); //Imprime valor ASCII
            delay_ms(500);
            printf(lcd_putc,"\f Num=%u",x); //Imprime valor numérico
            delay_ms(500);
            lcd_putc("\fListo...\n");
        }
    }
[COLOR="Red"][B]}[/B][/COLOR]

#fuses XT,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOUSBDIV,NOVREGEN,NOMCLR,NOPBADEN
En esta línea lo mas importante es XT y NOPBADEN, porque estás usando un cristal de 4 MHz y no quieres que estén habilitados las entradas A/D del puerto B.

#use delay(clock= 1M)
Esta línea solo la cambié porque simulándolo a 4 MHz, el Proteus se me alenta mucho porque se sobrecarga el CPU.

#define LCD_DATA_PORT getenv("SFR:pORTC")
Con esta línea defines que el LCD irá conectado en el puerto C.

#define use_portb_kbd TRUE
Con esta línea defines que el Teclado irá conectado en el puerto B.

//port_b_pullups(TRUE);
Esta línea la comenté por que el circuito no me responde bien con las pull-ups internas habilitadas, así que las puse manualmente en el Proteus.

}
Te faltó un bracket ;)

Para simularlo en el ISIS de Proteus puedes conectar el circuito como la imagen que adjunté.

Saludos.

PD: Como lo comenté en mi post anterior, yo no he podido hacer funcionar el LCD en el ISIS de Proteus si compilo el código con el CCS C versión 4.114
 

Adjuntos

  • FOROS.jpg
    FOROS.jpg
    118.2 KB · Visitas: 196
Atrás
Arriba