#include <18f2550.h>
#fuses HS,NOWDT,NOPROTECT,NODEBUG,NOBROWNOUT,NOWRT,NOLVP,NOPUT
#use delay(clock=20000000)
#define RTC_SCL PIN_B1
#define RTC_SDA PIN_B0
#use fast_io(b)
//#define use_portb_lcd TRUE
#include <_ds1307.c>
#include <string.h>
#define LCD_DB4 PIN_C4
#define LCD_DB5 PIN_C5
#define LCD_DB6 PIN_C6
#define LCD_DB7 PIN_C7
//
#define LCD_RS PIN_C0
#define LCD_RW PIN_C1
#define LCD_E PIN_C2
#include <flex_lcd.c>
#include <ds1621.c>
int hr;
int min;
int sec;
int day;
int mth;
int year;
int dow;
char sdow[11];
char ValoresLeidos[105];
Byte value;
/*******************************************************************************
FUNCIONES ESCRITURA Y LECTURA EEPROM INTERNA
*******************************************************************************/
void write_string_eeprom(int address,char *data){
while(*data!=0){
write_eeprom(address++,*data);
data++;
}
write_eeprom(address,0);
}
void read_string_eeprom(int address,char *sl){
sl--;
do{
sl++;
*sl=read_eeprom(address++);
}
while(*sl!=0);
}
/*******************************************************************************
FUNCION DE ALARMAS
*******************************************************************************/
void alarma(void)
{
output_high(PIN_B7);
delay_ms(5000);
output_low(PIN_B7);
}
/*******************************************************************************
PROGRAMA PRINCIPAL
*******************************************************************************/
void main()
{
char alarmas[105];
char alarma1[]="083000";
char alarma2[]="090000";
char alarma3[]="092500";
char alarma4[]="100000";
char alarma5[]="102000";
char alarma6[]="103000";
char alarma7[]="111500";
char alarma8[]="113500";
char alarma9[]="120000";
char alarma10[]="123000";
char alarma11[]="124500";
char alarma12[]="131500";
char alarma13[]="143000";
char alarma14[]="153000";
char alarma15[]="163000";
char *leido=alarmas;
/*******************************************************************************
ESCRIBIR ALARMAS EN LA EPROM
*******************************************************************************/
write_string_eeprom(0x00,alarma1);
write_string_eeprom(0x07,alarma2);
write_string_eeprom(0x0E,alarma3);
write_string_eeprom(0x15,alarma4);
write_string_eeprom(0x1C,alarma5);
write_string_eeprom(0x23,alarma6);
write_string_eeprom(0x2A,alarma7);
write_string_eeprom(0x31,alarma8);
write_string_eeprom(0x38,alarma9);
write_string_eeprom(0x3F,alarma10);
write_string_eeprom(0x46,alarma11);
write_string_eeprom(0x4D,alarma12);
write_string_eeprom(0x54,alarma13);
write_string_eeprom(0x5B,alarma14);
write_string_eeprom(0x62,alarma15);
/*******************************************************************************
INICIALIZAMOS LCD Y DS 1307
*******************************************************************************/
lcd_init();
//init_temp();
printf(lcd_putc,"Reloj ds1307");
printf(lcd_putc,"\nMiquel_S 2010");
delay_ms(2000);
lcd_putc("\f");
lcd_gotoxy(2,1);
printf(lcd_putc,"CP.BLAI BONET");
lcd_gotoxy(5,2);
printf(lcd_putc,"SANTANYI");
delay_ms(2000);
lcd_putc("\f");
delay_ms(5);
ds1307_init(DS1307_ALL_DISABLED);
//Set date for -> 2-Abril-2010 Viernes
//Set time for -> 17:32:00
ds1307_set_date_time(21,4,10,2,22,14,00);
set_tris_b(0x00); //puerto B como salida B7
disable_interrupts(GLOBAL); //todas interrupciones desactivadas
/*******************************************************************************
LEEMOS DS1307 Y VISUALIZAMOS DATOS EN LCD
*******************************************************************************/
do
{
ds1307_get_day_of_week((char*) sdow);
ds1307_get_time(hr,min,sec);
ds1307_get_date(day,mth,year,dow);
lcd_gotoxy(1,1);
printf(lcd_putc,"%s %02u-%02u-%02u",sdow,day,mth,year);
printf(lcd_putc,"\n%02u:%02u:%02u",hr,min,sec);
/*******************************************************************************
LEEMOS Y VISUALIZAMOS TEMPERATURA
*******************************************************************************/
lcd_gotoxy(10,2);
printf(lcd_putc,"Temp:");
value = read_temp();
printf(lcd_putc,"%02u",value);
/*******************************************************************************
LECTURA Y COMPARACION DE LA ALARMA 08:30
*******************************************************************************/
read_string_eeprom(0x00,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y COMPARACION DE LA ALARMA 09:00
*******************************************************************************/
read_string_eeprom(0x07,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y COMPARACION DE LA ALARMA 09:25
*******************************************************************************/
read_string_eeprom(0x0E,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y COMPARACION DE LA ALARMA 10:00
*******************************************************************************/
read_string_eeprom(0x15,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 10:20
*******************************************************************************/
read_string_eeprom(0x1C,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 10:30
*******************************************************************************/
read_string_eeprom(0x23,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 11:15
*******************************************************************************/
read_string_eeprom(0x2A,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 11:35
*******************************************************************************/
read_string_eeprom(0x31,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 12:00
*******************************************************************************/
read_string_eeprom(0x38,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y COMPARACION DE LA ALARMA 12:30
*******************************************************************************/
read_string_eeprom(0x3F,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 12:45
*******************************************************************************/
read_string_eeprom(0x46,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 13:15
*******************************************************************************/
read_string_eeprom(0x4D,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 14:30
*******************************************************************************/
read_string_eeprom(0x54,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 15:30
*******************************************************************************/
read_string_eeprom(0x5B,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
/*******************************************************************************
LECTURA Y ESCRITURA DE LA ALARMA 16:30
*******************************************************************************/
read_string_eeprom(0x62,leido);
sprintf(ValoresLeidos,"%02u%02u%02u",hr,min,sec);
if(strcmp(ValoresLeidos,leido)==0)
alarma();
else
output_low(PIN_B7);
}
While(1);
}