Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

04/10/2012 #1


Problema con programa cuenta regresiva en ccs
Que tal, estoy haciendo un programa el cual muestre un mensaje de Activado en la primera fila del LCD cuando detecta un 1 en el BT1 que es el E0, y mientras en la segunda fila muestre una cuenta regresiva de 30 seg. El problema es que nose como hacer para que cuando oprima la tecla '*' de un teclado matricial 3x4 esta se interrumpa y me aparesca un mensaje en LCD de Descativado. Espero y me puedan ayudar dejo el codigo que he realizado.

Código:
#include <16F887.h>
#fuses XT,NOWDT,NOPROTECT,PUT

#use delay(clock=4M)

#define use_portb_lcd TRUE
#include <lcd.c>
#include <kbd.c>

#use fast_io(C)
#use fast_io(E)

#byte portc = 0x07
#byte porte = 0x09

#bit BT1 = 0x09.0

int    a=1,d=29;
char k;

void inicializar(void)
{
   setup_adc_ports(NO_ANALOGS);
   set_tris_e(0b11111111);
   lcd_init();
   kbd_init();
}

void main(void)
{
   inicializar();
   for(;;)
   {
      if(BT1==1)
      {
         lcd_gotoxy(1,1);
         printf(lcd_putc,"ACTIVADO");
         do
         {
            output_C(0x1);
            delay_ms(500);
            output_C(0x0);
            delay_ms(500);
            lcd_gotoxy(1,2);
            printf(lcd_putc,"Tiempo Desc: %d\r",d);
            a++;
            d--;
         }
	 while(a<=30);
	}
    }
}
05/10/2012 #2

Avatar de arrivaellobo

Para empezar, para la próxima introduce el código envuelto en las etiquetas , así se ve mejor.

Ahora al grano, si abres la librería kbc.c, verás que en la cabecera te indica cómo utilizarla. Explica que para retornar el carácter pulsado tienes que usar "kbd_getc(c)".
En tu programa podría ser algo así:

Código:
#include <16F887.h>
#fuses XT,NOWDT,NOPROTECT,PUT

#use delay(clock=4M)

#define use_portb_lcd TRUE
#include <lcd.c>
#include <kbd.c>

#use fast_io(C)
#use fast_io(E)

#byte portc = 0x07
#byte porte = 0x09

#bit BT1 = 0x09.0

int a=1,d=29;
char k;

void inicializar(void)
{
setup_adc_ports(NO_ANALOGS);
set_tris_e(0b11111111);
lcd_init();
kbd_init();
}

void main(void)
{

inicializar();
for(;
{
if(BT1==1)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"ACTIVADO");
do
{
if(kbd_getc()=='*') desactiva();
output_C(0x1);
delay_ms(500);
if(kbd_getc()=='*') desactiva();
output_C(0x0);
delay_ms(500);
if(kbd_getc()=='*') desactiva();
lcd_gotoxy(1,2);
printf(lcd_putc,"Tiempo Desc: %d\r",d);
a++;
d--;
if(kbd_getc()=='*') desactiva();
}
while(a<=30);
}
}
}

En mi ejemplo deberías hacer otra funcion a la que saldrías cuando se pulsara *, la función desactiva();
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.