Autor Tema: Teclado matricial  (Leído 5253 veces)

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

Desconectado ingtonny

  • PIC10
  • *
  • Mensajes: 9
Teclado matricial
« en: 06 de Abril de 2010, 15:58:17 »
Hola que tal podria alguien ayudarme a disminuir esta rutina para mi teclado. resulta que quiero guardar los numeros en variables para asi mismo en una siguiente rutina utilizarlas no se si me explique....

      lcd_putc("  BIENVENIDOS");
      delay_ms(3000);
      lcd_enviar(LCD_COMANDO,LCD_CLEAR);
      lcd_putc("ESCRIBA EN Kg EL\nPESO DE LA CAJA");
      delay_ms(3000);
      lcd_enviar(LCD_COMANDO,LCD_CLEAR);
      printf(lcd_putc, " INGRESE PESO...\n            Kg"); //Mensaje en el LCD
tonny: {
  do {tecla=kbd_getc();}   //Lee el teclado
      while(tecla==0);   //Espera que haya alguna pulsada
      delay_ms(100);
        lcd_gotoxy(8,2);   //Posiciona el cursor
      lcd_putc(tecla);  //Visualiza la tecla pulsada
      if (tecla==('*'))
      {
      delay_us(500);
      lcd_enviar(LCD_COMANDO,LCD_CLEAR);
      printf(lcd_putc, " INGRESE PESO...\n            Kg"); //Mensaje en el LCD
      goto tonny;
      }
      if (tecla==('#'))
      {
      delay_us(500);
      lcd_enviar(LCD_COMANDO,LCD_CLEAR);
      printf(lcd_putc,"%i   kg ",c);   //Visualiza el resultado
      delay_ms(2000);
      goto tonny2;
      }
     do
      {
      tecla2=kbd_getc();   //Lee el teclado
      }
      while(tecla2==0);    //Espera que haya alguna pulsada
      delay_ms(100);
      lcd_gotoxy(9,2);   //Posiciona el cursor
      lcd_putc(tecla2);  //Visualiza la tecla pulsada
      if (tecla=='0' && tecla2=='0'){c=0;}
      if (tecla=='0' && tecla2=='1'){c=1;}
      if (tecla=='0' && tecla2=='2'){c=2;}
      if (tecla=='0' && tecla2=='3'){c=3;}
      if (tecla=='0' && tecla2=='4'){c=4;}
      if (tecla=='0' && tecla2=='5'){c=5;}
      if (tecla=='0' && tecla2=='6'){c=6;}
      if (tecla=='0' && tecla2=='7'){c=7;}
      if (tecla=='0' && tecla2=='8'){c=8;}
      if (tecla=='0' && tecla2=='9'){c=9;}
      if (tecla=='1' && tecla2=='0'){c=10;}
      if (tecla=='1' && tecla2=='1'){c=11;}
      if (tecla=='1' && tecla2=='2'){c=12;}
      if (tecla=='1' && tecla2=='3'){c=13;}
      if (tecla=='1' && tecla2=='4'){c=14;}
      if (tecla=='1' && tecla2=='5'){c=15;}
      if (tecla=='1' && tecla2=='6'){c=16;}
      if (tecla=='1' && tecla2=='7'){c=17;}
      if (tecla=='1' && tecla2=='8'){c=18;}
      if (tecla=='1' && tecla2=='9'){c=19;}
      if (tecla=='2' && tecla2=='0'){c=20;}
      if (tecla=='2' && tecla2=='1'){c=21;}
      if (tecla=='2' && tecla2=='2'){c=22;}
      if (tecla=='2' && tecla2=='3'){c=23;}
      if (tecla=='2' && tecla2=='4'){c=24;}
      if (tecla=='2' && tecla2=='5'){c=25;}
      if (tecla=='2' && tecla2=='6'){c=26;}
      if (tecla=='2' && tecla2=='7'){c=27;}
      if (tecla=='2' && tecla2=='8'){c=28;}
      if (tecla=='2' && tecla2=='9'){c=29;}
      if (tecla=='3' && tecla2=='0'){c=30;}
      if (tecla=='3' && tecla2=='1'){c=31;}
      if (tecla=='3' && tecla2=='2'){c=32;}
      if (tecla=='3' && tecla2=='3'){c=33;}
      if (tecla=='3' && tecla2=='4'){c=34;}
      if (tecla=='3' && tecla2=='5'){c=35;}
      if (tecla=='3' && tecla2=='6'){c=36;}
      if (tecla=='3' && tecla2=='7'){c=37;}
      if (tecla=='3' && tecla2=='8'){c=38;}
      if (tecla=='3' && tecla2=='9'){c=39;}
      if (tecla=='4' && tecla2=='0'){c=40;}
      if (tecla=='4' && tecla2=='1'){c=41;}
      if (tecla=='4' && tecla2=='2'){c=42;}
      if (tecla=='4' && tecla2=='3'){c=43;}
      if (tecla=='4' && tecla2=='4'){c=44;}
      if (tecla=='4' && tecla2=='5'){c=45;}
      if (tecla=='4' && tecla2=='6'){c=46;}
      if (tecla=='4' && tecla2=='7'){c=47;}
      if (tecla=='4' && tecla2=='8'){c=48;}
      if (tecla=='4' && tecla2=='9'){c=49;}
      if (tecla=='5' && tecla2=='0'){c=50;}
      if (tecla=='5' && tecla2=='1'){c=51;}
      if (tecla=='5' && tecla2=='2'){c=52;}
      if (tecla=='5' && tecla2=='3'){c=53;}
      if (tecla=='5' && tecla2=='4'){c=54;}
      if (tecla=='5' && tecla2=='5'){c=55;}
      if (tecla=='5' && tecla2=='6'){c=56;}
      if (tecla=='5' && tecla2=='7'){c=57;}
      if (tecla=='5' && tecla2=='8'){c=58;}
      if (tecla=='5' && tecla2=='9'){c=59;}
      if (tecla=='6' && tecla2=='0'){c=60;}
      if (tecla=='6' && tecla2=='1'){c=61;}
      if (tecla=='6' && tecla2=='2'){c=62;}
      if (tecla=='6' && tecla2=='3'){c=63;}
      if (tecla=='6' && tecla2=='4'){c=64;}
      if (tecla=='6' && tecla2=='5'){c=65;}
      if (tecla=='6' && tecla2=='6'){c=66;}
      if (tecla=='6' && tecla2=='7'){c=67;}
      if (tecla=='6' && tecla2=='8'){c=68;}
      if (tecla=='6' && tecla2=='9'){c=69;}
      if (tecla=='7' && tecla2=='0'){c=70;}
      if (tecla=='7' && tecla2=='1'){c=71;}
      if (tecla=='7' && tecla2=='2'){c=72;}
      if (tecla=='7' && tecla2=='3'){c=73;}
      if (tecla=='7' && tecla2=='4'){c=74;}
      if (tecla=='7' && tecla2=='5'){c=75;}
      if (tecla=='7' && tecla2=='6'){c=76;}
      if (tecla=='7' && tecla2=='7'){c=77;}
      if (tecla=='7' && tecla2=='8'){c=78;}
      if (tecla=='7' && tecla2=='9'){c=79;}
      if (tecla=='8' && tecla2=='0'){c=80;}
      if (tecla=='8' && tecla2=='1'){c=81;}
      if (tecla=='8' && tecla2=='2'){c=82;}
      if (tecla=='8' && tecla2=='3'){c=83;}
      if (tecla=='8' && tecla2=='4'){c=84;}
      if (tecla=='8' && tecla2=='5'){c=85;}
      if (tecla=='8' && tecla2=='6'){c=86;}
      if (tecla=='8' && tecla2=='7'){c=87;}
      if (tecla=='8' && tecla2=='8'){c=88;}
      if (tecla=='8' && tecla2=='9'){c=89;}
      if (tecla=='9' && tecla2=='0'){c=90;}
      if (tecla=='9' && tecla2=='1'){c=91;}
      if (tecla=='9' && tecla2=='2'){c=92;}
      if (tecla=='9' && tecla2=='3'){c=93;}
      if (tecla=='9' && tecla2=='4'){c=94;}
      if (tecla=='9' && tecla2=='5'){c=95;}
      if (tecla=='9' && tecla2=='6'){c=96;}
      if (tecla=='9' && tecla2=='7'){c=97;}
      if (tecla=='9' && tecla2=='8'){c=98;}
      if (tecla=='9' && tecla2=='9'){c=99;}
      if (tecla==('#'))
      {
      delay_us(500);
      lcd_enviar(LCD_COMANDO,LCD_CLEAR);
      printf(lcd_putc,"%i   kg ",c);   //Visualiza el resultado
      delay_ms(2000);
      goto tonny2;
      }
      if (tecla==('*'))
      {
      delay_us(500);
      lcd_enviar(LCD_COMANDO,LCD_CLEAR);
      printf(lcd_putc, " INGRESE PESO...\n            Kg"); //Mensaje en el LCD
      goto tonny;
      }
  goto tonny;
mi teclado es de 3x4 segmentos ayuda por favor




« Última modificación: 06 de Abril de 2010, 18:07:31 por un Moderador, Razón: Título corregido »

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Teclado matricial
« Respuesta #1 en: 06 de Abril de 2010, 18:56:42 »
Lo que te recomiendo hacer es lo siguiente

Código: C
  1. lcd_putc("  BIENVENIDOS");
  2.       delay_ms(3000);
  3.       lcd_enviar(LCD_COMANDO,LCD_CLEAR);
  4.       lcd_putc("ESCRIBA EN Kg EL\nPESO DE LA CAJA");
  5.       delay_ms(3000);
  6.       lcd_enviar(LCD_COMANDO,LCD_CLEAR);
  7.       printf(lcd_putc, " INGRESE PESO...\n            Kg"); //Mensaje en el LCD
  8.      
  9.       int c=0;
  10. tonny: {
  11.   do {tecla=kbd_getc();}   //Lee el teclado
  12.       while(tecla==0);   //Espera que haya alguna pulsada
  13.       delay_ms(100);
  14.         lcd_gotoxy(8,2);   //Posiciona el cursor
  15.      
  16.       switch (tecla){
  17.          case '*':
  18.             delay_us(500);
  19.             lcd_enviar(LCD_COMANDO,LCD_CLEAR);
  20.             printf(lcd_putc, " INGRESE PESO...\n            Kg"); //Mensaje en el LCD
  21.             c=0;
  22.             goto tonny;
  23.          case '#':
  24.             delay_us(500);
  25.             lcd_enviar(LCD_COMANDO,LCD_CLEAR);
  26.             printf(lcd_putc,"%i   kg ",c);   //Visualiza el resultado
  27.             delay_ms(2000);
  28.             goto tonny2;
  29.          default:
  30.             if(teclas_presionadas=2)goto tonny; //Si se han presionado mas de 2 teclas, saltar a la etiqueta tonny
  31.             lcd_putc(tecla);  //Visualiza la tecla pulsada
  32.             c=c*10+tecla-'0'; //Cada vez que presionamos una tecla le restamos el valor
  33.                               //ascii de '0' (48) al valor de la tecla, a esto le sumamos
  34.                               //el valor que estaba guardado anteriormente en la variable c
  35.                               //(el primer valor de c siempre es 0),multiplicmos c por 10,
  36.                               //con lo que guardaremos el valor de las teclas presionadas.
  37.             teclas_presionadas++;                
  38.             goto tonny;
  39.       }

El valor siempre se guardara en la variable c, la cual podras utilizar para realizar otras operaciones.
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado ingtonny

  • PIC10
  • *
  • Mensajes: 9
Re: Teclado matricial
« Respuesta #2 en: 07 de Abril de 2010, 15:24:57 »
ok probando tu respuesta que seguro funcionara muchas gracias....

Desconectado ingtonny

  • PIC10
  • *
  • Mensajes: 9
Re: Teclado matricial
« Respuesta #3 en: 07 de Abril de 2010, 16:02:34 »
perdon por mi ignorancia bigluis pero me marco tres errores creo que mi programa esta hecho un desastre te lo muestro desde un principio pero antes por favor podrias decirme como corregir estos errores?

este es la mitad de mi programa...

#include <16f877.h>
#device ADC=10   //Los ADC de los dispositivos 16F87X devuelven 10 bits

//Ajusta los valores de la palabra de configuración durante el ensamblaje:
//Protección de código y datos=OFF, LVP=OFF, WDT=OFF y OSC=XT

#fuses NOPROTECT,NOCPD,NOLVP,NOWDT,XT

// Con estas directivas las funciones "input" y "output_bit" no reprograman
// el pin de la ºpuerta cada vez que son utilizadas. Si no se indica el
// modo fast_io se asume por defecto standard_io el cual reprograma el pin
// siempre antes de ser utilizadas estas funciones.
#use fast_io (A)
#use fast_io (B)
#use fast_io (C)
#use fast_io (E)
#use delay(clock=4000000)
#include <lcd2.c>      //Incluye funciones del manejo del LCD
#include <kbd3x4.c>      //Incluir funciones de manejo del teclado
main()
{
float limite,temp,temp2,resultado1,resultado2,lsb=5.12/512.0; //Variables para el resultado de la conversión AD
int tecla,tecla2,c,b;
float tare,kg;

         output_bit( PIN_C0, 0);
        output_bit( PIN_C1, 0);
      SETUP_ADC_PORTS(NO_ANALOGS);//Puerta A Digital
      set_tris_a(0xFF);      //RA0-RA5 entradas
      set_tris_b(0x00);      //RB0-RB7 salidas
      set_tris_c(0x00);   //Puerta C salida
      set_tris_e(0xff);
      output_c(0x00);      //Borra salidas
      output_bit( PIN_C1, 1);
      delay_ms(500);
      output_bit( PIN_C1, 0);
      lcd_init();      //Inicia la pantalla LCD
      lcd_putc("  BIENVENIDOS");
      delay_ms(3000);
      lcd_enviar(LCD_COMANDO,LCD_CLEAR);
      lcd_putc("ESCRIBA EN Kg EL\nPESO DE LA CAJA");
      delay_ms(3000);
      lcd_enviar(LCD_COMANDO,LCD_CLEAR);
      printf(lcd_putc, " INGRESE PESO...\n            Kg"); //Mensaje en el LCD
     
linea58 error      int c=0;    a numeric expression must apper here

         tonny: {
      do {tecla=kbd_getc();}   //Lee el teclado
      while(tecla==0);   //Espera que haya alguna pulsada
      delay_ms(100);
      lcd_gotoxy(8,2);   //Posiciona el cursor
      switch (tecla){
          case '*':
               delay_us(500);
               lcd_enviar(LCD_COMANDO,LCD_CLEAR);
                printf(lcd_putc, " INGRESE PESO...\n            Kg"); //Mensaje en el LCD
                c=0;
                goto tonny;
                case '#':
                delay_us(500);
                lcd_enviar(LCD_COMANDO,LCD_CLEAR);
                printf(lcd_putc,"%i   kg ",c);   //Visualiza el resultado
                delay_ms(2000);
                goto tonny2;
                default:

 undefined identifier    if(teclas_presionadas=2)goto tonny; //Si se han presionado mas de 2 teclas, saltar a la etiqueta tonny
               
 lcd_putc(tecla);  //Visualiza la tecla pulsada
                c=c*10+tecla-'0'; //Cada vez que presionamos una tecla le restamos el valor
                                  //ascii de '0' (48) al valor de la tecla, a esto le sumamos
                                  //el valor que estaba guardado anteriormente en la variable c
                                  //(el primer valor de c siempre es 0),multiplicmos c por 10,
                                  //con lo que guardaremos el valor de las teclas presionadas.

 undefined identifier               teclas_presionadas++;     
           
                goto tonny;
      }         
      }         

tonny2:

supongo qeu son por que no las e dadop de altaa antes del main por eso te pongo desde el principio para que cheques eso por fa

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Teclado matricial
« Respuesta #4 en: 07 de Abril de 2010, 19:05:21 »
 :oops: lo siento mucho, el error es mío. Los errores presentados es debido a la declaración de las variables:

  • El primer error significa que la declaracion de una variable local solo puede estar debajo del nombre de la función
  • El segundo y tercer error se deben a que la variable " telcas_presionadas" no ha sido declarada.

Te recomiendo que hagas lo siguiente:

Código: C#
  1. main()
  2. {
  3. float limite,temp,temp2,resultado1,resultado2,lsb=5.12/512.0; //Variables para el resultado de la conversión AD
  4.  
  5. int tecla,tecla2,b,c=0,teclas_presionadas;//Aqui declaras las variables que utilizaras para guardar tecla,c y
  6.                                             //teclas presinadas (que se encarga de contar cuantas veces has presinado teclas)
  7. float tare,kg;
  8.  
  9.          output_bit( PIN_C0, 0);
  10.         output_bit( PIN_C1, 0);
  11.       SETUP_ADC_PORTS(NO_ANALOGS);//Puerta A Digital
  12.       set_tris_a(0xFF);      //RA0-RA5 entradas
  13.       set_tris_b(0x00);      //RB0-RB7 salidas
  14.       set_tris_c(0x00);   //Puerta C salida
  15.       set_tris_e(0xff);
  16.       output_c(0x00);      //Borra salidas
  17.       output_bit( PIN_C1, 1);
  18.       delay_ms(500);
  19.       output_bit( PIN_C1, 0);
  20.       lcd_init();      //Inicia la pantalla LCD
  21.       lcd_putc("  BIENVENIDOS");
  22.       delay_ms(3000);
  23.       lcd_enviar(LCD_COMANDO,LCD_CLEAR);
  24.       lcd_putc("ESCRIBA EN Kg EL\nPESO DE LA CAJA");
  25.       delay_ms(3000);
  26.       lcd_enviar(LCD_COMANDO,LCD_CLEAR);
  27.       printf(lcd_putc, " INGRESE PESO...\n            Kg"); //Mensaje en el LCD
  28.  
  29. tonny: {
  30.       do {tecla=kbd_getc();}   //Lee el teclado
  31.       while(tecla==0);   //Espera que haya alguna pulsada
  32.       delay_ms(100);
  33.       lcd_gotoxy(8,2);   //Posiciona el cursor
  34.       switch (tecla){
  35.           case '*':
  36.                delay_us(500);
  37.                lcd_enviar(LCD_COMANDO,LCD_CLEAR);
  38.                 printf(lcd_putc, " INGRESE PESO...\n            Kg"); //Mensaje en el LCD
  39.                 c=0;
  40.                 goto tonny;
  41.                 case '#':
  42.                 delay_us(500);
  43.                 lcd_enviar(LCD_COMANDO,LCD_CLEAR);
  44.                 printf(lcd_putc,"%i   kg ",c);   //Visualiza el resultado
  45.                 delay_ms(2000);
  46.                 goto tonny2;
  47.                 default:
  48.  
  49.     if(teclas_presionadas=2)goto tonny; //Si se han presionado mas de 2 teclas, saltar a la etiqueta tonny
  50.                
  51.  lcd_putc(tecla);  //Visualiza la tecla pulsada
  52.                 c=c*10+tecla-'0'; //Cada vez que presionamos una tecla le restamos el valor
  53.                                   //ascii de '0' (48) al valor de la tecla, a esto le sumamos
  54.                                   //el valor que estaba guardado anteriormente en la variable c
  55.                                   //(el primer valor de c siempre es 0),multiplicmos c por 10,
  56.                                   //con lo que guardaremos el valor de las teclas presionadas.
  57.  
  58.                 teclas_presionadas++;    
  59.            
  60.                 goto tonny;
  61.       }        
  62.       }
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado ingtonny

  • PIC10
  • *
  • Mensajes: 9
Re: Teclado matricial
« Respuesta #5 en: 07 de Abril de 2010, 21:02:47 »
perfecto voy a probarlo muchas gracias amigo.....

Desconectado ingtonny

  • PIC10
  • *
  • Mensajes: 9
Re: Teclado matricial
« Respuesta #6 en: 07 de Abril de 2010, 21:48:18 »
brother no me funciono solo detecta la tecla gato e inmediatamente salta ala siguiente rutina pero imprime que c=0 siempre

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Teclado matricial
« Respuesta #7 en: 08 de Abril de 2010, 16:03:22 »
 :oops: de nuevo error mío, lo que ocurre es que en la linea

Código: [Seleccionar]
if(teclas_presionadas=2)goto tonny;
Esta iteración siempre es cierta ya que le asignas a teclas_presionadas 2, porque el if pregunta si su argumento es distinto de cero, haciendo que siempre saltes a la etiqueta "tonny" sin realizar las demas instrucciones.

Para resolver esto debes poner dos iguales

Código: [Seleccionar]
if(teclas_presionadas==2)goto tonny;
Yo aún no he probado el codigo pero, supongo que funciona. Un consejo es que antes o durante la simulacion depures el codigo. Con depurar me refiero a que utilices la herramienta debugger ya sea de MPLAB o Proteus, estas se encargan de ejecutar instruccion por instruccion el codigo.

Aqui puedes encontrar informacion
« Última modificación: 08 de Abril de 2010, 16:35:43 por bigluis »
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado ingtonny

  • PIC10
  • *
  • Mensajes: 9
Re: Teclado matricial
« Respuesta #8 en: 08 de Abril de 2010, 19:21:36 »
bien ahora si hace las funciones del teclado pero en un solo digito. es decir me muestra un numero en una posicion y cuando quiero poner el siguente numero se vuelve a poner en la misma posicion del numero anterior que teclee y como el numero que quiero guardar es de 01 hasta 99 no se si me entiendas amigo...........

tecleo un peso digamos de 35gr y eso lo guardo en una variable para que en otra rutina me sirva como un limite de peso.....

gracias por tu tiempo

Desconectado ingtonny

  • PIC10
  • *
  • Mensajes: 9
Re: Teclado matricial
« Respuesta #9 en: 08 de Abril de 2010, 19:25:02 »
creo q tiene q ver con el cursor es decir la funcion lcd_gotoxy(8,2); pero no se como esta eso

Desconectado ingtonny

  • PIC10
  • *
  • Mensajes: 9
Re: Teclado matricial
« Respuesta #10 en: 08 de Abril de 2010, 19:43:32 »
ok ya lo estuve analizando mas detallado y si guarda bien la variable con  dos digitos pero lo unico que no hace es visualizar esos 2 numero por el cursor "lcd_gotoxy(8,2);" pero no se como hacerle para que me aparescan los numeros coincidiendo con el mensaje   printf(lcd_putc, " INGRESE PESO...\n            Kg"); no se si me explique

Desconectado bmfranky

  • PIC16
  • ***
  • Mensajes: 165
    • La Tienda De Fran
Re: Teclado matricial
« Respuesta #11 en: 09 de Abril de 2010, 08:11:36 »
Utiliza el contador para la posición del dígito cuando lo introduces:

 1.
      main()
   2.
      {
   3.
      float limite,temp,temp2,resultado1,resultado2,lsb=5.12/512.0; //Variables para el resultado de la conversión AD
   4.
       
   5.
      int tecla,tecla2,b,c=0,teclas_presionadas;//Aqui declaras las variables que utilizaras para guardar tecla,c y
   6.
                                                 //teclas presinadas (que se encarga de contar cuantas veces has presinado teclas)
   7.
      float tare,kg;
   8.
       
   9.
              output_bit( PIN_C0, 0);
  10.
             output_bit( PIN_C1, 0);
  11.
           SETUP_ADC_PORTS(NO_ANALOGS);//Puerta A Digital
  12.
           set_tris_a(0xFF);      //RA0-RA5 entradas
  13.
           set_tris_b(0x00);      //RB0-RB7 salidas
  14.
           set_tris_c(0x00);   //Puerta C salida
  15.
           set_tris_e(0xff);
  16.
           output_c(0x00);      //Borra salidas
  17.
           output_bit( PIN_C1, 1);
  18.
           delay_ms(500);
  19.
           output_bit( PIN_C1, 0);
  20.
           lcd_init();      //Inicia la pantalla LCD
  21.
           lcd_putc("  BIENVENIDOS");
  22.
           delay_ms(3000);
  23.
           lcd_enviar(LCD_COMANDO,LCD_CLEAR);
  24.
           lcd_putc("ESCRIBA EN Kg EL\nPESO DE LA CAJA");
  25.
           delay_ms(3000);
  26.
           lcd_enviar(LCD_COMANDO,LCD_CLEAR);
  27.
           printf(lcd_putc, " INGRESE PESO...\n            Kg"); //Mensaje en el LCD
  28.
       
  29.
      tonny: {
  30.
           do {tecla=kbd_getc();}   //Lee el teclado
  31.
           while(tecla==0);   //Espera que haya alguna pulsada
  32.
           delay_ms(100);
  33.    if(teclas_presionadas==1){/// si solo se ha pulsado una tecla
           lcd_gotoxy(8,2);   //Posiciona el cursor
  34.    }
           switch (tecla){
  35.
               case '*':
  36.
                    delay_us(500);
  37.
                    lcd_enviar(LCD_COMANDO,LCD_CLEAR);
  38.
                     printf(lcd_putc, " INGRESE PESO...\n            Kg"); //Mensaje en el LCD
  39.
                     c=0;
  40.
                     goto tonny;
  41.
                     case '#':
  42.
                     delay_us(500);
  43.
                     lcd_enviar(LCD_COMANDO,LCD_CLEAR);
  44.
                     printf(lcd_putc,"%i   kg ",c);   //Visualiza el resultado
  45.
                     delay_ms(2000);
  46.
                     goto tonny2;
  47.
                     default:
  48.
       
  49.
         if(teclas_presionadas==2)goto tonny; //Si se han presionado mas de 2 teclas, saltar a la etiqueta tonny
  50.
                   
  51.
      lcd_putc(tecla);  //Visualiza la tecla pulsada
  52.
                     c=c*10+tecla-'0'; //Cada vez que presionamos una tecla le restamos el valor
  53.
                                       //ascii de '0' (48) al valor de la tecla, a esto le sumamos
  54.
                                       //el valor que estaba guardado anteriormente en la variable c
  55.
                                       //(el primer valor de c siempre es 0),multiplicmos c por 10,
  56.
                                       //con lo que guardaremos el valor de las teclas presionadas.
  57.
       
  58.
                     teclas_presionadas++;   
  59.
               
  60.
                     goto tonny;
  61.
           }       
  62.
           }         

Así si solo se ha pulsado una tecla la pone en la posicion que quieres, y la segunda la pone a continuación debido al auto incremento del display. prueba y ya me dices.
« Última modificación: 09 de Abril de 2010, 08:13:39 por bmfranky »
Visiten La Tienda De Fran ;-) Aqui. y mi nueva Web Aqui.

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Teclado matricial
« Respuesta #12 en: 09 de Abril de 2010, 12:28:35 »
ok ya lo estuve analizando mas detallado y si guarda bien la variable con  dos digitos pero lo unico que no hace es visualizar esos 2 numero por el cursor "lcd_gotoxy(8,2);" pero no se como hacerle para que me aparescan los numeros coincidiendo con el mensaje   printf(lcd_putc, " INGRESE PESO...\n            Kg"); no se si me explique

Ahora si es tu error, lo que ocurre es que tienes

Código: C#
  1. lcd_gotoxy(8,2);   //Posiciona el cursor

debajo de tonny lo que significa que siempre que presiones una tecla volveras a posicionar el cursor en la posicion 8,2.

Para resolverlo ponlo arriba de tonny y listo, tambien tendras que ponerlo luego de haber borrado el valor. A continuacion te muestro como.

Código: C#
  1. lcd_gotoxy(8,2);   //Posiciona el cursor
  2.      
  3. tonny: {
  4.       do {tecla=kbd_getc();}   //Lee el teclado
  5.       while(tecla==0);   //Espera que haya alguna pulsada
  6.       delay_ms(100);
  7.       switch (tecla){
  8.           case '*':
  9.                 delay_us(500);
  10.                 lcd_gotoxy(8,2);   //Posiciona el cursor
  11.                 printf(lcd_putc, "  "); //Esto borrara los 2 numeros, sin necesidad de borrar todo lo que hay en pantalla.
  12.                 lcd_gotoxy(8,2);   //Posiciona el cursor
  13.                 c=0;                     //Borra el valor en la variable c.
  14.                 goto tonny;
  15.           case '#':
  16.                 delay_us(500);
  17.                 lcd_enviar(LCD_COMANDO,LCD_CLEAR);
  18.                 printf(lcd_putc,"%i   kg ",c);   //Visualiza el resultado
  19.                 delay_ms(2000);
  20.                 goto tonny2;
  21.           default:
  22.                 if(teclas_presionadas=2)goto tonny; //Si se han presionado mas de 2 teclas, saltar a la etiqueta tonny
  23.                
  24.  lcd_putc(tecla);  //Visualiza la tecla pulsada
  25.                 c=c*10+tecla-'0'; //Cada vez que presionamos una tecla le restamos el valor
  26.                                   //ascii de '0' (48) al valor de la tecla, a esto le sumamos
  27.                                   //el valor que estaba guardado anteriormente en la variable c
  28.                                   //(el primer valor de c siempre es 0),multiplicmos c por 10,
  29.                                   //con lo que guardaremos el valor de las teclas presionadas.
  30.  
  31.                 teclas_presionadas++;    
  32.            
  33.                 goto tonny;
  34.       }        
  35.       }

Dije que fue tu error porque este codigo solo lo copie del tuyo y le quite lo que tenías de mas, simplemente no me percate de donde estaba esa linea de codigo. Como te dije yo aun no lo he simulado ni depurado.

La solución de bmfranky tambien es válida, elige la que tu prefieras.

Como ves la mayoria de los problemas tienen soluciones simples, esfuerzate y llegaras a la meta  :-/.
« Última modificación: 09 de Abril de 2010, 12:37:31 por bigluis »
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado ingtonny

  • PIC10
  • *
  • Mensajes: 9
Re: Teclado matricial
« Respuesta #13 en: 12 de Abril de 2010, 20:28:19 »
ok gracias a los 2.


 

anything