Hola! No vi mucho, pero el delay configurado a 40Mhz me asusta...Decíme que no estás usando un cristal de 40Mhz en un 16F877A...Los 16F877A no pueden ser puestos a trabajar a frecuencias mayores a los 20Mhz. Usandolos a 40Mhz es seguro que lo quemaste o estás por lograrlo...
Saludos.
#define edit PIN_A0
#define add PIN_A1
#define less PIN_A2
void main(void){
int1 config=0;
int var=0,temp_hh,temp_mm,temp_ss,temp_dd,temp_me,temp_an;
... //configuraciones
while(true){
if(config==0){
get_hora(); // capturo hora y fecha del RTC
get_fecha();
printf(lcd_putc,"\f%02u:%02u:&02u",hh,mm,ss); // lo muestro en el LCD
printf(lcd_putc,"\f%02u/%02u/&02u",dd,me,an);
delay_ms(200);
}
if(input(edit)){ // si se pulso edit
do{
delay_ms(20); // antirrebote
}while(input(edit));
if(config==0){ // si estaba en modo normal
config=1; // cambio a modo configuración
temp_hh=hh; // copio los valores del RTC capturados anteriormente a variables temporales
temp_mm=mm;
temp_ss=ss;
temp_dd=dd;
temp_me=me;
temp_an=an;
}
var++; // var indica que variable se va a modificar, si horas, minutos,etc.
if(var==7){ // si var es 7 ya no hay más variables que modificar
var=0; // y vuelvo a modo normal, osea mostrar la hora
config=0;
set_hora(temp_hh,temp_mm,temp_ss); // fijo la nueva hora y fecha configurada
set_fecha(temp_dd,temp_me,temp_an);
}
}
if(input(add) && config==1){ // si pulso add y está en modo configurar
do{
delay_ms(20);
}while(input(add));
if(var==1){ // incremento valor de horas
temp_hh++;
if(temp_hh>59)
temp_hh=0;
}
else if(var==2){ // incremento valor minutos
temp_mm++;
if(temp_mm>59)
temp_mm=0;
}
else if(var==3){ // incremento segundos
temp_ss++;
if(temp_ss>59)
temp_ss=0;
}
else if(var==4){
...
}
else if(var==5){
...
}
else if(var==6){
... // algo similar para el día, mes y año, te lo dejo de tarea :mrgreen:, podes controlar tb el mes si es de
// 30 ó 31, o si es febrero bisiesto o no, y hasta un otro pulsador para moverse entre las variables a
// modificar, para ir de derecha a izquierda tb
}
}
if(input(less) && config==1){
... //mismo proceso anterior pero ahora decrementando en cada variable correspondiente
}
}
}
//Este programa una version del rtc1302 adaptada al 1307
////////////////////////////////////////////////////////////////////////////////////
// Programa: Reloj-Calendario DS1307
// Version: 0.0
//
// Dispositivo: PIC 16F877A Compilador: CCS
// Entorno IDE: MPLAB IDE v7.21 Simulador: Proteus 6.7sp3
//
// Notas: Se muestra por pantalla de lcd la fecha y hora obtenida mediante la
// lectura del DS1307. Pudiendose modificar mediante los botones Conf/Ok y up.
// Se utiliza variables globales:
// ·day-> dia ds1302/07
// ·mth -> mes ds1302/07
// ·year -> año ds1302/07
// ·hour -> hora ds1302/07
// ·min -> minutos ds1302/07
// ·sec-> segundos ds1302/07
// ·menu -> variable que muestra opcion del menu configurar
// ·flag -> variable que cuenta hasta 130ms aprox.
// ·var -> ajuste fino para que desborde cada 130ms aprox.
// Se carga el TMR0 con 0 por lo tanto se desborda en 65ms aprox, queremos
// visualizar y restaurar valores cogidos del ds1302 cada 130ms aprox por lo tanto
// utilizamos una variable llamada flag que sera la encargada de dicha tarea.
// Al inicio del programa debe ser configurado el reloj, siendo el boton 'up' el
// encargado de ir moviendose mediante las opciones del menu:hora,minutos,....
// y el boton 'Conf/Ok' el encargado de configurar el reloj(cuando estemos en modo ver
// hora y fecha) o el encargado de salir de la configuracion de las opciones(cuando
// estemos en formato de configurar fecha y hora).
// Tener en cuenta que hay que poner la directiva NOLVP para que el pin B4 sea de
// salida.
// Conexiones: B0 -> SDA DS1307
// B1 -> SCL DS1307
// B2-> I/O DS1307
// B3 -> Boton 'up'
// B5 -> Boton 'Conf/Ok'
// D0 -> E
// D1 -> RS
// D2 -> RW
// D4 -> D4
// D5 -> D5
// D6 -> D6
// D7 -> D7
// D3 -> Zumbador(beep)
//////////////////////////////////////////////////////////////////////////////////
#include <16f877a.h> //pic a utilizar
#use delay(CLOCK=4000000) //Fosc=4Mhz
#fuses HS,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOWDT //comandos para el programador
#use standard_io(b)
#use standard_io(d)
#define use_portd_lcd TRUE //utilizar el port d para lcd
#define RTC_SCL PIN_B1 //definimos pin's...
#define RTC_IO PIN_B2
#define RTC_SDA PIN_B0 //...de conexion de la rtc ds1302
#include <ds1307.c> //libreria de rtc ds1307
#include <lcd.c> //libreria de lcd
///VARIABLES GLOBALES
byte day,mth,year,dow,hour,min,sec; //variabes para ds1307
byte menu=0,flag =0,var=2; //variables para menu configurar
///DEFINICION DE FUNCIONES
void configurar(void);
void horas(void);
void minutos(void);
void dia(void);
void mes(void);
void anio(void);
void beep(void);
//******************/////////////////*************
//definición de las funciones
void rtc_get_date(dd,mm,yy);
void rtc_get_time(hh,mm,ss);
void rtc_set_datetime(dd,mm,yy,dow,hh,mi);
void rtc_init(void);
//***********************************************//
///LLAMADA FUNCION INTERRUPCION
#INT_TIMER0
void interrupcion(){
if(flag>var){ //¿ya es 130ms aprox?
var--; //SI -> decremento var...
if(var==0)
var=2; //...ajuste fino de 130ms aprox
flag=0; //reset flag para contar 130ms aprox
rtc_get_date(day,mth,year); //coge dia,mes,año
rtc_get_time(hour,min,sec ); //coge hora,minuto,segundo
printf(lcd_putc,"\fFecha: %2X/%2X/%2X\nHora: %2X:%2X:%2X",day,mth,year,hour,min,sec);
//lcd
}
set_timer0(0); //reset TMR0
flag++; //incremento variable flag
}
///PROGRAMA
void main(void){
enable_interrupts(INT_TIMER0); //interrupcion TIMER0 activada
setup_counters(RTCC_INTERNAL,RTCC_DIV_256); //configuracion interrupcion TMR0
set_timer0(0); //carga TMR0
lcd_init(); //inicializa lcd
rtc_init(); //inicializa rtc
lcd_putc("Reloj Calendario\n VsZeNeR'05" ); //presentacion...
delay_ms(800); //...inicial
configurar(); //ve a menu configurar
enable_interrupts(GLOBAL); //activadas interrupciones
for( ; ; ){ //bucle...
if(input(PIN_A5)==0){ //Si se pulsa Conf....
while(!input(PIN_A5)){} //elimina rebotes
beep();
configurar();
} //ve a menu configurar
}; //...infinito
}
///FUNCION CONFIGURAR
void configurar(void){
disable_interrupts(GLOBAL); //desactivadas interrupciones
do{
switch(menu){
case 0: lcd_putc("\fConfigurar\nhoras?" ); //horas
if(!input(PIN_A5)){
while(!input(PIN_A5)){}
beep();
horas();
menu=1;
//apunta siguiente opcion
}
break;
case 1: lcd_putc("\fConfigurar\nminutos?" ); //minutos
if(!input(PIN_A5)){
while(!input(PIN_A5)){}
beep();
minutos();
menu=2;
//apunta siguiente opcion
}
break;
case 2: lcd_putc("\fConfigurar\ndia?" ); //dias
if(!input(PIN_A5)){
while(!input(PIN_A5)){}
beep();
dia();
menu=3;
//apunta siguiente opcion
}
break;
case 3: lcd_putc("\fConfigurar\nmes?" ); //mes
if(!input(PIN_A5)){
while(!input(PIN_A5)){}
beep();
mes();
menu=4;
//apunta siguiente opcion
}
break;
case 4: lcd_putc("\fConfigurar\nanio?" ); //años
if(!input(PIN_A5)){
while(!input(PIN_A5)){}
beep();
anio();
menu=5;
//apunta siguiente opcion
}
break;
case 5: lcd_putc("\fSalir\nconfigurar?" ); //salir configuracion
if(!input(PIN_A5)){
menu=6;
beep();
}
}
if(!input(PIN_A3)){ //controla el boton up...
while(!input(PIN_A3)){}
menu++;
if(menu>5)
menu=0;
} //...para mostrar menu por lcd
delay_ms(130); //retardo para ver lcd
}while(menu<6);
menu=0;
//actualiza indices menu
rtc_set_datetime(day,mth,year,dow,hour,min); //nueva hora,minuto,...
enable_interrupts(GLOBAL); //activadas interrupciones
set_timer0(0);
//carga TMR0
}
///FUNCION CONFIGURA HORAS
void horas(void){
printf(lcd_putc,"\fConf.Horas:\nHora: %2X:%2X:%2X",hour,min,sec); //muestra por lcd
do{
if(!input(PIN_A3)){ //¿se ha pulsado up?
while(!input(PIN_A3)){} //elimina rebotes
hour++; //SI -> incremento hour
switch(hour){ //limites...
case 0x0A: hour=0x10;break;
case 0x1A: hour=0x20;break;
case 0x24: hour=0x00;
}
//...hour
printf(lcd_putc,"\nHora: %2X:%2X:%2X",hour,min,sec); //muestra por lcd hour
}
}while(input(PIN_A5));
while(!input(PIN_A5)){} //elimina rebotes
}
///FUNCION CONFIGURA MINUTOS
void minutos(void){
printf(lcd_putc,"\fConf.Minutos:\nHora: %2X:%2X:%2X",hour,min,sec); //muestra por lcd
do{
if(!input(PIN_A3)){ //¿se ha pulsado up?
while(!input(PIN_A3)){} //elimina rebotes
min++; //SI -> incremento min
switch(min){ //limites...
case 0x0A: min=0x10;break;
case 0x1A: min=0x20;break;
case 0x2A: min=0x30;break;
case 0x3A: min=0x40;break;
case 0x4A: min=0x50;break;
case 0x5A: min=0x00;
} //...min
printf(lcd_putc,"\nHora: %2X:%2X:%2X",hour,min,sec); //muestra por lcd min
}
}while(input(PIN_A5));
while(!input(PIN_A5)){} //elimina rebotes
}
///FUNCION CONFIGURA DIAS
void dia(void){
printf(lcd_putc,"\fConf.Dias:\nFecha: %2X/%2X/%2X",day,mth,year); //muestra por lcd
do{
if(!input(PIN_A3)){ //¿se ha pulsado up?
while(!input(PIN_A3)){} //elimina rebotes
day++; //SI -> incremento day
switch(day){ //limites...
case 0x0A: day=0x10;break;
case 0x1A: day=0x20;break;
case 0x2A: day=0x30;break;
case 0x32: day=0x01;
} //...day
printf(lcd_putc,"\fConf.Dias:\nFecha: %2X/%2X/%2X",day,mth,year);
//muestra por lcd day
}
}while(input(PIN_A5));
while(!input(PIN_A5)){} //elimina rebotes
}
///FUNCION CONFIGURA MES
void mes(void){
printf(lcd_putc,"\fConf.Mes:\nFecha: %2X/%2X/%2X",day,mth,year); //muestra por lcd
do{
if(!input(PIN_A3)){ //¿se ha pulsado up?
while(!input(PIN_A3)){} //elimina rebotes
mth++; //SI -> incremento mth
switch(mth){ //limites...
case 0x0A: mth=0x10;break;
case 0x13: mth=0x01;
} //...mth
printf(lcd_putc,"\fConf.Mes:\nFecha: %2X/%2X/%2X",day,mth,year); //muestra por lcd
}
}while(input(PIN_A5));
while(!input(PIN_A5)){} //elimina rebotes
}
///FUNCION CONFIGURA AÑOS
void anio(void){
printf(lcd_putc,"\fConf.Anio:\nFecha: %2X/%2X/%2X",day,mth,year); //muestra por lcd
do{
if(!input(PIN_A3)){ //¿se ha pulsado up?
while(!input(PIN_A3)){} //elimina rebotes
year++; //SI -> incremento mth
switch(year){ //limites...
case 0x0A: year=0x10;break;
case 0x1A: year=0x20;break;
case 0x2A: year=0x30;break;
case 0x3A: year=0x40;break;
case 0x4A: year=0x50;break;
case 0x5A: year=0x60;break;
case 0x6A: year=0x70;break;
case 0x7A: year=0x80;break;
case 0x8A: year=0x90;break;
case 0x9A: year=0x00;
} //...year
printf(lcd_putc,"\fConf.Anio:\nFecha: %2X/%2X/%2X",day,mth,year); //muestra por lcd
}
}while(input(PIN_A5));
while(!input(PIN_A5)){} //elimina rebotes
}
///FUNCION BEEP
void beep(void){
output_high(PIN_B3); //activa zumbador
delay_ms(50);
output_low(PIN_B3); //desactiva zumbador
}
//****************************************
//acá las desarrollas utilizando talvez las funcioens de la libreria
void rtc_get_date(dd,mm,yy){
}
void rtc_get_time(hh,mm,ss){
}
void rtc_set_datetime(dd,mm,yy,dow,hh,mi){
}
void rtc_init(void){
}
//Este programa una version del rtc1302 adaptada al 1307
////////////////////////////////////////////////////////////////////////////////////
// Programa: Reloj-Calendario DS1307
// Version: 0.0
//
// Dispositivo: PIC 16F877A Compilador: CCS
// Entorno IDE: MPLAB IDE v7.21 Simulador: Proteus 6.7sp3
//
// Notas: Se muestra por pantalla de lcd la fecha y hora obtenida mediante la
// lectura del DS1307. Pudiendose modificar mediante los botones Conf/Ok y up.
// Se utiliza variables globales:
// ·day-> dia ds1302/07
// ·mth -> mes ds1302/07
// ·year -> año ds1302/07
// ·hour -> hora ds1302/07
// ·min -> minutos ds1302/07
// ·sec-> segundos ds1302/07
// ·menu -> variable que muestra opcion del menu configurar
// ·flag -> variable que cuenta hasta 130ms aprox.
// ·var -> ajuste fino para que desborde cada 130ms aprox.
// Se carga el TMR0 con 0 por lo tanto se desborda en 65ms aprox, queremos
// visualizar y restaurar valores cogidos del ds1302 cada 130ms aprox por lo tanto
// utilizamos una variable llamada flag que sera la encargada de dicha tarea.
// Al inicio del programa debe ser configurado el reloj, siendo el boton 'up' el
// encargado de ir moviendose mediante las opciones del menu:hora,minutos,....
// y el boton 'Conf/Ok' el encargado de configurar el reloj(cuando estemos en modo ver
// hora y fecha) o el encargado de salir de la configuracion de las opciones(cuando
// estemos en formato de configurar fecha y hora).
// Tener en cuenta que hay que poner la directiva NOLVP para que el pin B4 sea de
// salida.
// Conexiones: B0 -> SDA DS1307
// B1 -> SCL DS1307
// B2-> I/O DS1307
// B3 -> Boton 'up'
// B5 -> Boton 'Conf/Ok'
// D0 -> E
// D1 -> RS
// D2 -> RW
// D4 -> D4
// D5 -> D5
// D6 -> D6
// D7 -> D7
// D3 -> Zumbador(beep)
//////////////////////////////////////////////////////////////////////////////////
#include <16f877a.h> //pic a utilizar
#use delay(CLOCK=4000000) //Fosc=4Mhz
#fuses HS,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOWDT //comandos para el programador
#use standard_io(b)
#use standard_io(d)
#define use_portd_lcd TRUE //utilizar el port d para lcd
#define RTC_SCL PIN_B1 //definimos pin's...
#define RTC_IO PIN_B2
#define RTC_SDA PIN_B0 //...de conexion de la rtc ds1302
#include <ds1307.c> //libreria de rtc ds1307
#include <lcd.c> //libreria de lcd
///VARIABLES GLOBALES
byte day,mth,year,dow,hour,min,sec; //variabes para ds1307
byte menu=0,flag =0,var=2; //variables para menu configurar
///DEFINICION DE FUNCIONES
void configurar(void);
void horas(void);
void minutos(void);
void dia(void);
void mes(void);
void anio(void);
void beep(void);
///LLAMADA FUNCION INTERRUPCION
#INT_TIMER0
void interrupcion(){
if(flag>var){ //¿ya es 130ms aprox?
var--; //SI -> decremento var...
if(var==0)
var=2; //...ajuste fino de 130ms aprox
flag=0; //reset flag para contar 130ms aprox
ds1307_get_date(day,mth,year,dow); //coge dia,mes,año
ds1307_get_time(hour,min,sec); //coge hora,minuto,segundo
printf(lcd_putc,"\fFecha: %2X/%2X/%2X\nHora: %2X:%2X:%2X",day,mth,year,hour,min,sec);
//lcd
}
set_timer0(0); //reset TMR0
flag++; //incremento variable flag
}
///PROGRAMA
void main(void){
enable_interrupts(INT_TIMER0); //interrupcion TIMER0 activada
setup_counters(RTCC_INTERNAL,RTCC_DIV_256); //configuracion interrupcion TMR0
set_timer0(0); //carga TMR0
lcd_init(); //inicializa lcd
ds1307_init(DS1307_OUT_1_HZ); //inicializa RTC DS1307
lcd_putc("Reloj Calendario\n VsZeNeR'05" ); //presentacion...
delay_ms(800); //...inicial
configurar(); //ve a menu configurar
enable_interrupts(GLOBAL); //activadas interrupciones
for( ; ; ){ //bucle...
if(input(PIN_A5)==0){ //Si se pulsa Conf....
while(!input(PIN_A5)){} //elimina rebotes
beep();
configurar();
} //ve a menu configurar
}; //...infinito
}
///FUNCION CONFIGURAR
void configurar(void){
disable_interrupts(GLOBAL); //desactivadas interrupciones
do{
switch(menu){
case 0: lcd_putc("\fConfigurar\nhoras?" ); //horas
if(!input(PIN_A5)){
while(!input(PIN_A5)){}
beep();
horas();
menu=1;
//apunta siguiente opcion
}
break;
case 1: lcd_putc("\fConfigurar\nminutos?" ); //minutos
if(!input(PIN_A5)){
while(!input(PIN_A5)){}
beep();
minutos();
menu=2;
//apunta siguiente opcion
}
break;
case 2: lcd_putc("\fConfigurar\ndia?" ); //dias
if(!input(PIN_A5)){
while(!input(PIN_A5)){}
beep();
dia();
menu=3;
//apunta siguiente opcion
}
break;
case 3: lcd_putc("\fConfigurar\nmes?" ); //mes
if(!input(PIN_A5)){
while(!input(PIN_A5)){}
beep();
mes();
menu=4;
//apunta siguiente opcion
}
break;
case 4: lcd_putc("\fConfigurar\nanio?" ); //años
if(!input(PIN_A5)){
while(!input(PIN_A5)){}
beep();
anio();
menu=5;
//apunta siguiente opcion
}
break;
case 5: lcd_putc("\fSalir\nconfigurar?" ); //salir configuracion
if(!input(PIN_A5)){
menu=6;
beep();
}
}
if(!input(PIN_A3)){ //controla el boton up...
while(!input(PIN_A3)){}
menu++;
if(menu>5)
menu=0;
} //...para mostrar menu por lcd
delay_ms(130); //retardo para ver lcd
}while(menu<6);
menu=0;
//actualiza indices menu
ds1307_set_date_time(day,mth,year,dow,hour,min,sec); //nueva hora,minuto,...
enable_interrupts(GLOBAL); //activadas interrupciones
set_timer0(0);
//carga TMR0
}
///FUNCION CONFIGURA HORAS
void horas(void){
printf(lcd_putc,"\fConf.Horas:\nHora: %2X:%2X:%2X",hour,min,sec); //muestra por lcd
do{
if(!input(PIN_A3)){ //¿se ha pulsado up?
while(!input(PIN_A3)){} //elimina rebotes
hour++; //SI -> incremento hour
switch(hour){ //limites...
case 0x0A: hour=0x10;break;
case 0x1A: hour=0x20;break;
case 0x24: hour=0x00;
}
//...hour
printf(lcd_putc,"\nHora: %2X:%2X:%2X",hour,min,sec); //muestra por lcd hour
}
}while(input(PIN_A5));
while(!input(PIN_A5)){} //elimina rebotes
}
///FUNCION CONFIGURA MINUTOS
void minutos(void){
printf(lcd_putc,"\fConf.Minutos:\nHora: %2X:%2X:%2X",hour,min,sec); //muestra por lcd
do{
if(!input(PIN_A3)){ //¿se ha pulsado up?
while(!input(PIN_A3)){} //elimina rebotes
min++; //SI -> incremento min
switch(min){ //limites...
case 0x0A: min=0x10;break;
case 0x1A: min=0x20;break;
case 0x2A: min=0x30;break;
case 0x3A: min=0x40;break;
case 0x4A: min=0x50;break;
case 0x5A: min=0x00;
} //...min
printf(lcd_putc,"\nHora: %2X:%2X:%2X",hour,min,sec); //muestra por lcd min
}
}while(input(PIN_A5));
while(!input(PIN_A5)){} //elimina rebotes
}
///FUNCION CONFIGURA DIAS
void dia(void){
printf(lcd_putc,"\fConf.Dias:\nFecha: %2X/%2X/%2X",day,mth,year); //muestra por lcd
do{
if(!input(PIN_A3)){ //¿se ha pulsado up?
while(!input(PIN_A3)){} //elimina rebotes
day++; //SI -> incremento day
switch(day){ //limites...
case 0x0A: day=0x10;break;
case 0x1A: day=0x20;break;
case 0x2A: day=0x30;break;
case 0x32: day=0x01;
} //...day
printf(lcd_putc,"\fConf.Dias:\nFecha: %2X/%2X/%2X",day,mth,year);
//muestra por lcd day
}
}while(input(PIN_A5));
while(!input(PIN_A5)){} //elimina rebotes
}
///FUNCION CONFIGURA MES
void mes(void){
printf(lcd_putc,"\fConf.Mes:\nFecha: %2X/%2X/%2X",day,mth,year); //muestra por lcd
do{
if(!input(PIN_A3)){ //¿se ha pulsado up?
while(!input(PIN_A3)){} //elimina rebotes
mth++; //SI -> incremento mth
switch(mth){ //limites...
case 0x0A: mth=0x10;break;
case 0x13: mth=0x01;
} //...mth
printf(lcd_putc,"\fConf.Mes:\nFecha: %2X/%2X/%2X",day,mth,year); //muestra por lcd
}
}while(input(PIN_A5));
while(!input(PIN_A5)){} //elimina rebotes
}
///FUNCION CONFIGURA AÑOS
void anio(void){
printf(lcd_putc,"\fConf.Anio:\nFecha: %2X/%2X/%2X",day,mth,year); //muestra por lcd
do{
if(!input(PIN_A3)){ //¿se ha pulsado up?
while(!input(PIN_A3)){} //elimina rebotes
year++; //SI -> incremento mth
switch(year){ //limites...
case 0x0A: year=0x10;break;
case 0x1A: year=0x20;break;
case 0x2A: year=0x30;break;
case 0x3A: year=0x40;break;
case 0x4A: year=0x50;break;
case 0x5A: year=0x60;break;
case 0x6A: year=0x70;break;
case 0x7A: year=0x80;break;
case 0x8A: year=0x90;break;
case 0x9A: year=0x00;
} //...year
printf(lcd_putc,"\fConf.Anio:\nFecha: %2X/%2X/%2X",day,mth,year); //muestra por lcd
}
}while(input(PIN_A5));
while(!input(PIN_A5)){} //elimina rebotes
}
///FUNCION BEEP
void beep(void){
output_high(PIN_B3); //activa zumbador
delay_ms(50);
output_low(PIN_B3); //desactiva zumbador
}
#include <18F4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#include <HDM64GS12.c>
#include <graphics.c>
#include <ds1307.c>
#use STANDARD_IO (A)
int a=0,mes,dia,hor,min,sec;
void main()
{
char k[8];
setup_adc_ports(NO_ANALOGS);
glcd_init(ON);
ds1307_init();
glcd_imagen(0);
ds1307_set_date_time(6,4,9,0,11,30,0);
delay_ms(500);
while(1){
ds1307_get_time(hor,min,sec);
glcd_fillScreen(OFF);
sprintf(k, "%d", min); // Convierte variable a cadena de texto, almacena en k
glcd_text57(1, 1, k, 1, ON);
sprintf(k, "%d", sec);
glcd_text57(1, 9, k, 1, ON);
delay_ms(1000);
}
}#include <18F4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#include <HDM64GS12.c>
#include <graphics.c>
#include "2009.c"
#include <ds1307.c>
int a=0,mes,dia,hor,min,sec;
void main()
{
char k[8];
setup_adc_ports(NO_ANALOGS);
glcd_init(ON);
ds1307_init();
ds1307_set_date_time(6,4,9,0,11,30,0); //Inicio la fecla y la hora como 11:30
glcd_imagen(a); // muestra una imagen que comprueba la funcionalidad de la LCD
delay_ms(500);
while(1){
ds1307_get_time(hor,min,sec); //Leo hora
glcd_fillScreen(OFF); //Limpio la LCD
sprintf(k, "%d", min); // Convierte variable a cadena de texto, almacena en k
glcd_text57(1, 1, k, 1, ON); //muestro minutos
sprintf(k, "%d", sec);
glcd_text57(1, 9, k, 1, ON); //muestro segundos
delay_ms(1000);
}
}