You are on page 1of 10

#include <Wire.

h>

#define DS1307_I2C_ADDRESS 0x68

/*

palabra de control para formato de 24H del RTC

------------------------------------------debajo de los pines del teclado

*/

byte decimal_to_bcd(byte val)

return ((val/10*16)+(val%16));

byte bcd_to_decimal(byte val)

return ((val/16*10)+(val%16));

/*

definir los registros de proposito general0

*/

void set_date_DS1307(byte second,/*0-59*/

byte minute,/*0-59*/

byte hour,/*0-23*/

byte day_of_week,/*1-7*/

byte day_of_month,/*1-31*/

byte month,/*1-12*/

byte year/*0-99*/)

Wire.beginTransmission(DS1307_I2C_ADDRESS);

Wire.write(0);
Wire.write(decimal_to_bcd(second));

Wire.write(decimal_to_bcd(minute));

Wire.write(decimal_to_bcd(hour));

Wire.write(decimal_to_bcd(day_of_week));

Wire.write(decimal_to_bcd(day_of_month));

Wire.write(decimal_to_bcd(month));

Wire.write(decimal_to_bcd(year));

Wire.endTransmission();

void get_date_DS1307( byte *second,/*0-59*/

byte *minute,/*0-59*/

byte *hour,/*0-23*/

byte *day_of_week,/*1-7*/

byte *day_of_month,/*1-31*/

byte *month,/*1-12*/

byte *year/*0-99*/)

Wire.beginTransmission(DS1307_I2C_ADDRESS);

Wire.write(0);

Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS,7);

*secons = bcd_to_decimal(Wire.read()&0x7f);

*minute = bcd_to_decimal(Wire.read());

*hour = bcd_to_decimal(Wire.read()&0x3f);

*day_of_week = bcd_to_decimal(Wire.read());

*day_of_month = bcd_to_decimal(Wire.read());

*month = bcd_to_decimal(Wire.read());

*year = bcd_to_decimal(Wire.read());

}
void i2c_eeprom_write_byte(int deviceAddress /*0x50- direccion del dispositivo */, unsigned
int eeAddress/*direccion de escritura*/, byte data/*dato a escribir*/)

int rdata = data;

Wire.beginTransmission(deviceAddress);

Wire.write((int)(eeAddress>>8));/*MSB*/

Wire.write((int)(eeAddress & 0xff));/*lSB*/

Wire.write(rdata);

Wire.endTransmission();

/*funcion*/

byte i2c_eeprom_read_byte(int deviceAddress /*0x50- direccion del dispositivo */, unsigned


int eeAddress/*direccion de escritura*/)

int rdata = 0xff;

Wire.beginTransmission(deviceAddress);

Wire.write((int)(eeAddress>>8));/*MSB*/

Wire.write((int)(eeAddress & 0xff));/*lSB*/

Wire.endTransmission();

Wire.requestFrom(deviceAddress,1);

if(Wire.available())

rdata=Wire.read();

return rdata;

/*nombrar los regristros byte, globales*/

/*entregar segundo y tercer numeral del menu de usuario*/

/*
//memoria 24c5012:

//

//-pin3- al aire

//-pin 1,2,4- a tierra

//-pin 5,6 resistencia-4.7k - 5v

//pin 7- tierra

//pin8-5v

*/

/*

reloj tiempo real RTC: d5151307

dd/mm/yyyy/ -- dia de la semana(DOW) 1=lunes, 7=domingo, hh/mm/ss am/pm-24 horas.

comprar: cristal 32Khz.

bateria cr32

pin-1 y 2--- cristal

pin-3--- bateria, pin de bateria a tierra.

pin 4- tierra

pin 5 y 6 a los pines 5 y 6 de la memoria.

pin 7- al aire.

pin 8- 5v.

*/

/*

---------------------------------------------------------------------------
*/

/*FUNCIONES*/

void setup() {

// put your setup code here, to run once:

//debajo del lcd

//Wire.begin();

/*METODOS*/

void fecha()

get_date_DS1307(&second, &minute, &hour, &day_of_week, &day_of_month, &month,


&year);

/*-------------------------------------------LCD-------------------------------------------------------------

* date: 14/9/16 ---- lograr mostrar el cero antes de un digito

* hour: 10:40:25 / durante 10 segundos rotar los segundos, cada 10

* borrar

* aparezca dia de la semana

* llamar metodo fecha, cambiar los segundos cada 10s

*/

switch(day_of_week)

case 1:

lcd.setCursor(0,0);

lcd.print("Dia de la semana");

lcd.setCursor(6,1);

lcd.print(Lunes);

delay(2000);

break;
case 2:

break;

case 3:

break;

case 4:

break;

case 5:

break;

case 6:

break;

case 7:

break;

/*dia de la semana*/

for(i=0; i<10;i++)

get_date_DS1307(&second, &minute, &hour, &day_of_week, &day_of_month, &month,


&year);

lcd.setCursor(0,0);

lcd.print("Date: ");

lcd.print(day_of_month,DEC);

lcd.print("/");

lcd.print(month, DEC);

lcd.print("/");

lcd.print(year, DEC);

//hacer las lineas para visualizar la hora

delay(995);

lcd.clear();
}

/*

ESCRIBIR Y LEER EN LA MEMORIA EXTERNA

*/

void escribirExterna()

for(i=0;1<<2;i++)

i2c_eeprom_write_byte(0x50,a,clave[i]);

delay(5);

a++;

void leer_externa()

for(i=0;1<<4;i++)

utilizarUnVector[i]=i2c_eeprom_read_byte(0x50,i);

delay(1);

/*

PARA LA OPCION NUMERO 3- MODIFICAR FECHA

Menu de actualizar fecha y hora

*/

/*

dentro del menu

*/

fecha();

/*etiqueta : actualizar*/

lcd.clear();
auxSegundos=0;

segundos=0;

i=0;

lcd.setCursor(0,0);

lcd.print("Favor Digite");

lcd.setCursor(0,1);

lcd.print("HH: xx mm: xx");/*minutos y horas en dos digitos*/

for(i=0;i<4;i++)

/*etiqueta xxxx*/

do

daton=keypad.getKey();

delay(60);

if(dato != '\0')

switch(i+1)

case 1:

lcd.setCursor(4,1);

lcd.print(daton);

clave[0]=daton-0x30;

clave[0]=clave[0]<<4;

break;

case 2:

lcd.print(daton);

clave[1]=daton-0x30;

clave[0]=clave[1]+clave[1];

hour=clave[0];

hour=((hour/16*10)+(hour%6));

if(hour > 23)


{

lcd.setCursor(4,1);

/*borrar HH-21----MM:--*/

lcd.print(" ");

/*llamar etiqueta xxxx*/

break;

case 3:

lcd.print(daton);

clave[1]=daton-0x30;

clave[1]=clave[1]<<4;

break;

case 4:

break;

i++;

delay(500);

auxSegundos=0;

segundos=0;

auxSegundos++;

if(auxSegundos >20)

auxSegundos=0;

segundos++;

while((auxSegundos<6)&&(i<4))

delay(2000);

void loop() {
// put your main code here, to run repeatedly:

54

4,5

ID Javier 4

ID Edison 5

You might also like