|
|
  |
Редактирование строки на ЖКИ., Ввод времени в RTC |
|
|
|
Dec 16 2007, 12:52
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(alux @ Dec 16 2007, 17:39)  Не вижу ничего простейшего! Наоборот. Вы что, в мобильном телефоне тоже так время настраиваете? Т.е. подводите курсор на нужный символ, затем нажимаете на кнопку, отличающаяся от "вправо"/"влево". Затем кнопками "вправо"/"влево" редактируете значение времени??? Если это так, то я вам сочувствую... Ну не обратил я внимания, на то что у вас цифровые клавиши имеются.  Привык что у нас в приборах их нету. Сути дела это особо не меняет. Перемещение по строке - один уровень. Ввод/редактирование - другой уровень. Редактируется конкретная переменная, связанная с позицией курсора. Вот и все. Цитата(alux @ Dec 16 2007, 17:47)  (если скан-код нажатой клавиши отличается от 0xff-нет нажатия). У меня вообще-то такого не бывает. Т.е. если клавиша не нажата и/или буфер клавиатуры пуст, то возвращается код NULL, который обычно имеет значение 0x00.
|
|
|
|
|
Dec 16 2007, 13:41
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(alux @ Dec 16 2007, 15:26)  Если не жалко, выложите код. Не жалко, но совершенно бессмысленно. Ибо там все буквально так и написано, как я словами описал, только много менее ясно и с шероховатостями, поскольку писалось быстро в качесте "халтурки" и завязано на мое так-же быстро писанное окружение, и специфику ввиде возможности эмуляции экранного редактирования таблиц, и использования полной PS/2 клавиатуры с полным управлением, курсором, Bacspace, и прочими наворотами.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Dec 16 2007, 18:03
|

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

|
Цитата(rezident @ Dec 16 2007, 00:21)  Дык у каждого процесса своя переменная заданного периода. Простым вычитанием двух беззнаковых переменных определяется закончился требуемый процессу интервал времени или еще нет. Понятно, только я прикинул, что по количеству используемых флагов, регистров и всего оверхеда ваш вариант получается примерно равноценен моему. Так что, действительно, хозяин-барин Цитата(rezident @ Dec 16 2007, 00:21)  Это довольно плохие контакты. Я не припомню, чтобы мы применяли кнопки у которых дребезг превышал 10мс. Обычно не более единиц мс. Это я неточно выразился, имел в виду что через 50-70 мс нажатия взводится флаг. Цитата(alux @ Dec 14 2007, 18:53)  Проблема еще в том, что символы имеют переменную ширину. Поэтому после каждого ввода символа необходимо ,наверное, перерисовывать всю строку. Я как-то упустил главную мысль вопроса Может речь идет о том, что применяется графический LCD с разноширинными шрифтами? Если это так, то просто примените моноширинный шрифт (типа courier). Тогда не будет нужды перерисовывать строку во время редактирования. Цитата(alux @ Dec 16 2007, 14:47)  Переменную, наверное, необходимо сделать bin2bcd, чтобы редактировать каждую цифру числа. Пока не представляю как это все реализовать. Если же речь не об этом, а о том каким образом редактировать отдельную цифру в бинарной переменной, то тогда ваша мысль правильная: - бинарное число читается из часов, преобразуется в BCD или ASCII, выводится на дисплей; - далее в том же виде (BCD или ASCII) редактируется по одной цифре; - преобразуется обратно в бинарный вид и сохраняется в часах.
|
|
|
|
|
Dec 16 2007, 19:40
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(alux @ Dec 16 2007, 22:24)  В начале я упоминал, что символы имеют разную ширину. Очевидно, что речь идет об графическом индикаторе. В данном случае 128х64. Я специально потратил два дня на создание этих разноширинных шрифтов. Теперь вы мне предлагаете отказаться от этого только потому, что так было бы проще.  По-моему, это глупо. Я, в одном изделии, применяю разные шрифты - моноширинные и разноширинные. И, я высказываю своё личное мнение, мне кажется что вы мешаете всё в кучу. У вас должно быть разделение. Уровень работы со шрифтами и уровень вывода, грубо говоря. Уровень работы со шрифтами - это уровень драйвера дисплея, а уровень вывода текста - уровень прикладной. Это значит что на этом уровне не должно иметь значения как выводится информация. То есть не имеет смысла это обсуждать или имеет смысл завести две темы - два вопроса. (Один из вариантов решения проблемы уровня драйвера вы приводите сами (насколько я понял) - вы регенерируете изображение полностью при его изменении. Могу отметить, что это не единственный способ) То что вам предложили - а именно использование моноширинного фонта - это не из-за проблем с выводом, а рекомендации для получения "красивой" картинки. Я в этом сам убедился. Дело в том, что при применении разноширинных шрифтов цифры времени будут немного "плясать" по понятной причине, что не очень приятно для глаза. Вас не призывают отказаться от применения этих шрифтов. Вам предлагают в данном месте применить моноширинные. А это не одно и тоже. Я, к примеру так и сделал. Но, я повторяю, писать надо так, чтобы изменение номера шрифта - никак не сказалось на работоспособности программы. Цитата Извините, не понял что этим сказано. Если используется "более менее универсальные способы" , то это по-вашему плохо? Нет не плохо. Но иногда универсальность вредит удобству использования. У меня, к примеру, в редакторе используется возможность прямого ввода значения и +/-. Но есть и моменты, которые вам, как мне кажется, не подойдут. С другой стороны, у меня вводится признак типа редактируемого значения. Там есть значение int8, int16, real. Можно добавить и date. Если размер свободной флэш позволяет, то можно использовать универсальные способы. Жаль что я поздно стал работать с СИ. Иначе и вам бы помог и самому бы сейчас было бы полегче. Наработано было бы больше.
|
|
|
|
|
Dec 16 2007, 19:48
|

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

