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

 
 
> Меню для RTC, Толкните уже куда нибудь
ILYAUL
сообщение Jan 13 2011, 15:57
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Всем добрый вечер! И с наступающим OLD NEW YEAR!!

"Ледяной" дождь и отключение электричества выявило одну проблемку в проекте , где часы синхронизировались от компа.
Решено было , дописать "МЕНЮ" внеся в него установку часов в MANUAL MODE.
Часы - DS1337 - код сжатый BCD
Вот никак не выберу решение из двух возможных ( по моему мнению)

1. Распоковать BCD на десятки и единицы и установить каждый отдельно. Но "вылезают" проблемы с часами и датой ( день месяца) и месяцем - не может быть 24 часа и выше и конечно 32 и выше дня.
Т.е. приходится отслеживать десятки , что бы задать диапазон изменения единиц - что "утяжеляет" программу
2. Перевести BCD to HEX ( элементарно). НО - если из 00:00 надо выставить 12:30 - 42 нажатия кнопок . Да забыл , кнопок is used всего 4 (+) (-) (MENU) (SET) Таймер 16 - свободен , можно конечно устроить "залипание" кнопки......
Вообщем за неделю так и не пришёл к окончательному пути. Help.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mempfis_
сообщение Jan 14 2011, 12:09
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(ILYAUL @ Jan 13 2011, 21:57) *
1. Распоковать BCD на десятки и единицы и установить каждый отдельно. Но "вылезают" проблемы с часами и датой ( день месяца) и месяцем - не может быть 24 часа и выше и конечно 32 и выше дня.
Т.е. приходится отслеживать десятки , что бы задать диапазон изменения единиц - что "утяжеляет" программу
2. Перевести BCD to HEX ( элементарно). НО - если из 00:00 надо выставить 12:30 - 42 нажатия кнопок . Да забыл , кнопок is used всего 4 (+) (-) (MENU) (SET) Таймер 16 - свободен , можно конечно устроить "залипание" кнопки......
Вообщем за неделю так и не пришёл к окончательному пути. Help.


Только вчера закончил подменю настройки даты/времени в одном устройстве. 4 кнопки +, -, ENTER, BACK.
ENTER выбирает что настраиваем - день, месяц, год, час, минута, секунда - под соотв позицию подводится нижнее подчёркивание на LCD-индикаторе, +/- - инкремент/декремент параметра (для месяца учитывается кол-во дней (для февраля ещё и учёт високосного года)), по нажатию на BACK время сохраняется если было фактическое изменение. По нажатию и удержанию кнопки автоповтор инкремента/декремента соотв позиции. Получилось довольно удобно и оперативно настраивать время. По поводу кода - написал процедуры инкремента/декремента параметра с органичением:

Код
//----------------------------------
unsigned int incParam(unsigned int val, unsigned int low,unsigned int high)
{
  unsigned int result = val;
  
  if(result >= high) result = low;
  else result++;
  return result;
}
//----------------------------------

//----------------------------------
unsigned int decParam(unsigned int val, unsigned int low,unsigned int high)
{
  unsigned int result = val;
  
  if(result <= low) result = high;
  else result--;
  return result;
}
//----------------------------------


Применяется при настройке абсолютно всех параметров часов, занимает минимум кода.

Пример инкремента по нажатию кнопки +

Код
              if(KEYBOARD.key_status & MENU_UP_KEY)
              {
                common_val = 1; //изменение параметра
                
                if(common_index == 0)
                {
                  //day
                  if( (LocalTime.RTC_Mon == 2) && ((LocalTime.RTC_Year % 4) == 0) )
                  {
                    //високосный год
                    LocalTime.RTC_Mday = incParam(LocalTime.RTC_Mday, 1, MONTH_LIMIT_DAY[LocalTime.RTC_Mon]+1);
                  }
                  else
                  {
                    LocalTime.RTC_Mday = incParam(LocalTime.RTC_Mday, 1, MONTH_LIMIT_DAY[LocalTime.RTC_Mon]);
                  }
                  
                }
                else if(common_index == 1)
                {
                  LocalTime.RTC_Mon = incParam(LocalTime.RTC_Mon, 1, 12);
                }
                else if(common_index == 2)
                {
                  LocalTime.RTC_Year = incParam(LocalTime.RTC_Year, 2011, 2099);
                }
                else if(common_index == 3)
                {
                  LocalTime.RTC_Hour = incParam(LocalTime.RTC_Hour, 0, 23);
                }
                else if(common_index == 4)
                {
                  LocalTime.RTC_Min = incParam(LocalTime.RTC_Min, 0, 59);
                }
                else if(common_index == 5)
                {
                  LocalTime.RTC_Sec = incParam(LocalTime.RTC_Sec, 0, 59);
                }
                
                RTC_Display_Time(&LocalTime);
                
                //задержка отображения
                setServiceTimeoutStatus(MENU_KEY_SHIFT_TIMEOUT, 35);
                  
                return;
              }
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 15 2011, 14:22
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(mempfis_ @ Jan 14 2011, 20:09) *
по нажатию на BACK время сохраняется если было фактическое изменение.

