PIC16F887 Controlar motor con 2 teclas

Hola amigos, :eek: bueno tengo una duda en cuanto mi programa, lo más elemental ya esta hecho es un contador ascedente, que al llegar a 0 prende el motor / foco, (cosa que ya nos salio) pero ahora tengo la duda es que yo quiero meter los tiempos, osea
no programar la tecla "1" y me de 10 segundos,
si no teclear 1 y 0 y me lo lea y me haga la función
al igual si meto 1 y 5 = 15
o igual si meto 0 y 1= me de 1 para que no se repitan, cual seria mi solución?
les anexo parte del programa
esta ensamblado en PIC C

#include <16F887.h> // PIC a utilizar
#FUSES XT // Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOWDT // No Watch Dog Timer
#FUSES NOPUT // No Power Up Timer
#FUSES NOPROTECT // Code not protected from reading
#FUSES NODEBUG // No Debug mode for ICD
#FUSES NOBROWNOUT // No brownout reset
#FUSES NOLVP // No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD // No EE protection
#FUSES NOWRT // Program memory not write protected

#use delay(clock=4000000) // Oscilador a 4MHz

#define use_portb_kbd TRUE // Puerto B, a utilizar para el Teclado Matricial
#include <kbd4x4.c> // Libreria para el manejo del Teclado Matricial a utilizar

#define use_portd_lcd TRUE // Puerto D, a utilizar para el LCD
#include <LCD.c> // Libreria para el manejo del LCD a utilizar

boolean var=0;
void main() {
char k;

int counter;



port_b_pullups(TRUE);
lcd_init();
kbd_init();

lcd_putc("\fIM-602 \nPULSE EL TIEMPO");

start:while (TRUE) {
k=kbd_getc();




//////////////////////// RUTINA TECLA 1 /////////////////////////
if(k=='1') /// AQUI TENGO LA DUDA PARA METER 2 TECLAS Y LO ALMACENE EN UNA VARIABLE Y ME SALGA UNA SALIDA QUE ES %U
{counter=1;
loop1:lcd_putc("\fFOCO APAGADO");
lcd_gotoxy(1,2);
printf(lcd_putc,"POR %u SEGUNDOS ",counter);
counter=counter-1;
k=kbd_getc();
delay_ms(1000);


if(k=='#')//LA IDEA ES QUE ACA RECONOZCA QUE SE OPRIMIO LA TECLA # E INTERRUMPA LA TEMPORIZACION.
{lcd_putc("\fMOTOR EN PAUSA");
delay_ms(5000);}//



else {delay_ms(500);//Mitad de un segundo
if (counter>10)
goto loop1;
else lcd_putc("\fFOCO ENCENDIDO EN \n0 SEGUNDOS");
delay_ms(1000);
lcd_putc("\fPulse una tecla \npara iniciar");
k=kbd_getc();

}
}

}
}

Gracias , y espero me contesten :)
 
pasate por este blog http://robotypic.blogspot.mx/2010/11/control-de-8-servos-con-pic-16f876a_13.html en este programa emplean el teclado casi como tu deseas, te puede dar una idea de como meter los 2 valores de las teclas.

en especifico checa este código de aquí sacas lo que necesitas.:D

Código:
while(true)
{
 x=kbd_getc();                    //En "x" valor ASCII de la tecla pulsada
      if (x!=0&&x!='9'&&x!='8'&&x!='*'&&x!='#'){ //Si se pulsa tecla numérica 0 a 7 ...
         servo=x-48;            //Valor ASCII se pasa a valor numerico de servo
         printf(lcd_putc,"\fServo = %d\n", servo); //...muestra el valor pulsado
         lcd_putc("Introduce angulo");
         
         while (x!='*'){            //Espera a introducir ángulo y aceptar con *
            x=kbd_getc();
            tecla=x-48;
            if (x!=0&&x!='*'&&x!='#'){    //Solo se toman los valores numéricos
               //A cada tecla pulsada se desplaza posición decimal y se muestra
               centenas=decenas;
               decenas=unidades;
               unidades=tecla;
               printf(lcd_putc,"\f Angulo = %ld%d%d\n", centenas, decenas, unidades);
               lcd_putc(" * para aceptar");
            }
         }
       
       angulo=(centenas*100)+(decenas*10)+unidades; 
       if (angulo>180) angulo=180;    //No acepta valores >180º
       pwm=(angulo/13)+7;             //Ajuste modulación en función del valor introducido
       centenas=decenas=unidades=0;   
       
}
 
Última edición:
Atrás
Arriba