|
Цитата(alux @ Dec 16 2007, 20:24)  В начале я упоминал, что символы имеют разную ширину. Очевидно, что речь идет об графическом индикаторе. В данном случае 128х64. Я специально потратил два дня на создание этих разноширинных шрифтов. Теперь вы мне предлагаете отказаться от этого только потому, что так было бы проще.  По-моему, это глупо. Извиняюсь за невнимательность Если вы категорически не хотите отказываться при редактировании параметров от разноширинных шрифтов, то выход у вас только один. Как вам уже ранее советовали, нужно создать шаблон строки (как в оконном интерфейсе), где жестко заданы поля под ввод параметров. Причем размер поля равен максимальному размеру параметра (самый широкий из возможных наборов символов). И выводить это все на LCD не как одну строку, а как набор полей. Иначе при редактировании у вас будут "дышать" размеры всего текста, что на мой взгляд будет выглядеть ужасно Другой вариант - отказаться от геморроя и применить моноширинный шрифт. Ваш же пример с мобильником - что-то я не видел там в редакторах разноширинных шрифтов
|
|
|
|
|
Dec 17 2007, 08:07
|
Знающий
   
Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447

|
Цитата(SasaVitebsk @ Dec 16 2007, 23:40)  То что вам предложили - а именно использование моноширинного фонта - это не из-за проблем с выводом, а рекомендации для получения "красивой" картинки. Я в этом сам убедился. Дело в том, что при применении разноширинных шрифтов цифры времени будут немного "плясать" по понятной причине, что не очень приятно для глаза... У разноширинного шрифта одно главное преимущество - компактность. Для меня это самое главное. Я вначале начал с моноширинных. Но текcты меню пришлось писать сокращенно, что не есть хорошо. Например, надпись "hello, world!" моноширинным 7х10_bold занимает 13х8=104 пикселя. Почти весь экран. В то время как разноширинным - 69. Разница - очевидна. Может вы не заметили, я немного изменил задачу вывода времени. Каждая переменная выводится отдельной строкой. Т.е. при вводе чисел, например, года (2007) картинка меняется на один пиксель, в случае ввода '1'или '4'. Что не так "ужасно", как вы описали. Возможно, при динамическом выводе результатов измерения (до этого пока дело не дошло) меня это станет раздражать. Мне ничего не стоит добавить в фонт '1' пустой столбец, а в '4' убрать последний и сделать таким образом все числа моноширинными (все остальные у меня имеют ширину 5 байт). А проблему с вводом чисел я решил. Все равно сделал по-своему  Спасибо всем за ответы. Хотелось бы побольше конкретики... Отдельное спасибо zltiqo за реальную помощь. На полном серьезе. Он понял меня с первого раза. Есть еще немало вопросов. Но об этом позже...
|
|
|
|
|
Dec 18 2007, 19:41
|
Знающий
   
Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447

|
При выводе на экран строки, например шрифтом 7х10, затирается нижестоящая строка. Оно и понятно, фонт имеет высоту 10, поэтому отправляется по два байта на столбец. Второй байт сдвигается вправо на 6. Поэтому получается пустая полоса под вводимой строкой высотой 6 пикселей. Как решить эту проблему? Перед вводом второго байта читать содержимое экрана, накладывать маску и снова записывать? Геморойно как-то. Делать полную регенерацию экрана? Или есть другие варианты? Кстати, при навигации по пунктам меню немного раздражает обновление экрана в течении секунды. Стоит Атмега32L, 7.3728МГц. У меня только два варианта: перед записью сравнивать с содержимым экрана, и если равно, то не писать. Т.е. писать только измененные строки. Второй вариант - заменить контроллер на Атмега324, 20МГц. Шустрее будет почти в 3 раза? Кстати, сегодня получил подарок в виде посылки бесплатных образцов Атмега324(10шт) и АТ90USB1287(10шт) от св.Николая  !!! Кстати, всех с наступающим НГ!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|