Necesito ayuda, estoy haciendo el control domotico de una casa con un pic 16f876 y la visualizacion con una lcd de 16x2. No consigo hacer que me muestre la hora y la temperatura a la vez que la otra funcion de control, este es el codigo asta aora, esta con CCS:
#include <16f876.h>
#byte PA=5 //registro del puerto A
#byte PB=6 //registro del puerto B
#byte PC=7 //registro del puerto C
#fuses NOPROTECT,NOWDT,HS,NOPUT
#device adc=10
#use delay (clock=20000000) //frecuencia del oscilador
#include <lcd.c>
int horas,minutos,segundos;
void func_temp(void)
{
do
{
int16 valor;
float v,resultado;
valor = Read_ADC();
v = 5.0 * valor / 1024.0;
resultado = 12.0*v-10;
lcd_gotoxy(12,2);
printf(lcd_putc,"\n%04.1fC",resultado);
} while(TRUE);
}
void func_hora(void)
{
while(1)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"%02d:%02d:%02d",horas,minutos,segundos);
delay_ms(1000);
while(input(PIN_C4))
{
minutos++;
if(minutos==60)
{
minutos=0;
horas++;
}
if(horas==24)horas=0;
}
segundos++;
if(segundos==60)
{
segundos=0;
minutos++;
if(minutos==60)
{
minutos=0;
horas++;
if(horas==24)horas=0;
}
}
}
}
main(void)
{
char variable;
char num_menu = 4; //numero de menus
int16 temp;
set_tris_a(0x01);
set_tris_b(0x00);
set_tris_c(0b00010000);
lcd_init();
setup_adc_ports(AN0_VREF_VREF);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_us(10);
while(1)
{
if (input(PIN_A1))//detecta si se a pulsado menu
{
delay_ms(500);
variable++; //aumenta la variable
lcd_putc('\f'); //limpia la LCD
}
if (variable > num_menu)
{
(variable=0);//si nos pasamos al pulsar...
} //menu, vuelve a la opcion A.
switch (variable)
{
case 0:
lcd_gotoxy(1,1);
printf(lcd_putc, "Luz salon");
if((output_bit(pin_C0,0))&&( !input(pin_A2)))
{
lcd_gotoxy(12,1);
printf(lcd_putc,"OFF");
}
if((output_bit(pin_C0,0))&&(input(pin_A2)))
{
output_toggle(pin_C0);
lcd_gotoxy(12,1);
printf(lcd_putc,"ON");
}
if((output_bit(pin_C0,1))&&(!input(pin_A2)))
{
lcd_gotoxy(12,1);
printf(lcd_putc,"ON");
}
if((output_bit(pin_C0,1))&&(input(pin_A2)))
{
output_toggle(pin_C0);
lcd_gotoxy(12,1);
printf(lcd_putc,"OFF");
}
func_temp();
func_hora();
//if(input(pin_A2)) output_toggle(pin_C0);// func_actuador(variable);
break;
case 1:
lcd_gotoxy(1,1);
printf(lcd_putc,"Calefaccion");
if((output_bit(pin_C1,0))&&(!input(pin_A2)))
{
lcd_gotoxy(12,1);
printf(lcd_putc,"OFF");
}
if((output_bit(pin_C1,0))&&(input(pin_A2)))
{
output_toggle(pin_C1);
lcd_gotoxy(12,1);
printf(lcd_putc,"ON");
}
if((output_bit(pin_C1,1))&&(!input(pin_A2)))
{
lcd_gotoxy(12,1);
printf(lcd_putc,"ON");
}
if((output_bit(pin_C1,1))&&(input(pin_A2)))
{
output_toggle(pin_C1);
lcd_gotoxy(12,1);
printf(lcd_putc,"OFF");
}
func_temp();
func_hora();
//if(input(pin_A2)) func_actuador(variable);
break;
case 2:
lcd_gotoxy(1,1);
printf(lcd_putc,"Luz terraza");
if((output_bit(pin_C2,0))&&(!input(pin_A2)))
{
lcd_gotoxy(12,1);
printf(lcd_putc,"OFF");
}
if((output_bit(pin_C2,0))&&(input(pin_A2)))
{
output_toggle(pin_C2);
lcd_gotoxy(12,1);
printf(lcd_putc,"ON");
}
if((output_bit(pin_C2,1))&&(!input(pin_A2)))
{
lcd_gotoxy(12,1);
printf(lcd_putc,"ON");
}
if((output_bit(pin_C2,1))&&(input(pin_A2)))
{
output_toggle(pin_C2);
lcd_gotoxy(12,1);
printf(lcd_putc,"OFF");
}
func_temp();
func_hora();
//if(input(pin_A2)) output_toggle(pin_C2);// func_actuador(variable);
break;
case 3:
lcd_gotoxy(1,1);
printf(lcd_putc,"Cocina");
if((output_bit(pin_C3,0))&&(!input(pin_A2)))
{
lcd_gotoxy(12,1);
printf(lcd_putc,"OFF");
}
if((output_bit(pin_C3,0))&&(input(pin_A2)))
{
output_toggle(pin_C3);
lcd_gotoxy(12,1);
printf(lcd_putc,"ON");
}
if((output_bit(pin_C3,1))&&(!input(pin_A2)))
{
lcd_gotoxy(12,1);
printf(lcd_putc,"ON");
}
if((output_bit(pin_C3,1))&&(input(pin_A2)))
{
output_toggle(pin_C3);
lcd_gotoxy(12,1);
printf(lcd_putc,"OFF");
}
func_temp();
func_hora();
//if(input(pin_A2)) output_toggle(pin_C3); //func_actuador(variable);
break;
}
}
}