SoloCodigo

Programación Específica => Microcontroladores => Programación en C => Mensaje iniciado por: Quicksilver en Domingo 12 de Octubre de 2008, 19:53

Título: TECLADO HEXADECIMAL
Publicado por: Quicksilver en Domingo 12 de Octubre de 2008, 19:53
Cofrades Picmanianos, vengo tal vez, con una duda muy trivial, espero que me puedan ayudar, sería para mi de gran ayuda que pudiera hacerlo, para una mayor comprensión, colocaré el código a continuación y en breve, la explicación de lo que quiero hacer, lo que no me da, y lo que espero hacer mas adelante:

#include <16F877.h>
#use delay(clock=2000000)
#fuses NOWDT,NOPROTECT,NOLVP,NODEBUG
#define use_portb_kbd TRUE
#define use_portb_lcd TRUE
#include <LCD.C>
#include <KBD.C>
 
 
char CLAVE[5];
char k;                   //defino  como caracter
 
 
byte j=16, DIR;  
//DIR;           //defino como byte otra constante, otra forma
 
void main() {
   port_b_pullups(TRUE); // Resistencias de Pull up
   
   lcd_init();
   kbd_init();
   
   delay_ms(300);
   
 
   //es para que se deslice la palabra DIGITADO:
 
   for (j=16; j>=1; --j)
   {
   lcd_gotoxy(j,1);
   (lcd_putc("CONTROL PID      "));
   delay_ms(100);
   lcd_putc("/F");
   }
   delay_ms(1000);
   
   lcd_gotoxy(1,1); //esta el puntero
   (lcd_putc("CONTROLADORES"));
   
   lcd_gotoxy(j,2); //esta el puntero
   
    for (j=16; j>=1; --j)
   {
   lcd_gotoxy(j,2);
   (lcd_putc("1.P  2.PI   3.PID   "));
   delay_ms(100);
   }
   
       while (TRUE)
      {
       k=0;
       k=kbd_getc();
        if( (k!=''))
        {
         
         //  ->CONTROL P
         if ((k='1'));
         {
          printf(lcd_putc,"f" );
         (lcd_putc("INGRSE Kc:     "));
         lcd_gotoxy(12,1);
         
          }
         
          //  ->CONTROL PI
          if ((k='2'));
         {
          printf(lcd_putc,"f" );
         (lcd_putc("INGRSE Kc:     "));
         lcd_gotoxy(12,1);
         
         printf(lcd_putc,"f" );
         (lcd_putc("INGRSE Ti:     "));
         lcd_gotoxy(12,1);
         
         printf(lcd_putc,"f" );
         (lcd_putc("INGRSE Tp:     "));
         lcd_gotoxy(12,1);
          }
         
          if ((k='3'));
         {
          printf(lcd_putc,"f" );
         (lcd_putc("INGRSE Kc:     "));
         lcd_gotoxy(12,1);
         
         printf(lcd_putc,"f" );
         (lcd_putc("INGRSE Ti:     "));
         lcd_gotoxy(12,1);
         
         printf(lcd_putc,"f" );
         (lcd_putc("INGRSE Td:     "));
         lcd_gotoxy(12,1);
         
          printf(lcd_putc,"f" );
         (lcd_putc("INGRSE Tp:     "));
         lcd_gotoxy(12,1);
         
          }
   
        }
 
 
      }
}

Bueno, hasta el momento llevo esto de código, sin embargo falta mucho mas por hacer, lo que quiero que me haga este pequeño programa, es escoger entre los 3 tipos de control (P, PI, PID), estoy leyendo un teclado hexadecimal y necesito que cuando apriete el número "1", me seleccione contro P, pero lo que sucede es que me lleva inmediatamente al último, necesito que me reconozca este número, no se que estoy colocando mal, estoy todavía muy nuevo en esto de programar en c, muchisimas gracias por su ayuda camaradas, espero que me puedan ayudar, sería de gran ayuda.
Título: Re: TECLADO HEXADECIMAL
Publicado por: allisap en Martes 4 de Noviembre de 2008, 16:51
saludos  :hola:

bueno no he revisado todo el codigo
pero hay algo que reslata a la vista ...

tienes en los if solo un signo de igual y necesitas dos para realizar la comparacion
     //  ->CONTROL P
         if ((k='1'));    //   <- aqui estas asignando, no comparando (error de novato)


bueno, espero te sirva...

Victor Pasilla
Puebla, Mexico