Galería

Reloj calendario

Enunciado:

En la siguiente practica, vamos a realizar la configuración de un reloj calendario. Se deben mostrar por el LCD el día de la semana, día del mes, mes, año, horas, minutos y segundos.

Para esta práctica utilizaremos las librerías “LCD_SIS.c” para el LCD, “ctype.h” para  mostrar letras y números en el LCD y «PCF8583.c» para el reloj calendario.

Desarrollo:

Tras analizar el enunciado, comenzamos preparando un esquema en “Proteus ISIS” para su simulación. El pic que vamos a utilizar es el “18f4550”.

Una vez hecho esto, comenzamos a realizar el siguiente código.

Codigo:


////////////////////////////////////////////////////////////////////////////////
// AUTOR: Diego Gonzalez Garcia Noviembre 2012 //
////////////////////////////////////////////////////////////////////////////////
// PROGRAMA: RELOJ CALENDARIO VERSION: 1.0 //
// DISPOSITIVO: PIC 18F4550 COMPILADOR: CCS vs4.104 //
// ENTORNO IDE: MPLAB v8.76 SIMULADOR: Proteus 7.8 SP2 //
// TARJETA DE APLICACION: DEBUGGER: ICD3 //
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
//------------------------------RELOJ CALENDARIO------------------------------//
////////////////////////////////////////////////////////////////////////////////

//Configurar un calendario con nuestra fecha de nacimiento
//Configurar el reloj a las 23:59:55
//Visualizar en LCD

////////////////////////////////////////////////////////////////////////////////
//---------------------------------CABECERA-----------------------------------//
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
//-----------------------------VARIABLES GLOBALES-----------------------------//
////////////////////////////////////////////////////////////////////////////////

#include <18F4550.h>
#FUSES HS,MCLR,INTHS,PUT,BROWNOUT
#use delay(INTERNAL=8MHZ)
#include <LCD_SIS.c>
#include <ctype.h>
#include <PCF8583.c>

////////////////////////////////////////////////////////////////////////////////
//---------------------------------FUNCIONES----------------------------------//
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
//---------------------------------PRINCIPAL----------------------------------//
////////////////////////////////////////////////////////////////////////////////

void main()
{
char weekday[10]; //Array de string para escribir el nombre del día de la semana
date_time_t dt; //Para que la entrada de la estructura 'date_time-t' se pase por valor
lcd_init();
PCF8583_init();

// Configuramos el chip en hora y calendario
dt.month = 6; // june
dt.day = 30; // 30
dt.year = 92; // 1992
dt.hours = 23; // 23 hours (11pm in 24-hour time)
dt.minutes = 59; // 59 minutes
dt.seconds = 55; // 55 seconds
dt.weekday = 0; // 0 = Sunday, 1 = Monday, etc.

PCF8583_set_datetime(&dt);
PCF8583_read_datetime(&dt);

while(1)
{
//Leemos el nombre de la semana en la estructura y lo copiamos en nuestro array de string
strcpy(weekday, weekday_names[dt.weekday]);
lcd_gotoxy(1,1);
PCF8583_read_datetime(&dt);
printf(lcd_putc,"%s: %02u/%02u/%02u",weekday, dt.day, dt.month, dt.year);
delay_ms(500);
//Leemos la hora y lo copiamos a nuestro array
lcd_gotoxy(1,2);
PCF8583_read_datetime(&dt);
printf(lcd_putc,"%02u:%02u:%02u ",dt.hours, dt.minutes, dt.seconds);
}
}

Simulación en Proteus:


Descargar ejercicio completo.