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

 
 
> Редактирование строки на ЖКИ., Ввод времени в RTC
alux
сообщение Dec 14 2007, 16:53
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Простая, казалось бы на первый взгляд задача... Но вот уже вторые сутки ломаю голову. Не могу придумать как это лучше сделать. Хочу, как в мобильном телефоне настраивать время. Вот мой кусок кода:
Код
void EditTime_Func(void)
{
  unsigned char temp;
  rtc_get_time(0x99);      //значение времени в yr, mn, dt, dy, hr, min, sec
  ClearScreen();    // display clear      
  GotoXY(0,0);    
  sprintf_P(lcd_buf,"%d/%d/%d %d  %02d:%02d:%02d", yr, mn, dt, dy, hr, min, sec);
  PutStr(lcd_buf);
  w=CharWidth(*plcd_buf)-2;
  start_Timer(TIMER_0, 500, blink, TIMER_CYCLE);

  for(;;)
  {
    temp=key_get();
    switch(temp)          //key_code.scan
    {
        case LEFT:        //k_esc
            {......}
             break;
        case RIGHT:       //k_enter
             {......}
             break;
        case DOWN:        //k_left
             {......}
             break;
        case UP:          //k_right
              {......}
             break;  
        default:          // 0...9
             {......}
             break;            
    }
    
    if(key_code.scan == LEFT)  //выход из функции
    {
       stop_Timer(TIMER_0);
       break;
    }
  }
}

//------------------------------------------------------------------------------
void blink(void)
{
  InvertRect(x, y, w, 9);
}

Идея такая. Вывожу на экран значение времени в виде строки:
"2007/12/24 1 12:32:00"
Ф-ция start_Timer() запускает каждые 0,5 сек ф-цию blink(), которая в свою очередь инвертирует заданный прямоугольник. Т.е. должно мигать текущее знакоместо. Кнопками UP, DOWN выбираю следующее, предыдущее знакоместо. Ввод числа осуществляется с клавиатуры 4х4. Это все у меня работает. Проблема еще в том, что символы имеют переменную ширину. Поэтому после каждого ввода символа необходимо ,наверное, перерисовывать всю строку. После нажатия ENTER новые значения переменных необходимо записать в RTC. Как сделать ввод чисел только в заданные места, т.е. пропускать '/' , ' ' , ':' ? Меня не покидает чувство, что изобретаю велосипед.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Baser
сообщение Dec 16 2007, 18:03
Сообщение #2


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(rezident @ Dec 16 2007, 00:21) *
Дык у каждого процесса своя переменная заданного периода. Простым вычитанием двух беззнаковых переменных определяется закончился требуемый процессу интервал времени или еще нет.

Понятно, только я прикинул, что по количеству используемых флагов, регистров и всего оверхеда ваш вариант получается примерно равноценен моему. Так что, действительно, хозяин-барин wink.gif
Цитата(rezident @ Dec 16 2007, 00:21) *
Это довольно плохие контакты. Я не припомню, чтобы мы применяли кнопки у которых дребезг превышал 10мс. Обычно не более единиц мс.

Это я неточно выразился, имел в виду что через 50-70 мс нажатия взводится флаг.

Цитата(alux @ Dec 14 2007, 18:53) *
Проблема еще в том, что символы имеют переменную ширину. Поэтому после каждого ввода символа необходимо ,наверное, перерисовывать всю строку.

Я как-то упустил главную мысль вопроса smile.gif
Может речь идет о том, что применяется графический LCD с разноширинными шрифтами?
Если это так, то просто примените моноширинный шрифт (типа courier). Тогда не будет нужды перерисовывать строку во время редактирования.
Цитата(alux @ Dec 16 2007, 14:47) *
Переменную, наверное, необходимо сделать bin2bcd, чтобы редактировать каждую цифру числа. Пока не представляю как это все реализовать.

Если же речь не об этом, а о том каким образом редактировать отдельную цифру в бинарной переменной, то тогда ваша мысль правильная:
- бинарное число читается из часов, преобразуется в BCD или ASCII, выводится на дисплей;
- далее в том же виде (BCD или ASCII) редактируется по одной цифре;
- преобразуется обратно в бинарный вид и сохраняется в часах.
Go to the top of the page
 
+Quote Post
alux
сообщение Dec 16 2007, 18:24
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(Baser @ Dec 16 2007, 22:03) *
Может речь идет о том, что применяется графический LCD с разноширинными шрифтами?
Если это так, то просто примените моноширинный шрифт (типа courier). Тогда не будет нужды перерисовывать строку во время редактирования.

В начале я упоминал, что символы имеют разную ширину. Очевидно, что речь идет об графическом индикаторе. В данном случае 128х64. Я специально потратил два дня на создание этих разноширинных шрифтов. Теперь вы мне предлагаете отказаться от этого только потому, что так было бы проще. 07.gif По-моему, это глупо.
Go to the top of the page
 
