|
Меню для RTC, Толкните уже куда нибудь |
|
|
|
 |
Ответов
|
Jan 14 2011, 12:09
|

Профессионал
    
Группа: Свой
Сообщений: 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; }
|
|
|
|
Сообщений в этой теме
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 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|