#include <16F886.h>
#device adc=8
#fuses INTRC_IO,NOWDT,PUT,MCLR,NOPROTECT,NOCPD,NOBROWNOUT
#fuses NOIESO,NOFCMEN,NOWRT,NODEBUG,NOLVP
#use delay(clock=4M)
#define use_portb_lcd TRUE
#include <main.h>
#include <lcd.c>
#define SW1 PIN_A1
#define SW2 PIN_A2
#define SW3 PIN_A3
#define SW4 PIN_A4
#define SW5 PIN_A5
#define bomba PIN_C4
#define BLLCD PIN_C3
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
int min=0, seg=0, tempo=10, onoff=10,suma=0, cont=0;
#int_TIMER1
void temp1s(void)
{
cont++;
if (cont==2)
{
seg++;
cont=0;
}
set_timer1 (3036);
if (seg==59)
{
seg=0;
min++;
}
}
void main()
{
set_tris_a(0x3E);
set_tris_b(0x00);
set_tris_c(0x00);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);
set_timer1 (3036);
enable_interrupts(global);
lcd_init ();
output_high(BLLCD);
printf ( LCD_PUTC, "\f" );
lcd_gotoxy(1,1);
printf(lcd_putc,"Config Inicial");
delay_ms(500);
while(true){
if(tempo<10){
lcd_gotoxy(1,2);
printf(lcd_putc,"Time:%d ",tempo);}
else{
lcd_gotoxy(1,2);
printf(lcd_putc,"Time:%d",tempo);}
if(onoff<10){
lcd_gotoxy(9,2);
printf(lcd_putc,"onoff:%d ",onoff);}
else{
lcd_gotoxy(9,2);
printf(lcd_putc,"onoff:%d",onoff);}
if(!input(SW1)){
delay_ms(300);
tempo--;
output_high(BLLCD);
}
if(!input(SW2)){
delay_ms(300);
tempo++;
output_high(BLLCD);
}
if(!input(SW3))
{
delay_ms(300);
onoff--;
output_high(BLLCD);
}
if(!input(SW4))
{
delay_ms(300);
onoff++;
output_high(BLLCD);
}
if(!input(SW5)){
delay_ms(300);
enable_interrupts(INT_TIMER1);
break;
}
}
while(true)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"Time:%d",tempo);
lcd_gotoxy(9,2);
printf(lcd_putc,"onoff:%d",onoff);
lcd_gotoxy(1,1);
printf(lcd_putc,"min:%d ",min);
suma= tempo+onoff;
if(min==1){
output_low(BLLCD);
}
if (min==tempo && min<=suma)
{
if(min==1){
output_low(BLLCD);
}
output_high(bomba);
lcd_gotoxy(8,1);
printf(lcd_putc,"Bomba on ");
lcd_gotoxy(1,1);
printf(lcd_putc,"min:%d ",min);
}
if (min==suma)
{
output_low(bomba);
lcd_gotoxy(8,1);
printf(lcd_putc,"Bomba off");
lcd_gotoxy(1,1);
printf(lcd_putc,"min:%d ",min);
min = 0;
}
delay_ms(200);
}
}
Y acá uno también cíclico con funciones que se puede configurar cuando uno quiera. Para que sea de un solo temporizado solo hay que agregarle un break al ultimo if.
#include <main.h>
#include <lcd.c>
#define SW1 PIN_A1
#define SW2 PIN_A2
#define SW3 PIN_A3
#define SW4 PIN_A4
#define SW5 PIN_A5
#define bomba PIN_C4
#define BLLCD PIN_C3
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
int min=0, seg=0, tempo=10, onoff=10,suma=0, cont=0;
void ajustes (void);
void pausa (void);
#int_TIMER1
void temp1s(void)
{
cont++;
if (cont==2)
{
seg++;
cont=0;
}
set_timer1 (3036);
if (seg==59)
{
seg=0;
min++;
}
}
void pausa (void){
while(1){
delay_ms(100);
if(!input(SW5)){
ajustes();
return;
}}}
void ajustes (void){
printf ( LCD_PUTC, "\f" );
lcd_gotoxy(1,1);
printf(lcd_putc,"Configuracion");
delay_ms(500);
while(true){
if(tempo<10){
lcd_gotoxy(1,2);
printf(lcd_putc,"Time:%d ",tempo);}
else{
lcd_gotoxy(1,2);
printf(lcd_putc,"Time:%d",tempo);}
if(onoff<10){
lcd_gotoxy(9,2);
printf(lcd_putc,"onoff:%d ",onoff);}
else{
lcd_gotoxy(9,2);
printf(lcd_putc,"onoff:%d",onoff);}
if(!input(SW1)){
delay_ms(400);
tempo--;
output_high(BLLCD);
}
if(!input(SW2)){
delay_ms(400);
tempo++;
output_high(BLLCD);
}
if(!input(SW3))
{
delay_ms(400);
onoff--;
output_high(BLLCD);
}
if(!input(SW4))
{
delay_ms(400);
onoff++;
output_high(BLLCD);
}
if(!input(SW5)){
delay_ms(400);
enable_interrupts(INT_TIMER1);
return;
}
}
}
void main()
{
set_tris_a(0x3E);
set_tris_b(0x00);
set_tris_c(0x00);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);
set_timer1 (3036);
enable_interrupts(global);
lcd_init ();
output_high(BLLCD);
printf ( LCD_PUTC, "\f" );
printf ( LCD_PUTC, "Press Start" );
Pausa();
while(true)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"Time:%d",tempo);
lcd_gotoxy(9,2);
printf(lcd_putc,"onoff:%d",onoff);
lcd_gotoxy(1,1);
printf(lcd_putc,"min:%d ",min);
suma= tempo+onoff;
if(!input(SW5)){
Pausa();
}
if(min==1){
output_low(BLLCD);
}
if (min==tempo && min<=suma)
{
if(min==1){
output_low(BLLCD);
}
output_high(bomba);
lcd_gotoxy(8,1);
printf(lcd_putc,"Bomba on ");
lcd_gotoxy(1,1);
printf(lcd_putc,"min:%d ",min);
}
if (min==suma)
{
output_low(bomba);
lcd_gotoxy(8,1);
printf(lcd_putc,"Bomba off");
lcd_gotoxy(1,1);
printf(lcd_putc,"min:%d ",min);
min = 0;
}
delay_ms(200);
}
}