#include <18F452.h>
#device adc=10 //para el convertidor de temperatura
int8 control=12,activacion=1,sip=1,siq=1,sir=1,sip_c=1,siq_c=1;
int8 mot=10,con=1,sale=10;
int8 moh=10,envio=10;
static int8 siq_salir=0,jkt=0,ordent=1;
int i, ban_visor=0,final=0;
#use delay (clock=8000000)//20000000
#include <LCD420___08_02_2012.c>//#include <lcd_ind424.c> //lo edite el dia 06 02 2012, adjunto
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N)
#use fast_io(B)
#fuses XT,NOWDT,NOPROTECT,NOLVP//esta es la linea que va 04/06/2012
#include <kbd1.c>
#include <STDLIB.H>
#bit RC5=0xF82.5//#bit RC5=0x7.5 //defino RC7 como el pin 7 de la puerta C
#rom int8 0xF00000={'7','2','3'}//#rom 0xF00000={'7','2','3'}//#rom 0x00FF/*0x2100*/={'7','2','3'}
#bit RD7=0xF83.7
int8 crin=7,code=1;
float hum_actual;
int CONST adc[150]={0,2,4,6,8,10,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49
,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,93,95,97,99,101,103,105,107,109,
109,111,113,115,117,119,121,129,131,134,136,138,140,142,144,146,148,150,150,152,154,156,158,
160,162,164,166,168,170,172,175,177,179,181,183,185,187,189,191,193,195,197,199,201,203,205,
207,209,211,214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,
255,257,259,261,263,265,267,269,271,273,275,277,279,281,283,285,287,289,291,293,296,298,300,
302,304,306,308};
///////////////15 02 2012 //////////////////////////////////////////
static int8 lmt_bajo_tem ,lmt_alto_tem,tmp_actual;
static int8 lmt_bajo_hum ,lmt_alto_hum;
//static int8 lmt_bajo_luz ,lmt_alto_luz,luz_actual,error_l=0,reloj=0,tix=10,veri=10;
#int_TIMER0
void led(void)///TIMER0_isr(void)
{
if (RC5==0)
{
RC5=1;
set_TIMER0(0x10); //inicializa el timer0//0x83
} //lo agrego el 29/11/2011, la idea es que llame
else //a la velocidad del parpadeo del led
{
RC5=0;
set_TIMER0(0x10); //inicializa el timer0
}
}
#int_TIMER1
void temp1s(void) //Función
{
if(sir==5)
{
if(jkt >= 25)
{
code=7;
jkt=0;
sale=3;
return;
}
else
{
jkt++;
return;
}
return;
}
return;
}
void seleccioC(void);
void modos(void);
void seleccion(void);
void visor(void);
void seleccioCA(void);
void seleccioCB(void);
void ver_siempre_3(void);
void muestra(void);
///////////////*****************
void main(void)
{
port_b_pullups(true);
kbd_init();
set_tris_c(0b00000011); //configura RB7 como salida el resto como entrada
RC5=0; //inicializo el bit RB7 a 0;
set_tris_e(0b11111111);
set_tris_d(0b11111111);
output_low(pin_c4);
output_low(pin_c3);
output_low(pin_c2);
//estos valores ingresan valores por defecto
write_eeprom(10,1);
delay_ms(10);
write_eeprom(11,1);
delay_ms(10);
write_eeprom(12,2);
delay_ms(10);
write_eeprom(13,2);
delay_ms(10);
write_eeprom(14,3);
delay_ms(10);
write_eeprom(15,3);
delay_ms(10);
write_eeprom(16,4);
delay_ms(10);
write_eeprom(17,4);
delay_ms(10);
lcd_init();
kbd_init();
lcd_gotoxy(1,1);
lcd_putc("hola foro todopic "); //lo modifique ahora
lcd_gotoxy(1,2); //lo agregue ahora
lcd_putc("problema de teclas "); //lo agregue ahora
delay_ms(2000); //lo agregue ahora
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("Tecla 1:elijo 1 ");//lcd_putc("1:Modo Visor ");
lcd_gotoxy(1,2);
lcd_putc("Tecla 2:elijo 2 ");//lcd_putc("2:Modo Ajuste ");
set_tris_b(0xF0); //RB0..RB3 salidas a teclado, RB4..RB7 entradas de teclado
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);//setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
enable_interrupts(INT_TIMER0);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);//setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8); par el jkt
enable_interrupts(INT_TIMER1);
enable_interrupts(global); //habilita interrupción general
do{
seleccion(); //ya esta
visor(); //ya esta
modos(); //ya esta
seleccioC(); //ya esta
seleccioCA(); //ya esta
ver_siempre_3(); //ya esta
muestra(); //ya esta
}while(TRUE);
return;
}
//////////////////////////////////////////////////////////////////////////////
//esta funcion arranca activada, y puede responder al teclado cuando se presion
//la tecla 1 o 2 sobre el teclado real
void seleccion() //la k ya viene de otra funcion cargada
{
int kk;
if(activacion==1)
{
kk=kbd_getc();
if(kk==49) //presiono 1?? 1: Presiono 1 para ingresar al modulo visor
{
control=1;
activacion=0;
code=1;
return;
}
if(kk==50) //presiono 2?? 2: Presiono 2 para ingresar al modulo configuracion
{
control=2;
activacion=0;
code=1;
return;
}
return;
}
return;
}
////////Seleccion de modos Seleccion de modos Seleccion de modos
void modos(void)
{
//if(code==1) ///<----------06 04 2012 lo comente
{
if(control==1)
{
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("Presionaste 1 ahora ");
lcd_gotoxy(1,2);
lcd_putc("Presiona A, B o D ");
control=10;//10
ban_visor=1;
crin=26;
code=0;
return;
}
if(control==2)
{
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("presionaste 2 ahora *");
lcd_gotoxy(1,2);
lcd_putc("elegi el 7 o 8 ");
control=9;
ban_visor=0;
code=0;
return;
}
return;
}
return;
}
///presiono la tecla 2 por eso
//empieza a funcionar esta funcion
void seleccioC() //
{
int kk;
if(control==9)
{
kk=kbd_getc();
if(kk==55) //presiono A?? 0: Presiono cero para resetear
{
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("Parece que ");
lcd_gotoxy(1,2);
lcd_putc("anda el soft ");
control=98;
sip_c=2;
return;
}
if(kk==56) //presiono B?? 1: Presiono 1 para ingresar al modulo visor
{
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("apretaste el ");
lcd_gotoxy(1,2);
lcd_putc("boton 8 ");
control=98;
siq_c=2;
return;
}
if(kk==42) //presiono *?? 3: Presiono 3 para cambiar de modo
{
control=1;//lo comente el 18 04 2012
code=1;
return;
}
return;
}
return;
}
//////////////////////////////////////////////////////////////////////
//esta funcion arranca si se presiono la tecla 1
//al momento de preguntar que tecla quiere:¿¿ tecla 1 o tecla 2??
void visor(void)
{
if(control==10) // control=10, kk=65, sip=1 sir=1;
{
int kk;
kk=kbd_getc();
if(kk==53 && sir==1) //modo activo
{
code=7;
sir=5;
sale=3;
ordent=5;
final=1;
return;
}
if((kk==65 && final==0) || (kk==66 && final==0))
{
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("Presione 5 para ");
lcd_gotoxy(1,2);
lcd_putc("habilitar A y B ");
control=10;
return;
}
if(kk==65 && sip==1 && final==1) //ver la temperatura actual
{
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc
," Habilitaste =%d ",tmp_actual
); lcd_gotoxy(1,2);
printf(lcd_putc
,"Prueba=%d Prueba=%d ",lmt_bajo_tem
,lmt_alto_tem
); sip=2;
sir=1;
siq_salir=1; //05 04 2012
//ordent=5;//agrego esta variable para activar a act_temp() cuando yo quiera
return;
}
if(kk==65 && sip==2)
{
sir=1;
if(mot==2)
{
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("Presionaaste ");
lcd_gotoxy(1,2);
lcd_putc("La a de vuelta ");
sip=1;
envio=1;
// rs__232();
return;
}
if(mot==1)
{
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("esta cambiandp ");
lcd_gotoxy(1,2);
lcd_putc("en marcha ");
sip=1;
envio=1;
//rs__232();
return;
}
//if(mot==0)
{
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("no cambia ");
lcd_gotoxy(1,2);
lcd_putc("nada ");
sip=1;
envio=1;
//rs__232();
return;
}
return;
}
if(kk==66 && siq==1 && final==1) //
{
sir=1;
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc
," Presionaste la B =%f ",hum_actual
); lcd_gotoxy(1,2);
printf(lcd_putc
,"si =%d L=%d ",lmt_bajo_hum
,lmt_alto_hum
); siq=2;
siq_salir=1; //05 04 2012
return;
}
if(kk==66 && siq==2)
{
sir=1;
if(moh==0)
{
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("compu ");
lcd_gotoxy(1,2);
lcd_putc("Apagados ");//lcd_putc("Encendido ");
//lcd_putc("Encendidos ");//output_low(pin_c1);
siq=1;
envio=2;
//rs__232();
return;
}
////*-
////*-
if(moh==1)
{
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("esta cambiando ");//lcd_putc("Motor ");
lcd_gotoxy(1,2);
lcd_putc("sigue el ca ");//lcd_putc("Apagados ");
output_low(pin_c1);
siq=1;
envio=2;
//rs__232();
return;
}
if(moh==2)
{
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("cambio de vuelta ");//lcd_putc("Aspersores ");
lcd_gotoxy(1,2);
lcd_putc("cambia de vuelta ");//lcd_putc("Encendidos ");
output_high(pin_c1);
siq=1;
envio=2;
// rs__232();
return;
}
return;
}
if(kk==42 && sir==5) //05 04 2012
{
code=1; //me permite volver a poder elegir entre modo visor y modo ajuste
sir=1;
sale=10; //desactiva al modo real time
control=2;
return;
}
if(kk==42) //05 04 2012
{
control=2;
return;
}
return;
}
return;
}
///////////////////////////////////////////////////////////////////////////
void ver_siempre_3(void)
{
if(sale==3)
{
envio=2;
if(moh==0)
{
//rs__232();
output_low(pin_c1);
output_low(pin_c0);
envio=1;
if(mot==0)
{
output_low(pin_c2);
output_high(pin_c3);
output_low(pin_c4);
// rs__232();
return;
}
if(mot==1)
{
output_low(pin_c2);
output_low(pin_c3);
output_high(pin_c4);
// rs__232();
return;
}
if(mot==2)
{
output_high(pin_c2);
output_low(pin_c3);
output_low(pin_c4);
// rs__232();
return;
}
envio=0;
return;
}
if(moh==1)
{
//rs__232();
output_low(pin_c0);
output_high(pin_c1);
envio=1;
if(mot==0)
{
output_low(pin_c2);
output_high(pin_c3);
output_low(pin_c4);
//rs__232();
return;
}
if(mot==1)
{
output_low(pin_c2);
output_low(pin_c3);
output_high(pin_c4);
//rs__232();
return;
}
if(mot==2)
{
output_high(pin_c2);
output_low(pin_c3);
output_low(pin_c4);
//rs__232();
return;
}
envio=0;
return;
}
if(moh==2)
{
//rs__232();
output_high(pin_c0);//output_high(pin_c1);
output_low(pin_c1);
envio=1;
if(mot==0)
{
output_low(pin_c2);
output_high(pin_c3);
output_low(pin_c4);
//rs__232();
return;
}
if(mot==1)
{
output_low(pin_c2);
output_low(pin_c3);
output_high(pin_c4);
//rs__232();
return;
}
if(mot==2)
{
output_high(pin_c2);
output_low(pin_c3);
output_low(pin_c4);
//rs__232();
return;
}
envio=0;
}
return;
}
return;
}
//////////////////////////////////////////////////////////////////////////
void muestra(void)
{
if(code==7)
{
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc
,"Parece que fun=%d ",tmp_actual
); lcd_gotoxy(1,2);
printf(lcd_putc
,"ciona ahora =%f ",hum_actual
); code=0;
sale=0;
return;
}
return;
}
////////////////////////////////////////////////////////////////////////////
void seleccioCA() //Setea valores de temperatura
{
if(ban_visor==0 && sip_c==2) //if(control==8)
{
int kk;
con=1;
kk=kbd_getc();
if(kk==49) //presiono 1??
{
lcd_clear();
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("?? TS T> "); //tengo que comentarlas
lcd_gotoxy(1,2);
printf(lcd_putc
," %c%c %d ", read_eeprom
(12),read_eeprom
(13),tmp_actual
); control=98;
sip_c=3; //sip_C=1;
return;
}
if(kk==50) //presiono 2?? 1: Presiono 1 para ingresar al modulo visor
{
lcd_clear();
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("TI ?? T> "); //tengo que comentarlas
lcd_gotoxy(1,2); //tengo que comentarlas
printf(lcd_putc
,"%c%c %d ", read_eeprom
(10),read_eeprom
(11),tmp_actual
); control=98;
sip_c=4;
return;
}
if(kk==42) //presiono *?? *: volver para atras
{
code=1; // lo agregue el 04 04 2012
control=2;
sip_c=1;
return;
}
return;
}
return;
}
///////////////////////////////////////////////////////////////////////
void seleccioCB() //Setea valores de humedad
{
int kk;
if(ban_visor==0 && siq_c==2)//if(control==8)
{
kk=kbd_getc();
if(kk==49) //presiono 0?? 0: Presiono cero para resetear
{
lcd_clear();
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("?? HS H> ");//lcd_putc("1:Limit Inf. Hum");
lcd_gotoxy(1,2);
printf(lcd_putc
," %c%c %f ", read_eeprom
(16),read_eeprom
(17),hum_actual
);//lcd_putc(" "); control=98;
siq_c=3;
return;
}
if(kk==50) //presiono 1?? 1: Presiono 1 para ingresar al modulo visor
{
lcd_clear();
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("HI ?? H> "); //tengo que comentarlas//lcd_putc("2:Limit Sup. Hum");
lcd_gotoxy(1,2);
printf(lcd_putc
,"%c%c %f ", read_eeprom
(14),read_eeprom
(15),hum_actual
);//lcd_putc(" "); control=98;
siq_c=4;
return;
}
/* if(kk==51) //presiono 3?? 3: Presiono 3 para cambiar de modo
{
lcd_clear();
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("3:Cambiar a modo");
lcd_gotoxy(1,2);
lcd_putc(" ");
control=1;
siq_c=5;
return;
}*/
if(kk==42) //presiono *?? *: volver para atras
{
control=2;
siq_c=1;
return;
}
return;
}
return;
}