void setTime1302(int seconds, int minutes, int hours, int dayofweek, int dayofmonth, int month, int year) { ds1302_struct rtc = {}; // Set a time and date // This also clears the CH (Clock Halt) bit, // to start the clock. // Fill the structure with zeros to make // any unused bits zero // memset ((char *) &rtc, 0, sizeof(rtc)); rtc.Seconds = bin2bcd_l( seconds); rtc.Seconds10 = bin2bcd_h( seconds); rtc.CH = 0; // 1 for Clock Halt, 0 to run; rtc.Minutes = bin2bcd_l( minutes); rtc.Minutes10 = bin2bcd_h( minutes); // To use the 12 hour format, // use it like these four lines: // rtc.h12.Hour = bin2bcd_l( hours); // rtc.h12.Hour10 = bin2bcd_h( hours); // rtc.h12.AM_PM = 0; // AM = 0 // rtc.h12.hour_12_24 = 1; // 1 for 24 hour format rtc.h24.Hour = bin2bcd_l( hours); rtc.h24.Hour10 = bin2bcd_h( hours); rtc.h24.hour_12_24 = 0; // 0 for 24 hour format rtc.Date = bin2bcd_l( dayofmonth); rtc.Date10 = bin2bcd_h( dayofmonth); rtc.Month = bin2bcd_l( month); rtc.Month10 = bin2bcd_h( month); rtc.Day = dayofweek; rtc.Year = bin2bcd_l( year - 2000); rtc.Year10 = bin2bcd_h( year - 2000); rtc.WP = 0; // Write all clock data at once (burst mode). DS1302_clock_burst_write( (uint8_t *) &rtc); }
//Set the time for the first use void TimeDS1302::set_time(int sec,int min, int hour, int weekday, int date, int months, int years) { ds1302_struct rtc; // Remove the next define, // after the right date and time are set. #define SET_DATE_TIME_JUST_ONCE #ifdef SET_DATE_TIME_JUST_ONCE // Start by clearing the Write Protect bit // Otherwise the clock data cannot be written // The whole register is written, // but the WP-bit is the only bit in that register. TimeDS1302::DS1302_write (DS1302_ENABLE, 0); // Disable Trickle Charger. TimeDS1302::DS1302_write (DS1302_TRICKLE, 0x00); // Fill these variables with the date and time. int seconds, minutes, hours, dayofweek, dayofmonth, month, year; // Example for april 15, 2013, 10:08, monday is 2nd day of Week. // Set your own time and date in these variables. seconds = sec; minutes = min; hours = hour; dayofweek = weekday; // Day of week, any day can be first, counts 1...7 dayofmonth = date; // Day of month, 1...31 month = months; // month 1...12 year = years; // Set a time and date // This also clears the CH (Clock Halt) bit, // to start the clock. // Fill the structure with zeros to make // any unused bits zero memset ((char *) &rtc, 0, sizeof(rtc)); rtc.Seconds = bin2bcd_l( seconds); rtc.Seconds10 = bin2bcd_h( seconds); rtc.CH = 0; // 1 for Clock Halt, 0 to run; rtc.Minutes = bin2bcd_l( minutes); rtc.Minutes10 = bin2bcd_h( minutes); // To use the 12 hour format, // use it like these four lines: // rtc.h12.Hour = bin2bcd_l( hours); // rtc.h12.Hour10 = bin2bcd_h( hours); // rtc.h12.AM_PM = 0; // AM = 0 // rtc.h12.hour_12_24 = 1; // 1 for 24 hour format rtc.h24.Hour = bin2bcd_l( hours); rtc.h24.Hour10 = bin2bcd_h( hours); rtc.h24.hour_12_24 = 0; // 0 for 24 hour format rtc.Date = bin2bcd_l( dayofmonth); rtc.Date10 = bin2bcd_h( dayofmonth); rtc.Month = bin2bcd_l( month); rtc.Month10 = bin2bcd_h( month); rtc.Day = dayofweek; rtc.Year = bin2bcd_l( year - 2000); rtc.Year10 = bin2bcd_h( year - 2000); rtc.WP = 0; // Write all clock data at once (burst mode). TimeDS1302::DS1302_clock_burst_write( (uint8_t *) &rtc); #endif }