byte time_monthDayCount(month_t month, byte year) { byte numDays = pgm_read_byte(&monthDayCount[month]); if(month == MONTH_FEB && time_isLeapYear(year)) numDays = FEB_LEAP_YEAR; return numDays; }
bool time_update() { hourBeep(); if(!update) return false; update = false; halfSecond = RTC_INT(); if(!halfSecond) return false; // Slightly modified code from AVR134 if(++timeData.secs == 60) { timeData.secs = 0; if(++timeData.mins == 60) { timeData.mins = 0; if(++timeData.hours == 24) { timeData.hours = 0; if (++timeData.date == 32) { timeData.month++; timeData.date = 1; } else if (timeData.date == 31) { if (timeData.month == 3 || timeData.month == 5 || timeData.month == 8 || timeData.month == 10) { timeData.month++; timeData.date = 1; } } else if (timeData.date == 30) { if(timeData.month == 1) { timeData.month++; timeData.date = 1; } } else if (timeData.date == 29) { if(timeData.month == 1 && !time_isLeapYear(timeData.year)) { timeData.month++; timeData.date = 1; } } if (timeData.month == 13) { timeData.month = 1; timeData.year++; if(timeData.year == 100) timeData.year = 0; } if(++timeData.day == 7) timeData.day = 0; } } } //printf_P(PSTR("%02hhu:%02hhu:%02hhu\n"), timeData.hours, timeData.mins, timeData.secs); //printf("T: %hhuC\n", ds1337_temp()); return true; }
uint16_t time_daysOfYear(uint32_t year) { return time_isLeapYear(year) ? 366 : 365; }
static void selectDate() { menuData.downFunc = timeDataUp; menuData.upFunc = timeDataDown; menuData.drawFunc = dateDraw; switch(setting.now) { case SETTING_NOW_NONE: setting.now = SETTING_NOW_DATE10; setting.val = timeDataSet.date / 10; break; case SETTING_NOW_DATE10: { byte mod = timeDataSet.date % 10; timeDataSet.date = (setting.val * 10) + mod; setting.now = SETTING_NOW_DATE1; setting.val = mod; } break; case SETTING_NOW_DATE1: timeDataSet.date = ((timeDataSet.date / 10) * 10) + setting.val; if(timeDataSet.date < 1) timeDataSet.date = 1; else if(timeDataSet.date > 31) timeDataSet.date = 31; setting.now = SETTING_NOW_MONTH; setting.val = timeDataSet.month; break; case SETTING_NOW_MONTH: timeDataSet.month = setting.val; byte maxDays = 31; byte month = timeDataSet.month; if(month == 3 || month == 5 || month == 8 || month == 10) maxDays = 30; else if(month == 1) maxDays = time_isLeapYear(timeDataSet.year) ? 29 : 28; if(timeDataSet.date > maxDays) timeDataSet.date = maxDays; setting.now = SETTING_NOW_YEAR10; setting.val = timeDataSet.year / 10; break; case SETTING_NOW_YEAR10: { byte mod = timeDataSet.year % 10; timeDataSet.year = (setting.val * 10) + mod; setting.now = SETTING_NOW_YEAR1; setting.val = mod; } break; default: timeDataSet.year = ((timeDataSet.year / 10) * 10) + setting.val; timeDataSet.day = time_dow(timeDataSet.year + 2000, timeDataSet.month + 1, timeDataSet.date); setting.now = SETTING_NOW_NONE; menuData.downFunc = mUp; menuData.upFunc = mDown; menuData.drawFunc = NULL; break; } showDateStr(); }