+Quote Post
Baser
сообщение Dec 16 2007, 19:48
Сообщение #4


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(alux @ Dec 16 2007, 20:24) *
В начале я упоминал, что символы имеют разную ширину. Очевидно, что речь идет об графическом индикаторе. В данном случае 128х64. Я специально потратил два дня на создание этих разноширинных шрифтов. Теперь вы мне предлагаете отказаться от этого только потому, что так было бы проще. 07.gif По-моему, это глупо.

Извиняюсь за невнимательность laughing.gif
Если вы категорически не хотите отказываться при редактировании параметров от разноширинных шрифтов, то выход у вас только один. Как вам уже ранее советовали, нужно создать шаблон строки (как в оконном интерфейсе), где жестко заданы поля под ввод параметров. Причем размер поля равен максимальному размеру параметра (самый широкий из возможных наборов символов). И выводить это все на LCD не как одну строку, а как набор полей. Иначе при редактировании у вас будут "дышать" размеры всего текста, что на мой взгляд будет выглядеть ужасно sad.gif
Другой вариант - отказаться от геморроя и применить моноширинный шрифт.
Ваш же пример с мобильником - что-то я не видел там в редакторах разноширинных шрифтов smile.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- alux   Редактирование строки на ЖКИ.   Dec 14 2007, 16:53
- - SasaVitebsk   Я реализовывал такую задачу. Правда на ассемблере ...   Dec 14 2007, 17:27
- - rezident   Разделите логически в программе ввод, вывод и реда...   Dec 14 2007, 18:16
|- - Baser   Цитата(rezident @ Dec 14 2007, 20:16) Раз...   Dec 14 2007, 20:32
|- - alux   Цитата(Baser @ Dec 15 2007, 00:32) Всегда...   Dec 15 2007, 09:57
|- - Baser   Цитата(alux @ Dec 15 2007, 11:57) Можете ...   Dec 15 2007, 16:15
|- - rezident   Цитата(Baser @ Dec 15 2007, 21:15) - Один...   Dec 15 2007, 20:28
|- - Baser   Цитата(rezident @ Dec 15 2007, 22:28) А я...   Dec 15 2007, 21:49
|- - rezident   Цитата(Baser @ Dec 16 2007, 02:49) При та...   Dec 15 2007, 22:21
- - Сергей Борщ   Цитата(alux @ Dec 14 2007, 18:53) Проблем...   Dec 16 2007, 10:01
|- - alux   Цитата(Сергей Борщ @ Dec 16 2007, 14:01) ...   Dec 16 2007, 11:47
||- - SasaVitebsk   Цитата(alux @ Dec 16 2007, 15:47) В каких...   Dec 16 2007, 15:23
||- - alux   Цитата(SasaVitebsk @ Dec 16 2007, 19:23) ...   Dec 16 2007, 15:51
|- - zltigo   Цитата(Сергей Борщ @ Dec 16 2007, 12:01) ...   Dec 16 2007, 11:55
|- - alux   Цитата(zltigo @ Dec 16 2007, 15:55) Все э...   Dec 16 2007, 13:09
- - SasaVitebsk   Тоже делаю временные метки. Сейчас сделаю отдельну...   Dec 16 2007, 10:50
- - rezident   Дык алгоритм-то редактирования простейший. 1 урове...   Dec 16 2007, 12:16
|- - alux   Цитата(rezident @ Dec 14 2007, 22:16) Раз...   Dec 16 2007, 12:47
|- - rezident   Цитата(alux @ Dec 16 2007, 17:39) Не вижу...   Dec 16 2007, 12:52
|- - zltigo   Цитата(alux @ Dec 16 2007, 14:47) А можно...   Dec 16 2007, 13:13
|- - alux   Если не жалко, выложите код.   Dec 16 2007, 13:26
|- - zltigo   Цитата(alux @ Dec 16 2007, 15:26) Если не...   Dec 16 2007, 13:41
|- - SasaVitebsk   Цитата(alux @ Dec 16 2007, 22:24) В начал...   Dec 16 2007, 19:40
||- - alux   Цитата(SasaVitebsk @ Dec 16 2007, 23:40) ...   Dec 17 2007, 08:07
- - SasaVitebsk   Вы можете добавить ещё один фонт состоящий только ...   Dec 17 2007, 16:50
- - alux   При выводе на экран строки, например шрифтом 7х10,...   Dec 18 2007, 19:41
- - SasaVitebsk   А какой у вас дисплей/контроллер?   Dec 18 2007, 20:20
- - alux   MT12864J ks0108 Добавлено Простите за тупой воп...   Dec 18 2007, 21:26
|- - Сергей Борщ   Цитата(alux @ Dec 18 2007, 23:26) А если ...   Dec 19 2007, 19:21
- - SasaVitebsk   Примерный смысл дойдёт из конструкции. Код maska =...   Dec 19 2007, 15:50


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

 


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


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