hola amigo, disculpa ya vi mis errores y he modificado el código de manera pertinente solo que ahora me gustaría agregarle unos cambios por ejemplo cuando inicializo el contador me gustaría que al presionar una tecla en el teclado matricial esta se reiniciará o saliera del bucle, bueno ademas de ello tengo problemas con la parte de el sensor ultrasónico que es algo que todavía no logro configurar bien, esque no se como simularlo en proteus, quiero decir descargue las bibliotecas virtuales y todo pero en la parte comentada de mi codigo todavia no me muestra nada. mira te enseño, solo comente la parte del sensor porque si no la comentaba mi programa no seguía.
#include <16f877a.h>
#fuses hs,nowdt
#use delay(clock=20M)
#define lcd_data_port getenv("sfr:portd")
#define lcd_enable_pin pin_d0
#define lcd_rs_pin pin_d1
#define lcd_rw_pin pin_d2
#define use_portb_kbd true
#include <lcd.c>
#include <kbd4x4_1.c>
// sensor ultrasonico hs-sr04
#define trig pin_A1
#define echo pin_A0
int h,j,tiempo,m,s;
float distancia,t;
// arriba de esto es toda la configuracion, desde el adc, puertos de salida, la LCD, el pic,
void main()
{
char k; //caracter de tipo caracter
int x;
port_b_pullups(true); //esto acctiva las resistecnais de pull ut para que ya no haya necesidad de ponerlas
//resistencias
lcd_init(); //se llama a la lcd
kbd_init(); // se llama al teclado matricial
inicio: //funcion para el uso de un goto
printf(lcd_putc,"BIENVENIDO"); //primer
delay_ms(2000);
printf(lcd_putc,"\f");
for(j=6;j>=1;j--)
{
lcd_gotoxy(j,1);
printf(lcd_putc, " PROYECTO V 1.0 ");
delay_ms(100);
}
for(j=6;j>=1;j--)
{
lcd_gotoxy(j,2);
printf(lcd_putc," TEMPORIZADOR ");
delay_ms(100);
}
delay_ms(1000);
printf(lcd_putc,"\f");
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
//SENSOR HS-SR04
while(true)
{
output_high(trig);
delay_us(10);
output_low(trig);
while(!input(echo))
{}
set_timer1(0);
while(input(echo))
{}
t=get_timer1();
distancia=(tiempo/2)/(29.15);
lcd_gotoxy(1,1);
printf(lcd_putc,"distancia= %f",distancia);
lcd_gotoxy(2,2);
printf(lcd_putc,"tiempo=%f",t);
delay_ms(500);
}
menu:
///TITULO MENU
lcd_gotoxy(1,1);
printf(lcd_putc, "[1] 60 Minutos");
lcd_gotoxy(1,2);
printf(lcd_putc, "[2] 30 Minutos");
lcd_gotoxy(21,1);
printf(lcd_putc, "[3] 15 Minutos");
lcd_gotoxy(21,2);
printf(lcd_putc, "[4] 05 Minutos");
while(true)
{
k=kbd_getc();
x=k-48;
if(k!=0)
{
// lcd_gotoxy(1,1);
//printf(lcd_putc,"tecla pulsada: %c",k);
switch(k)
{
//aqui me gustaria poner interrupciones como cuando se toca cierto numero se sale del ciclo de temporizador
case '1':
printf(lcd_putc, "\fINICIANDO.");
delay_ms(1000);
printf(lcd_putc, "\fINICIANDO..");
delay_ms(1000);
printf(lcd_putc, "\fINICIANDO...");
delay_ms(1000);
// valor motor
output_low(pin_D3);
for(j=60;j>=1;j--)
{
for(h=60;h>=1;h--)
{
printf(lcd_putc,"\fCUENTA REGRESIVA\n %i : %i ",j-1,h-1);
delay_ms(1000);
}
}
printf(lcd_putc,"\f bomba Activada");
//Activar el motor
output_high(pin_D3);
delay_ms (30000);
output_low(pin_D3);
printf(lcd_putc, "\fFINALIZADO");
delay_ms(1000);
break;
////
case '2':
printf(lcd_putc, "\fINICIANDO.");
delay_ms(1000);
printf(lcd_putc, "\fINICIANDO..");
delay_ms(1000);
printf(lcd_putc, "\fINICIANDO...");
delay_ms(1000);
//valor de motor
output_high(pin_D3);
for(j=30;j>=1;j--)
{
for(h=60;h>=1;h--)
{
printf(lcd_putc,"\fCUENTA REGRESIVA\n %i : %i ",j-1,h-1);
delay_ms(1000);
}
}
printf(lcd_putc,"\f bomba Activada");
//Activar el motor
output_high(pin_D3);
delay_ms (30000);
output_low(pin_D3);
printf(lcd_putc, "\fFINALIZADO");
delay_ms(1000);
break;
///
case '3':
printf(lcd_putc, "\fINICIANDO.");
delay_ms(1000);
printf(lcd_putc, "\fINICIANDO..");
delay_ms(1000);
printf(lcd_putc, "\fINICIANDO...");
delay_ms(1000);
// valor motor
output_low(pin_D3);
for(j=15;j>=1;j--)
{
for(h=60;h>=1;h--)
{
printf(lcd_putc,"\fCUENTA REGRESIVA\n %i : %i ",j-1,h-1);
delay_ms(1000);
}
}
printf(lcd_putc,"\f bomba Activada");
//Activar el motor
output_high(pin_D3);
delay_ms (30000);
output_low(pin_D3);
printf(lcd_putc, "\fFINALIZADO");
delay_ms(1000);
break;
////
case '4':
printf(lcd_putc, "\fINICIANDO.");
delay_ms(1000);
printf(lcd_putc, "\fINICIANDO..");
delay_ms(1000);
printf(lcd_putc, "\fINICIANDO...");
delay_ms(1000);
// valor motor
output_low(pin_D3);
for(j=1;j>=1;j--)
{
for(h=59;h>=1;h--)
{
printf(lcd_putc,"\fCUENTA REGRESIVA\n %i : %i ",j-1,h-1);
delay_ms(1000);
}
}
printf(lcd_putc,"\f bomba Activada");
//Activar el motor
output_high(pin_D3);
delay_ms (30000);
output_low(pin_D3);
printf(lcd_putc, "\fFINALIZADO");
delay_ms(1000);
break;
default:printf(lcd_putc, "\fError");
delay_ms(1000);
goto menu;
}
printf(lcd_putc, "\f");
goto inicio;
}
}
}