Autor Tema: Problema con Teclado para seleccion por teclas  (Leído 1173 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado tuxtankamon

  • PIC10
  • *
  • Mensajes: 10
Problema con Teclado para seleccion por teclas
« en: 12 de Diciembre de 2013, 04:30:35 »
Hola compañeros soy nuevo en la programacion de microcontroladores quiero hacer un control de climatizacion pero tengo un problema en la programacion. Al inicio muestro un menu de dos opciones:
1. Mostrar Temperatura y 2. Cambiar rangos de Temperaturas, la seleccion la quiero hacer con el teclado 4x4 si aprieto 1 me ira a la funcion del sensor de temperatura, si aprieto 2 me ira a la funcion de cambiar rangos de temperatura. La seleccion ya mas o menos la tengo, pero cuando le doy la tecla 1 me muestra la temperatura y si aprieto la tecla 2 al instante se me va a la otra opcion, yo no quiero que pase eso, lo que quiero es que si apreté la tecla 1 se quede solo mostrando la temperatura a pesar de que apriete otra tecla del teclado y que despues de cierto tiempo me regrese al menu principal donde ahi pueda seleccionar otra opcion. En conlcusion mi duda es: como hago para que una vez que este en la funcion se quede enllavada en esa opcion sin hacerle caso a la tecla numero 2 del teclado????

Les agradeceria si me ayudaran, les adjunto el codigo y el ckto. Gracias

Código: [Seleccionar]
#include <16F877A.h>

#device adc=10
#FUSES NOWDT       
#FUSES HS         

#use delay (clock=4M)   

#define LCD_ENABLE_PIN PIN_C0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#define use_portb_kbd TRUE
#include <lcd.c>
#include <kbd.c>
#include <stdlib.h>

void Sensor(void);
//!void Teclado();

int m;


void main(void)
{
char k;
   port_b_pullups(TRUE);
   setup_adc_ports(ALL_ANALOG);
   SETUP_ADC(ADC_CLOCK_INTERNAL);
       lcd_init();
       kbd_init();

Inicio:
        lcd_gotoxy(1,1);
        lcd_putc("1. Mostrar Temperatura");
        lcd_gotoxy(1,2);
        lcd_putc("2. Cambiar Rangos de Temp");
        delay_ms(300);

while(true)

k=kbd_getc();
            if(k!=0)
            {
              if (k == '1')
              {
              Sensor();
              }
              if (k == '2')
              {
//Teclado();
   printf(lcd_putc,"%u",k);
              }             
            }
}
}

void Sensor()
{
   long val,val1,tem1,tem2;   
   set_adc_channel(0);
   delay_ms(10);
   val=READ_ADC();
   tem1=val*0.488;
   set_adc_channel(1);
   delay_ms(10);
   val1=READ_ADC();
   tem2=val1*0.488;
   
    if(tem1>tem2)
      {
   printf(lcd_putc,"\f tem = %Lu",tem1);
   delay_ms(100);
      }
   
   else
   {
   printf(lcd_putc,"\f tem = -%Lu",tem2+1);
   delay_ms(100);
   } 
   

}


Desconectado bagmel

  • PIC12
  • **
  • Mensajes: 56
    • Semaforos los Llanos C.A.
Re: Problema con Teclado para seleccion por teclas
« Respuesta #1 en: 16 de Diciembre de 2013, 23:32:23 »
amigo sube la simulacion de proteus y te ayudo probando el codigo de una vez
La necesidad es la madre de todos los inventos!!!!!!!!!!!!!!

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema con Teclado para seleccion por teclas
« Respuesta #2 en: 17 de Diciembre de 2013, 00:27:39 »
  Creo que si trabajas a 4MHz el fuse debería ser XT

  Una forma sencilla sería colocar un ciclo do-while en tu función senser(). El while podría evaluar una variable que incrementes con alguno de los timer del PIC.

  Trabajando a 4 MHz el ciclo de instrucción es de 1uS. Puedes configurar el timer1 con prescaler en 8 y precargar un valor para que la interrupción del timer se produzca cada 500mS. Dentro de la interrupción incrementas una variable.
  Dicha variable debe ser global y la chequeas en el while de tu función, así si dicha variable llega, por ejemplo a 10 es que pasaron 5 S
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas


 

anything