Перейти к содержанию
    

LCD шкала, прогресс бар.

Увидел статью про LCD дисплеи, в котором применялась шкала прогресс бар на LCD hd44780.

Хочу в своем проекте использовать похожую шкалу.

Свои символы в дисплей прописал(черточки как в примере, что-то типа этого: __I, _I_, I__, II_, III).

Дальше не знаю как подступится. А именно как привязать константу к шакале?

Ведь получается что шкала должна двигаться меняя символ, а потом переходить на следующий символ?!

Далее хочу реализовать "точку максимума" отдельно стоящей черточкой (см.рис.2). С этим вообще пока даже мыслей нет.

Казалось бы все должно быть элементарно, а в голову лезут большие алгоритмы с кучей ветвлений... :wacko:

Подскажите пожалуйста алгоритм.

post-31836-1339593021.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Непонятно, что у Вас вызвало такие затруднения? Из тех символов, что вы прописали, Вам понадобяться только эти: I__, II_, III.

Дальше. Допустим, у Вас 16 знакомест. Значит, полную шкалу сигнала делите на 48 (16х3) градаций. Теперь, зная величину текущего уровня сигнала, определяете, скольким градациям он соответствует. Допустим, двадцати. Отсюда просто найти, сколько полных знакомест будет отображатся в шкале (симвлолов III): (20/3=6+2) и какой символ вывести в дополнение к ним (в данном случае II_, конечно). Всё. Максимум можно организовать мигающей чёрточкой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите пожалуйста алгоритм.

Да какой тут алгоритм? Если как на фото, получается три палки на знакоместо. Соответственно:

номер знакоместа = x / 3 (все, что до него, заполняем тремя палками)

номер символа в последнем знакоместе = x % 3

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот тут лежит проект (исходники на "C"), где в файле hd44780.c есть реализация барграфа.

Это низкоуровневая функция в ней есть масштабирование.

Используется два или три уровня на каждое знакоместо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да какой тут алгоритм? Если как на фото, получается три палки на знакоместо. Соответственно:

номер знакоместа = x / 3 (все, что до него, заполняем тремя палками)

номер символа в последнем знакоместе = x % 3

Да уж,слишком громко у меня прозвучало "алгоритм". :-) Видимо плохо изъяснился. Прошу простить великодушно :biggrin:

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

Просто думал обойтись без деления.

Максимум можно организовать мигающей чёрточкой.

Под "Максимум" я имелл ввиду на время замирающую черту (как в старых эквалайзерах), которая через некоторое время смещается ближе к вершине шкалы.

Вот тут где в файле hd44780.c есть реализация барграфа.

Спасибо! Посмотрю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просто думал обойтись без деления.

Не, ну можно, конечно, обойтись без деления. Например, вот так:

номер знакоместа = (значение * 85) >> 8

 

Только зачем этот геморрой? На скорости это не должно сильно сказаться - экран чаще 10-20 раз в секунду смысла обновлять нет. Объем программы разве что...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...