void rtc_update( TiRtc * rtc) { //refer to the application note of atmega128 if (++rtc->current_time.second==60) { rtc->current_time.second=0; if (++rtc->current_time.minute==60) { rtc->current_time.minute=0; if (++rtc->current_time.hour==24) { rtc->current_time.hour=0; if (++rtc->current_time.date==32) { rtc->current_time.month++; rtc->current_time.date=1; } else if (rtc->current_time.date==31) { if ((rtc->current_time.month==4) || (rtc->current_time.month==6) || (rtc->current_time.month==9) ||(rtc->current_time.month==11)) { rtc->current_time.month++; rtc->current_time.date=1; } } else if (rtc->current_time.date==30) { if(rtc->current_time.month==2) { rtc->current_time.month++; rtc->current_time.date=1; } } else if (rtc->current_time.date==29) { if((rtc->current_time.month==2) && (not_leap(rtc))) { rtc->current_time.month++; rtc->current_time.date=1; } } if (rtc->current_time.month==13) { rtc->current_time.month=1; rtc->current_time.year++; } } } } }
void RTC_step(void) //called every second { if (++t.second==60) //keep track of time, date, month, and year { t.second=0; if (++t.minute==60) { t.minute=0; if (++t.hour==24) { t.hour=0; if (++t.date==32) { t.month++; t.date=1; } else if (t.date==31) { if ((t.month==4) || (t.month==6) || (t.month==9) || (t.month==11)) { t.month++; t.date=1; } } else if (t.date==30) { if(t.month==2) { t.month++; t.date=1; } } else if (t.date==29) { if((t.month==2) && (not_leap())) { t.month++; t.date=1; } } if (t.month==13) { t.month=1; t.year++; } } } } }
//----------------------------------------------------- void ServiceSetDateHappy(void){ unsigned char time_out; ReadDsRtcTime(); // for month ans date happy PlayServiceFile(PLAY_SERVICE,SERVICE_SET_DATE_FILE); while(1){ PlayServiceFile(PLAY_SERVICE,SERVICE_SELECT_DATE); time_out = WaitKey(PREV,NEXT,PLAY,EXIT); if(time_out == false){ SystemReload(); } PlayBeep(); if(KEY == EXIT){ CLEAR_KEYPAD(); break; } if(KEY == PREV){ // set month CLEAR_KEYPAD(); PlayServiceFile(PLAY_SERVICE,SERVICE_CHANGE_MONTH); while(1){ time_out = WaitKey(PREV,NEXT,-1,EXIT); if(time_out == false){ SystemReload(); } PlayBeep(); if(KEY == EXIT){ CLEAR_KEYPAD();break; } if(KEY == PREV){ // month++ CLEAR_KEYPAD(); if(++AlarmHappy.month == 13){ AlarmHappy.month = 1; } } if(KEY == NEXT){ // month-- CLEAR_KEYPAD(); if(--AlarmHappy.month == 0){ AlarmHappy.month = 12; } } // PLAY CURRENT MONTH PlayServiceFile(PLAY_MONTH,(AlarmHappy.month-1)); } } if(KEY == NEXT){ // set date CLEAR_KEYPAD(); PlayServiceFile(PLAY_SERVICE,SERVICE_CHANGE_DAY); while(1){ time_out = WaitKey(PREV,NEXT,-1,EXIT); if(time_out == false){ SystemReload(); } PlayBeep(); if(KEY == EXIT){CLEAR_KEYPAD();break;} if(KEY == PREV){ // date++ CLEAR_KEYPAD(); if(++AlarmHappy.date == 29){ if((AlarmHappy.month == 2) && (not_leap())){ AlarmHappy.date = 1; } } if(AlarmHappy.date == 31){ if((AlarmHappy.month==4)||(AlarmHappy.month==6)||(AlarmHappy.month==9)||(AlarmHappy.month==11)){ AlarmHappy.date = 1; } } if(AlarmHappy.date == 32){ AlarmHappy.date = 1; } } if(KEY == NEXT){ // date-- CLEAR_KEYPAD(); if(--AlarmHappy.date==0){ if((AlarmHappy.month==4)||(AlarmHappy.month==6)||(AlarmHappy.month==9)||(AlarmHappy.month==11)){ AlarmHappy.date=30; }else{ AlarmHappy.date=31; } if(AlarmHappy.month == 2){ AlarmHappy.date=29; } if((AlarmHappy.month == 2) && (not_leap())){ AlarmHappy.date=28; } } } // PLAY CURRENT DATE PlayServiceFile(PLAY_DATE,(AlarmHappy.date-1)); } } } return; }
//----------------------------------------------------- void ServiceSetDateRTC(void){ unsigned char time_out; PlayServiceFile(PLAY_SERVICE,SERVICE_SET_DATE_FILE); while(1){ PlayServiceFile(PLAY_SERVICE,SERVICE_DATE_YEAR_CHANGE); time_out = WaitKey(PREV,NEXT,PLAY,EXIT); if(time_out == false){ break; } PlayBeep(); if(KEY == EXIT){ CLEAR_KEYPAD(); break; } if(KEY == PREV){ // set month CLEAR_KEYPAD(); PlayServiceFile(PLAY_SERVICE,SERVICE_CHANGE_MONTH); while(1){ time_out = WaitKey(PREV,NEXT,-1,EXIT); if(time_out == false){ break; } PlayBeep(); if(KEY == EXIT){CLEAR_KEYPAD();break;} if(KEY == PREV){ // month++ CLEAR_KEYPAD(); if(++DS_CALENDAR.Month == 13) DS_CALENDAR.Month = 1; } if(KEY == NEXT){ // month-- CLEAR_KEYPAD(); if(--DS_CALENDAR.Month == 0) DS_CALENDAR.Month = 12; } // PLAY CURRENT MONTH PlayServiceFile(PLAY_MONTH,(DS_CALENDAR.Month-1)); } } if(KEY == NEXT){ // set date CLEAR_KEYPAD(); PlayServiceFile(PLAY_SERVICE,SERVICE_CHANGE_DAY); while(1){ time_out = WaitKey(PREV,NEXT,-1,EXIT); if(time_out == false){ break; } PlayBeep(); if(KEY == EXIT){CLEAR_KEYPAD();break;} if(KEY == PREV){ // date++ CLEAR_KEYPAD(); if(++DS_CALENDAR.Date == 29){ if((DS_CALENDAR.Date == 2) && (not_leap())){ DS_CALENDAR.Date = 1; } } if( DS_CALENDAR.Date == 31){ if((DS_CALENDAR.Date==4)||(DS_CALENDAR.Date==6)||(DS_CALENDAR.Date==9)||(DS_CALENDAR.Date==11)){ DS_CALENDAR.Date = 1; } } if( DS_CALENDAR.Date == 32){ DS_CALENDAR.Date = 1; } } if(KEY == NEXT){ // date-- CLEAR_KEYPAD(); if(--DS_CALENDAR.Date==0){ if((DS_CALENDAR.Date==4)||(DS_CALENDAR.Date==6)||(DS_CALENDAR.Date==9)||(DS_CALENDAR.Date==11)){ DS_CALENDAR.Date=30; }else{ DS_CALENDAR.Date=31; } if(DS_CALENDAR.Date == 2){ DS_CALENDAR.Date=29; } if((DS_CALENDAR.Date == 2) && (not_leap())){ DS_CALENDAR.Date=28; } } } // PLAY CURRENT DATE PlayServiceFile(PLAY_DATE,(DS_CALENDAR.Date-1)); } } if(KEY == PLAY){ // set year CLEAR_KEYPAD(); PlayServiceFile(PLAY_SERVICE,SERVICE_CHANGE_YEAR); while(1){ time_out = WaitKey(PREV,NEXT,-1,EXIT); if(time_out == false){ break; } PlayBeep(); if(KEY == EXIT){ CLEAR_KEYPAD(); break; } if(KEY == PREV){ // year++ CLEAR_KEYPAD(); if(++DS_CALENDAR.Year > 20){ DS_CALENDAR.Year = 0x09; } } if(KEY == NEXT){ // year-- CLEAR_KEYPAD(); if(--DS_CALENDAR.Year < 9){ DS_CALENDAR.Year = 0x20; } } // PLAY CURRENT DATY PlayServiceFile(PLAY_YEAR,(DS_CALENDAR.Year-9)); } } } return; }