В статье хочу представить Вашему вниманию несколько несложных, но весьма удобных и полезных утилит, которые я набросал на досуге. Все они предназначены для облегчения работы с графическими дисплеями и светодиодными индикаторами. Возможно они пригодятся кому-нибудь из Вас.
Калькулятор для создания кодов цифр и знаков для семисегментного индикатора
Наверное многие, кто работал с данным типом индикаторов знают, как неудобно просчитывать коды цифр и знаков с помощью листика и калькулятора. Особенно, когда от устройства к устройству меняется порядок подключение сегментов к порту микроконтроллера. Так вот, чтобы каждый раз не тратить много времени на эту процедуру, я решил написать простую и удобную графическую утилитку:
Интерфейс программки простой и интуитивно понятный. Для начала работы расставляете номера битов напротив соответствующих сегментов (в соответствии со схемой подключения индикатора на Вашем устройстве), а затем просто нажимаете на соответствующие сегменты не "восьмёрке" и получаете "на лету" шестнадцатиричный код в окошке "результат". Также можно выбирать тип индикатора: с общим анодом или катодом. Результат также будет меняться "на лету". Для удобства названия сегментов подписаны графическом поле.
Следующая утилита чуть по сложнее. Она предназначена для создания кодов своих символов на графических дисплеях и светодиодных матрицах.
Программка также с предельно простым интерфейсом. Имеет графическое поле 8Х8 пикселей, строку результата и одну единственную настройку - ориентация изображения. При горизонтальной ориентации пиксели адресуются горизонтальными строками слева-направо от старшего бита к младшему, т.е. старший бит первого байта будет располагаться в верхнем левом углу, а младший - в верхнем правом. При вертикальной ориентации байты адресуются по столбцам: старший бит первого байта будет в верхнем левом углу, а младший - в нижнем левом и так далее. Вертикальная ориентация используется, например в дисплеях Nokia 5110 и если не ошибаюсь, в oled дисплеях на ssd1306. Горизонтальная - обычно при создании шрифтов на цветных LCD дисплеях или на светодиодных матрицах 8х8.
Кнопка "Очистить" просто очищает графическую область. А строка результата меняется при нажатии на любой пиксель графической области. В строке результата я предусмотрел фигурные скобки, чтобы её можно было сразу копировать в многомерный массив программы на "Си". В общем, просто и удобно.
Третья программа выполняет более сложную задачу. Это конвертер bmp изображений 24bit (то есть обычных несжатых картинок) в бинарный файл с цветовой кодировкой RGB565 (которая используется в подавляющем большинстве недорогих цветных графических дисплеях от наших китайских друзей с небезызвестной китайской торговой интернет площадки).
Как видите, интерфейс этой утилитки вообще - спартанский, всего три кнопки и один "чекбокс". Назначения кнопок очевидны из их названия. Последовательность действий при работе с программой такая: открываем bmp файл с помощью кнопки "открыть", нажимаем кнопку "конвертировать" и сохраняем полученный файл кнопкой "сохранить". Расширение выходного файла (.rpc) при сохранении добавляется автоматически.
В программе реализована несложная "защита от дурака" - при попытке открытия файла другого формата (например, если переименовать расширение другой картинки в bmp) появится сообщение об ошибке в строке "консоль". Также программка проверяет битность открываемого файла (изображение должно быть 24bit).
Особое внимание нужно обратить на "чекбокс" - "Добавить заголовок". Если галочка не установлена, то изображение сконвертируется в виде бинарного файла, в котором каждый пиксель изображения закодирован в виде 2 байт в формате RGB565, где первый байт старший (5 бит R и 3 бита G), второй младший (3 бита G и 5 бит R). Пиксели в файле располагаются построчно слева-направо, начиная от верхнего левого угла, а строки сверху-вниз.
При установке галочки "Добавить заголовок", в начале файла добавляется 10 информационных байт:
- 2 байта (смещение 0 байт) - символы 'R' и 'P'.
- 4 байта (смещение 2 байта) - ширина изображения в пикселях (первым идёт младший байт, последним - старший).
- 4 байта (смещение 6 байт) - высота изображения в пикселях.
Полученные файлы удобно записывать на SD карту или SPI флеш для создания заставок, фонов или меню на микроконтроллерных самоделках. Это избавляет микроконтроллер от конвертирования bmp изображения в сырые данные и очень сильно ускоряет вывод картинок на дисплей. Причём, файлы с заголовком удобно использовать при отображении картинок не фиксированного размера (равных разрешению дисплея и меньше), а без заголовка - выводить изображение на весь экран.
Пока это всё, на что хватило фантазии. Все три программы написаны на С#, поэтому для запуска могут потребовать установки пакета .NET Framework.
PS. Мои программы не претендуют на оригинальность, наверняка в сети полно подобных калькуляторов и конвертеров. Но мне как всегда хочется сделать что-то своё. Это очень интересно, приносит новый полезный опыт и кучу положительных эмоций. Если кому-то мои программки придутся по душе - то пользуйтесь на здоровье, мне не жалко. Буду рад любым отзывам и комментариям. Всем удачи.
Прикрепленные файлы:
- 7SegCalc.zip (7 Кб)
- Bmp2Raw_converter.zip (6 Кб)
- Char8x8Calc.zip (11 Кб)