Autor Tema: Teclado matricial y LCD  (Leído 3087 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado DavidtXz

  • PIC10
  • *
  • Mensajes: 22
Teclado matricial y LCD
« en: 03 de Mayo de 2020, 20:08:31 »
Buen dia, estoy tratando de visualizar en un display LCD la tecla presionada por un teclado matricial pero cuando presiono la tecla no muestra nada.
Código: C
  1. #include <xc.h>
  2. #include <lcd.h>
  3. #define _XTAL_FREQ 1000000
  4. #pragma config FOSC=INTOSC_EC
  5. #pragma config WDT=OFF
  6. #pragma config PBADEN=OFF
  7.  
  8. #define fila1 LATB0
  9. #define fila2 LATB1
  10. #define fila3 LATB2
  11. #define fila4 LATB3
  12. #define columna1 RB4
  13. #define columna2 RB5
  14. #define columna3 RB6
  15. #define columna4 RB7
  16. unsigned char Tecla();
  17. void main(){
  18.     //Configuracion de pines
  19.     TRISB=0xF0;//(RB7:RB4 Como entradas) (RB3:RB0 Como salidas)
  20.     LATB=0xFF;// Entradas y salidas inician en 1;
  21.     RBPU=0; //Activar resistencias de Pull-UP (RB7:RB4)
  22.     __delay_ms(100);
  23.     //Inicializacion del LCD
  24.     Iniciar_LCD();
  25.     Comando_LCD(0x01);//Limpiar LCD
  26.     while(1){
  27.         fila1=0; fila2=1; fila3=1; fila4=1; //Fila1_ON
  28.         fila1=1; fila2=0; fila3=1; fila4=1; //Fila2_ON
  29.         fila1=1; fila2=1; fila3=0; fila4=1; //Fila3_ON
  30.         fila1=1; fila2=1; fila3=1; fila4=0; //Fila4_ON
  31.         Cursor_LCD(1,5);
  32.         Caracter_LCD(Tecla);
  33.     }
  34. }
  35. unsigned char Tecla(){
  36.             while(columna1==1 && columna2==1 && columna3==1 && columna4==1){
  37.             }          
  38.             fila1=0; fila2=1; fila3=1; fila4=1; //Fila1_ON
  39.             if(columna1==0)return '1';
  40.             if(columna2==0)return '2';
  41.             if(columna3==0)return '3';          
  42.             if(columna4==0)return 'A';        
  43.             fila1=1; fila2=0; fila3=1; fila4=1; //Fila2_ON  
  44.             if(columna1==0)return '4';
  45.             if(columna2==0)return '5';
  46.             if(columna3==0)return '6';          
  47.             if(columna4==0)return 'B';
  48.             fila1=1; fila2=1; fila3=0; fila4=1; //Fila3_ON    
  49.             if(columna1==0)return '7';          
  50.             if(columna2==0)return '8';            
  51.             if(columna3==0)return '9';          
  52.             if(columna4==0)return 'C';            
  53.             fila1=1; fila2=1; fila3=1; fila4=0; //Fila4_ON  
  54.             if(columna1==0)return '*';
  55.             if(columna2==0)return '0';
  56.             if(columna3==0)return '#';
  57.             if(columna4==0)return 'D';
  58. }

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re:Teclado matricial y LCD
« Respuesta #1 en: 04 de Mayo de 2020, 12:05:25 »
Hola David.

¿No te salió una advertencia diciendo que no especificaste el tipo de microcontrolador?

El problema, es que no estás imprimiendo la tecla en el LCD.

Otro error, pero no estoy seguro; es como trabaja el while (1). Por lo que comprendo, es que primero pone a 1 a cada fila, y luego escanea el teclado. Primero debería configurar una fila, y luego leer la tecla. Si no se presionó ninguna tecla, debería reconfigurar la fila, y nuevamente leer el teclado. En el caso de que se presione la tecla, mostrarlo en el LCD.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado DavidtXz

  • PIC10
  • *
  • Mensajes: 22
Re:Teclado matricial y LCD
« Respuesta #2 en: 04 de Mayo de 2020, 15:03:28 »
No, mira que no me manda ningun error por NO incluir el pic supongo que la librecia xc.h se encarga de eso......por otro lado tengo la funcion unsigned char Tecla que me retorna el valor de la tecla presionada a la instruccion Caracter_LCD(Tecla)... algo asi...
Código: C
  1. unsigned char Tecla(){
  2. //codigo que me retorna la tecla presionada
  3. }
  4. Caracter_LCD(Tecla); // en esta instruccion se supone que debe mostrar la tecla.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re:Teclado matricial y LCD
« Respuesta #3 en: 05 de Mayo de 2020, 08:27:12 »
Yo no dije error, dije advertencia (warning).

Vos estás recuperando la Tecla presionada, en Caracter_LCD, pero no lo estás imprimiendo o enviando al LCD. O sea, lo guardas en una variable llamada Caracter_LCD y no haces más nada.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado DavidtXz

  • PIC10
  • *
  • Mensajes: 22
Re:Teclado matricial y LCD
« Respuesta #4 en: 05 de Mayo de 2020, 15:16:48 »
¿Pero como podria arregrarlo?, lo que tengo entendido es que al utilizar "Caracter_LCD(Tecla)" Ya me deberia imprimir la tecla presionada.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re:Teclado matricial y LCD
« Respuesta #5 en: 05 de Mayo de 2020, 17:07:03 »
¿Estás usando CCS?
Si es así, te puedo pasar un programa que funciona.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado DavidtXz

  • PIC10
  • *
  • Mensajes: 22
Re:Teclado matricial y LCD
« Respuesta #6 en: 05 de Mayo de 2020, 20:25:13 »
Estoy usando xc8 pero igual me sirviria tu programa como guia, te lo agradeceria bastante.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re:Teclado matricial y LCD
« Respuesta #7 en: 06 de Mayo de 2020, 09:13:26 »
Mucho mejor, aquí tienes un programa en xc8

h t t p s://www.geekfactory.mx/tutoriales/tutoriales-pic/teclado-matricial-con-pic/

Hay cosas que cambiaría, pero es por gustos míos. La configuración de los puertos (para hacerlos entradas o salidas) las pondrías afuera de la función que crearon para leer las teclas.
Eso es porque consume líneas de código y tiempo de ejecución; con solo hacerlo una vez alcanza. Se justifica si; por necesidad, hay que cambiar la configuración de los puertos.

Lo que tienes que hacer ahora, es agregar las indicaciónes al compilador (el pic a usar, las librerías del LCD, ect) Luego, lees el teclado llamando a la función keypad_read() por ejemplo keypad_read(tecla);
No olvides de declarar a tecla como uint16_t

Una vez recuperado la tecla presionada, para saber eso, chequea que tecla es diferente a 0 por ejemplo:

if (tecla !=0)

Dentro del if, incluye la función printf para imprimir en el LCD

Presta atención la configuración del teclado. No conectes al LCD en el mismo puerto del teclado; y para ello configurar correctamente los pines de conexión del LCD en la función.
« Última modificación: 06 de Mayo de 2020, 09:26:16 por Leon Pic »
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.


 

anything