А как отменить ввод? Никак? Это неправильно, должна быть отмена. Имхо, конечно.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ILYAUL   Меню для RTC   Jan 13 2011, 15:57
- - rx3apf   Цитата(ILYAUL @ Jan 13 2011, 21:57) Тайме...   Jan 13 2011, 16:21
- - rezident   Унутре микроконтроллера обычно используют время в ...   Jan 13 2011, 16:40
|- - ILYAUL   Цитата(rezident @ Jan 13 2011, 22:40) Уну...   Jan 13 2011, 17:07
|- - AHTOXA   Цитата(rezident @ Jan 14 2011, 00:40) Или...   Jan 13 2011, 17:16
|- - ILYAUL   Цитата(rezident @ Jan 13 2011, 22:40) Или...   Jan 13 2011, 17:38
- - rezident   Цитата(ILYAUL @ Jan 14 2011, 01:07) На as...   Jan 13 2011, 18:13
- - kolobok0   Цитата(ILYAUL @ Jan 13 2011, 21:57) 1.......   Jan 14 2011, 09:27
|- - ILYAUL   Цитата(kolobok0 @ Jan 14 2011, 15:27) ......   Jan 15 2011, 14:13
|- - kolobok0   Цитата(ILYAUL @ Jan 15 2011, 17:13) Левые...   Jan 17 2011, 08:24
|- - mempfis_   Цитата(AHTOXA @ Jan 15 2011, 20:22) А как...   Jan 15 2011, 15:26
|- - AHTOXA   Цитата(mempfis_ @ Jan 15 2011, 23:26) У н...   Jan 15 2011, 17:00
- - Dog Pawlowa   Обработка событий клавиатуры в меню: Код case evU...   Jan 15 2011, 19:09
|- - demiurg_spb   Цитата(Dog Pawlowa @ Jan 16 2011, 01:09) ...   Jan 16 2011, 10:48
|- - Dog Pawlowa   Цитата(demiurg_spb @ Jan 16 2011, 16:48) ...   Jan 16 2011, 14:23
- - ILYAUL   ЦитатаDog Pawlowa Собственно изменение: Кодconst...   Jan 16 2011, 07:40
|- - AHTOXA   Цитата(ILYAUL @ Jan 16 2011, 15:40) Но и ...   Jan 16 2011, 09:48
|- - rx3apf   Цитата(ILYAUL @ Jan 16 2011, 13:40) Но и ...   Jan 16 2011, 11:15
|- - forever_student   Цитата(rx3apf @ Jan 16 2011, 17:15) ...От...   Jan 16 2011, 12:26
|- - AHTOXA   Цитата(forever_student @ Jan 16 2011, 20...   Jan 16 2011, 13:30
|- - forever_student   Цитата(AHTOXA @ Jan 16 2011, 16:30) Это е...   Jan 16 2011, 19:57
|- - AHTOXA   Цитата(forever_student @ Jan 17 2011, 00...   Jan 16 2011, 21:04
|- - forever_student   Цитата(AHTOXA @ Jan 17 2011, 00:04) ...А ...   Jan 17 2011, 10:36
- - ILYAUL   Вообщем получилось так. ВСЕМ СПАСИБО за ИДЕИ!...   Jan 23 2011, 11:54
|- - forever_student   Цитата(ILYAUL @ Jan 23 2011, 14:54) Вообщ...   Jan 24 2011, 19:54
|- - ILYAUL   Цитата(forever_student @ Jan 24 2011, 22...   Jan 24 2011, 22:00
|- - forever_student   Цитата(ILYAUL @ Jan 25 2011, 01:00) Зачем...   Jan 26 2011, 08:06
- - нечитатель   Вспомнил про две возможности я: - нажимать одновр...   Jan 25 2011, 23:56


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:00
Рейтинг@Mail.ru


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