Кроссплатформенная графическая библиотека для AVR и STM32
Библиотека написана с нуля на чистом языке C в GCC и AC6 используя только целочисленную математику и не используя сторонние коды.
На данный момент библиотекой поддерживается два микроконтроллера ATmega128 и STM32F407 на уровне графического интерфейса пользователя GUI (KVB_LCD.h). Графические объекты, написанные на основе GUI библиотеки, будут работать как на 8 ми битном микроконтроллере ATmega128 так и на 32 х битном STM32F407.
Для разработки программного кода библиотекой поддерживаются три среды разработки IDE; Atmel Studio 7.0, STM32CubeIDE v2 и Keil MDK v5.43. Для просмотра тестового презентационного кода под STM32 поддерживаются три платы разработки с разъемом FSMC;
Open407V-D stm32f4-discovery микроконтроллер STM32F407VGT6.
ST STM32F4XX Black v3.0 1606 микроконтроллер STM32F407ZGT6.
ST STM32F4XX Black v2.0 1509 микроконтроллер STM32F407VET6.
Для просмотра тестового презентационного кода под ATmega128 используются порты ввода / вывода;
PORTC порт (D0-D7) младшего байт шины данных LCD панели.
PORTA порт (D8-D15) старшего байт шины данных LCD панели.
PORTD бит 4 (CS) передача сигнала доступа к LCD панели.
PORTD бит 5 (RD) передача сигнала чтения из LCD панели.
PORTD бит 6 (WR) передача сигнала записи в LCD панель.
PORTD бит 7 (RS) передача сигнала команда/данные LCD панели.
PORTG бит 0 (RST) передача сигнала сброса LCD панели.
PORTG бит 1 (BL) передача сигнала подсветки LCD панели.
Панели LCD
На данный момент написаны драйвера для пяти LCD панелей:
ILI9325 разрешение 320 x 240
ILI9341 разрешение 320 x 240
ILI9481 разрешение 480 x 320
ILI9484 разрешение 480 x 320
OTM8009A разрешение 800 x 480
Расположение выводов разъемов плат и панелей прилагаются в папке “FSMC LCD” в виде документов в формате .xlsx. Вполне возможно, что у Вас могут отличатся разъемы LCD панелей, но разъемы плат должны соответствовать.
Уникальный функционал и авторские алгоритмы
Основной задачей при создании библиотеки ставилось, кроме кроссплатформенности, максимально быстрая отрисовка графических объектов. В отличие от классических библиотек, использующих стандартный по пиксельный вывод, в данном проекте реализованы собственные оптимизированные алгоритмы, разработанные с учетом архитектуры графической памяти (GRAM) дисплеев:
Скоростная отрисовка линий. Используется авторский алгоритм, который рассчитывает сплошные прямые отрезки в наклонных линиях. Это позволяет минимизировать количество команд переключения адресов GRAM LCD панели и осуществлять быструю блочную заливку, что кратно увеличивает скорость отрисовки (FPS).
Отрисовка градиентным цветом. Используется авторский алгоритм, который рассчитывает и заполняет градиентное окрашивание в вертикальном и горизонтальном направлении с линейной или центральной ориентацией за счет аппаратного ускорения GRAM матрицей LCD панели.
Многофункциональный трех поверхностный объект. Используется авторский алгоритм, который рассчитывает в целочисленной математике окружность с заполнением градиентным цветом на лету не используя фрейм-буферы. В данном объекте заполняются и отрисовываются одновременно три округлые / круглые или прямоугольные поверхности градиентным цветом в разных направлениях на лету. Все три поверхности могут перерисовываться независимо друг от друга, это позволяет, акцентировать выбор объекта, перерисовывая другим цветом только одну, на пример, наружную поверхность не тратя время на отрисовку остальных поверхностей.
Графические примитивы
Три формы отображения и регулируемый бордюр. Графические примитивы имеют две независимые поверхности и три формы отображения: 1 = весь примитив, 2 = только регулируемый бордюр, 3 = только внутренняя поверхность. Это позволяет выбирать на экране LCD панели объект, изменяя цвет бордюра, не тратя время на перерисовку внутренний поверхности. Примитивы типа треугольник (равносторонний и равнобедренный) имеют четыре ориентации вершины: 1 = левая, 2 = правая, 3 = вверх, 4 = вниз.
Продвинутая подсистема вывода текста
Движок обладает мощным и быстрым функционалом работы с текстом, который автоматически выравнивает строки и рендерит сложные визуальные эффекты на лету без использования фрейм-буфера:
Привязка к базовой линии. Все шрифты привязываются к единой горизонтальной направляющей, нижняя полка символов. Это позволяет собирать одну строку из слов разного размера и цвета, гарантируя идеальную ровность текста.
Автоматический перенос длинного текста по словам. Длинный непрерывный текст может состоять из множества текстовых, целочисленных и вещественных переменных, разного размера шрифта окрашенных разным цветом. Текст будет переносится по словам на следующие строки если выходит за границу ширины текстового блока.
Поддержка табуляции.
Установка кернинга шрифта (меж символьное расстояние) с коррекцией длины пробелов и табуляции.
Расстояния между строками. Расстояние задается как в плюс, так и в минус. Актуально в минус если длинный текст выводится только заглавными символами. Изменение расстояния в плюс приводит к лучшей читаемости обычного текста.
Коэффициент увеличения шрифта.
Выравнивание текста. Выравнивание задается по левому краю, правому краю или центру.
Эффект тени. Тень символа имеет четыре установки. 1 = тень низ справа, 2 = тень низ слева, 3 = тень верх справа, 4 = тень верх слева. Тем самым создается эффект выпуклости или вдавленности шрифта и лучшем образом влияет на читаемость текста.
Круговой контур символов. Четкий контур вокруг каждого символа для читаемости на любом фоне. Можно задать отображение только контура без символа.
Градиентный текст. Плавное окрашивание в горизонтальном или вертикальном направлении с помощью линейной или центральной заливки строки и применению тени или кругового контура.
Графический редактор шрифтов (Windows IDE)
Для создания и кастомизации экранных шрифтов разработано полноценное Windows-приложение, автоматизирующее весь цикл подготовки графических ресурсов:
Импорт DOS-шрифтов (.fnt). На протяжении DOS эпохи было создано великое множество растровых шрифтов .fnt формата. Возможность быстрой загрузки классических растровых шрифтов формата DOS для их последующей адаптации под дисплеи микроконтроллеров.
Поточечное редактирование. Удобный графический интерфейс для ручной отрисовки и корректировки каждого символа на пиксельной сетке с настройкой базовой линии.
Интерактивный рендеринг. Отображение заданной текстовой строки на лету в реальном времени. Вы видите, как изменения конкретного пикселя в символе влияют на отображение целой строки.
Сохранение в Си-формат. Генерация готовых `.c` файлов с ультра-компактной последовательной упаковкой данных (символ 9x16 занимает всего 18 байт), полностью совместимых как с `PROGMEM` во Flash-памяти ATmega128, так и с обычными константными массивами в STM32F407.
Авторский пак. С помощью данного редактора создано 23 уникальных русско-английских шрифта (5 базовых включены в презентацию для демонстрации, полный набор и редактор доступны по запросу).
В демонстрационной версии редактора убрана возможность сохранения в Си-формате, полноценный редактор доступен по запросу.
Видео ролик можно посмотреть, оценить скорость работы:
Полный код проекта и описания можно скачать:





















