реклама на сайте
подробности

 
 
> Электронный календарь, как вычислять время, дату от RTC счетчика ?
-=Sergei=-
сообщение Jul 8 2010, 11:43
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 339
Регистрация: 26-10-04
Пользователь №: 985



Есть счетчик с секундами, как из них вычислить время и дату исходя из того что нулевое значение например 1 января 1980 года ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
barabek
сообщение Jul 8 2010, 12:16
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(-=Sergei=- @ Jul 8 2010, 22:43) *
Есть счетчик с секундами, как из них вычислить время и дату исходя из того что нулевое значение например 1 января 1980 года ?

Ну и считайте: в минуте 60 сек, далее 60 мин, 24часа, далее дни, месяцы и годы с учетом количества дней в месяцах и добавочном дне високосных годах. Вопрос то в чем? Для примера :


Код
//                                                                               ян фв мр ап мй ин ил ав сн ок нб дек
unsigned int code mounth_end[12]={31,28,31,30,31,30,31,31,30,31,30,31};

unsigned char xdata RTCcapture[6];
enum {YEAR,MONTH,DAY,HOUR,MINUTE};

                                  
void ConvertArrToTime(void)
    {
     unsigned long ticks;
         unsigned char i;
         ticks=*(unsigned long*)RTCcapture;
         ticks/=60;
         RTCcapture[MINUTE]=ticks%60;
              ticks/=60;
         RTCcapture[HOUR]=ticks%24;
         ticks/=24;

         RTCcapture[YEAR]=ticks/(365*4+1);    //учитываем високосные года
         ticks-=RTCcapture[YEAR]*(365*4+1);
         i=ticks/365;
         ticks-=i*365;
         RTCcapture[YEAR]=RTCcapture[YEAR]*4+i;
         for(i=0;i<11;i++)
             {
                  if(i==1 && !(RTCcapture[YEAR]&0x03))                    //високосный февраль
                           {if(ticks>=29)ticks-=29;else break;}
                  else
                           {if(ticks>=mounth_end[i])ticks-=mounth_end[i];else break;}
             }
         RTCcapture[MONTH]=i+1;
         RTCcapture[DAY]=ticks+1;
    }


Но учтите, что код писан левой ногой и очень давно на заре туманной юности  smile.gif, даю только для примера (нулевая точка 2000год, код для c51). Вы пишите более рационально - без лишних делений, глобальных переменных и т.д. 
ЗЫ Сейчас самому страшен такой код, хотя я не так далеко и продвинулся, может стереть пример, дабы людей не смешить smile.gif
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 22:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01376 секунд с 7
ELECTRONIX ©2004-2016