Урок 8 – библиотека шрифтов для дисплея st7783

STM32F4. Урок 8 – Библиотека шрифтов для дисплея ST7783

Урок 8 - Библиотека шрифтов для дисплея st7783

Данная библиотека используется для вывода текста на LCD-дисплей. Для ее работы необходима библиотека для работы с дисплеем “STM32_UB_LCD_ST7783” и один или более файлы шрифтов, которые должны быть включены в проект.

В данную библиотеку включено несколько шрифтов. С помощью написанной автором программой “PixelFontGenerator” любые компьютерные шрифты могут быть преобразованы в требуемый формат. Начиная с версии 1.

4 появилась поддержка шрифтов до 32 пикселей в ширину.

Начиная с версии версии 1.5 появилась поддержка пропорциональных шрифтов(шрифты с буквами разной ширины) для генерации таких шрифтов требуется программа версии 1.6 и выше!

Пример шрифтов:

Требования:  Подключаемые модули CooCox-IDE: отсутствуют.

 Поддерживаемые библиотеки: STM32_UB_LCD_ST7783.

Функции:

// Шрифты одной ширины
void UB_Font_DrawChar(uint16_t x, uint16_t y, uint8_t ascii, UB_Font *font, uint16_t vg, uint16_t bg); // Нарисовать символ (максимальный размер 16 пикселей)
void UB_Font_DrawString(uint16_t x, uint16_t y,char *ptr, UB_Font *font, uint16_t vg, uint16_t bg); // Нарисовать текст (максимальный размер 16 пикселей)
void UB_Font_DrawChar32(uint16_t x, uint16_t y, uint8_t ascii, UB_Font32 *font, uint16_t vg, uint16_t bg); // Нарисовать символ (максимальный размер 32 пикселя)
void UB_Font_DrawString32(uint16_t x, uint16_t y,char *ptr, UB_Font32 *font, uint16_t vg, uint16_t bg); // Нарисовать текст (максимальный размер 32 пикселя)
// Пропорциональные шрифты
uint16_t UB_Font_DrawPChar(uint16_t x, uint16_t y, uint8_t ascii, UB_pFont *font, uint16_t vg, uint16_t bg); // Нарисовать символ (максимальный размер 16 пикселей)
void UB_Font_DrawPString(uint16_t x, uint16_t y,char *ptr, UB_pFont *font, uint16_t vg, uint16_t bg); // Нарисовать текст (максимальный размер 16 пикселей)
uint16_t UB_Font_DrawPChar32(uint16_t x, uint16_t y, uint8_t ascii, UB_pFont32 *font, uint16_t vg, uint16_t bg); // Нарисовать символ (максимальный размер 32 пикселя)
void UB_Font_DrawPString32(uint16_t x, uint16_t y,char *ptr, UB_pFont32 *font, uint16_t vg, uint16_t bg); // Нарисовать текст (максимальный размер 32 пикселя)

Пример использования:

//————————————————————–
// File : main.c
// Datum : 24.07.2014
// Version : 1.2
// Autor : UB
// EMail : mc-4u(@)t-online.de
// Web : www.mikrocontroller-4u.de
// CPU : STM32F4
// IDE : CooCox CoIDE 1.7.0
// Module : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der Font-Library
// Hinweis : Diese zwei Files muessen auf 8MHz stehen
// “cmsis_boot/stm32f4xx.h”
// “cmsis_boot/system_stm32f4xx.c”
//————————————————————– #include “main.h”
#include “stm32_ub_lcd_st7783.h”
#include “stm32_ub_font.h” int main(void)
{ SystemInit(); // Инициализация настроек кварца UB_LCD_Init(); // Инициализация LCD // Цвет экрана – синий UB_LCD_FillScreen(RGB_COL_BLUE); // Черный текст на белом фоне, рисование различными шрифтами UB_Font_DrawString(10,10,”Arial-7×10″,&Arial_7x10,RGB_COL_BLACK,RGB_COL_WHITE); UB_Font_DrawString(10,30,”Arial-8×13″,&Arial_8x13,RGB_COL_BLACK,RGB_COL_WHITE); UB_Font_DrawString(10,50,”Arial-10×15″,&Arial_10x15,RGB_COL_BLACK,RGB_COL_WHITE); UB_Font_DrawString(10,70,”Arial-11×18″,&Arial_11x18,RGB_COL_BLACK,RGB_COL_WHITE); UB_Font_DrawString(10,100,”Arial-13×19″,&Arial_13x19,RGB_COL_BLACK,RGB_COL_WHITE); UB_Font_DrawString(10,130,”Arial-14×22″,&Arial_14x22,RGB_COL_BLACK,RGB_COL_WHITE); UB_Font_DrawString(10,160,”Arial-16×25″,&Arial_16x25,RGB_COL_BLACK,RGB_COL_WHITE); // 32 битный шрифт UB_Font_DrawString32(10,190,”Arial-18×27″,&Arial_18x27,RGB_COL_BLACK,RGB_COL_WHITE); // пропорциональный шрифт UB_Font_DrawPString(10,220,”Times 15 (proportional)”,&pTimes_15,RGB_COL_BLACK,RGB_COL_WHITE); // 32 битный пропорциональный шрифт UB_Font_DrawPString32(10,240,”Times 18 (proportional)”,&pTimes_18,RGB_COL_BLACK,RGB_COL_WHITE); while(1) { }
}

В приложении проект CooCox и отдельная библиотека для использования в других проектах, а также программа для конвертирования шрифтов. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.

Оригинал статьи

Прикрепленные файлы:

Источник: http://cxem.net/mc/mc311.php

Шрифты, иконки для TFT дисплея

Вот мы купили и подключили TFT дисплей к Ардуино, cкачали библиотеку UTFT. Хочется теперь сделать красивый текст, иконки , картинки. Я не буду описывать все функции библиотеке, есть хороший мануал к ней на английском языке.

Популярность библиотеке понятна. Есть хорошее описание, поддержка многих дисплее, много статей и расширений базовой библиотеке. Поддержку дисплеев можно включить и посмотреть в файле memorysaver.h который находиться в папке  библиотеке.

Вывод картинки на экран

Загрузим примерочный скетч из библиотеке :

// библиотека для работы с дисплеем #include // создаём объект класса UTFT // и передаём идентификатор модели дисплея и номера пинов // к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS UTFT myGLCD(TFT01_22SP, 9, 8, 12, 11, 10); // объявления встроенного шрифта extern uint8_t BigFont[]; // объявления двух массив изображений extern unsigned int amperka[0x400]; extern unsigned int raspberry[0x400]; void setup() { // инициализируем дисплей с горизонтальной ориентацией myGLCD.InitLCD(); } void loop() { // закрашиваем дисплей белым цветом myGLCD.fillScr(255, 255, 255); int x = 0; for (int s = 0; s < 4; s++) { x += (s*32); myGLCD.drawBitmap(x, 0, 32, 32, amperka, s+1); } x = 0; for (int s = 4; s > 0; s–) { myGLCD.drawBitmap(x, 224-(s*32), 32, 32, raspberry, s); x += (s*32); } delay(1000); }

Для работы с картинками есть функция drawBitmap , которая выводит подготовленный массив картинки на дисплей.

librariesUTFT-masterexamplesTFT_240x320TFT_240x320_bitmapamperka.с

drawBitmap(x, y, x1, y1, name, 1 );

  • x — координаты х левого угла картинки.
  • y — координаты y левого угла картинки.
  • х1 — размер картинки по x.
  • y2 — размер картинки по y.
  • name — имя файла массива, который лежит в папке библиотеке.
  • 1 — масштаб картинки.

Для создания файла с массивом есть  программа  ImageConverter565 которая входит в состав библиотеке и находиться в папке Tools.

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

В итоге мы получим файл с массивом. Который надо будет объявить в начале скеться так же как и шрифты :

extern unsigned int test54111[0xD16] // Очень важно  написать размер массива ( 0xD16) который модно посмотреть в файле.

ШРИФТЫ:

По умолчанию в библиотеке три шрифта SmallFont[]BigFont[] и SevenSegNumFont[] . По сути это тот же массив данных который содержится в файле DefaultFonts.

Что бы добавить или заменить шрифты нам надо дописать в этот файл массивы новых шрифтов. Можно взять как уже готовые шрифты(http://rinkydinkelectronics.com/r_fonts.php), так и сделать их самому. Не забывайте что каждый шрифт кушает память, которая у нас совсем не резиновая.

А как же сделать свои шрифты ? Я не беде здесь описывать сам процесс . А просто дам две ссылки на хорошие статьи на эту тему: Как создать свои шрифты для TFT дисплея ,  Русификация библиотеки UTFT — часть 1: SmallFont.

Я был бы очень рад если бы вы присылали мне свои шрифты. Я бы выкладывал  их на сайте )))

Источник: https://xn--90aeniddllys.xn--p1ai/shrifty-ikonki-dlya-tft-displeya/

PixelPixie — генератор шрифтов для LCD и OSD

Здравствуй, %username%. В этой статье я хотел бы рассказать про свой небольшой проект, призванный при помощи одного велосипеда и небольшой связки костылей слегка упростить жизнь embedded-разработчику, имеющего дело с графическими дисплеями или платами OSD.

Интро

Однажды мне довелось увидеть, как силами коллеги создаются шрифты для платы OSD, которая должна была быть затем установлена в монитор. Увиденное ввело меня в легкий ступор и заставило зашевилиться волосы на голове (картинка кликабельна).

Сначала каждый символ прорисовывался на листе в клетку. Затем изображение каждого символа в тетради вручную переводилось в массив байт и помещалось в исходники прошивки. На создание каждого символа уходило около часа кропотливой работы.

Осознание того, что за окном уже заканчивается 2016 год, и тетрадь в клетку не является оптимальным средством для достижения цели, подтолкнуло меня… нет, не на написание своего решения, а на поиск уже готового.

Однако, беглый поиск показал, что большинство имеющихся решений содержат хотя бы один из перечисленных недостатков:

  • небесплатны (иногда цена приближалась к 100 евро);
  • заточены под определенный формат (количество бит на пиксель, размер символа и кодирование цветов);
  • поддерживают только символы из стандартного набора шрифтов (зачастую на OSD приходится выводить совершенно отличные от букв, цифр и стрелочек символы).

На пути к велофабрике

Желание сделать мир чуть лучше и пара свободных вечеров вылились в небольшую утилиту командной строки — PixelPixie.

Читайте также:  Миниатюрный переходник usb – последовательный порт ftdi

На вход программа получает файл с изображением, на котором через равные промежутки (для этого проще всего использовать сетку) изображены символы будущего шрифта. Настройки генератора шрифта хранятся в JSON файле.

Все цвета, использованные при рисовании символов, необходимо поставить в соответствие с последовательностью бит. Последовательность задается в десятичном виде.

“ColorMapping”: { “#FFFFFF”: 0, “#000000”: 1, “#C8C8C8”: 2, “#808080”: 3 }

Генератор, обрабатывая изображение, побитово составит выходной массив. Одной из важных особенностей PixelPixie является то, что она может работать с любым количеством бит на пиксель. Например, часто требуется кодировать каждый пиксель 2 или 3 битами.

Сами символы могут так же быть произвольного размера и находиться в сетке с произвольным количеством столбцов и строк. Таким образом, я попытался сделать генератор максимально независимым от конкретного устройства, для которого генерируется шрифт.

Дополнительно PixelPixie умеет создавать изображение с пустой сеткой. Разработчику остается в любимом растровом редакторе “вписать” символы в ячейки сетки и дважды щелкнуть по batch-скрипту, который запускает PixelPixie. Теперь процесс работы над шрифтом выглядит примерно так:

На выходе мы получаем массивы, готовые для копипасты в исходник прошивки управляющего микроконтроллера.

//symbol 1
unsigned char c1[54] = {0x44, 0xC5, 0x7F, 0xFF, 0xDF, 0x7F, 0x73, 0xFD, 0x73, 0xD3, 0xF7, 0x73, 0x70, 0xF7, 0x73, 0xFC, 0xD7, 0x73, 0xFC, 0xD7, 0x73, 0xFC, 0xD7, 0x73, 0xDC, 0xD4, 0x33, 0xDC, 0xD4, 0x3F, 0xD4, 0x30, 0x3F, 0xF7, 0x03, 0x37, 0xF4, 0x00, 0x07, 0xF7, 0x00, 0x37, 0xF7, 0xF7, 0xD7, 0xF5, 0x55, 0x5F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; //symbol 2
unsigned char c2[54] = {0xFD, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFD, 0xCF, 0xFF, 0xFD, 0x0F, 0xFF, 0xF5, 0x3F, 0xFF, 0xF7, 0x04, 0xFF, 0xF7, 0xD4, 0xFF, 0xF5, 0x54, 0xFF, 0xFF, 0xD3, 0xFF, 0xFF, 0x53, 0xFF, 0xFF, 0x70, 0x0F, 0xFF, 0xFF, 0x0F, 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

И наблюдаем наш шрифт на экране ЖК-дисплея, подключенного к плате OSD.

Вместо заключения

Использование PixelPixie для разработки шрифтов платы OSD позволило сократить время работы над каждым символом с часа до 10 минут в самых сложных символах.

Конечно, разработчику все еще приходится попиксельно вырисовывать каждую букву и по несколько раз проверять, как она отображается на конечном устройстве, но количество рутины удалось сократить в несколько раз.

Исходный код PixelPixie доступен на GitHub.

Источник: https://habr.com/post/315712/

Обзор шрифтов библиотеки u8glib | avr | programming

Одно из больших достоинств библиотеки u8glib помимо всех прочих – большое количество готовых шрифтов. К сожалению, кириллических шрифтов среди них не так много, но все-таки русские шрифты есть, их можно найти.

В названии шрифтов (т. е. в именах двоичных массивов, где имеются данные шрифтов) присутствуют суффиксы, которые дают краткую характеристику шрифта (b, n, r и т. п., см. описание суффиксов ниже). Суффикс может быть составной, например br означает жирный урезанный шрифт.

r означает reduced, т. е. уменьшенный знакогенератор. Обычно набор символов ограничен сверху, т. е. символы с кодами 128..255 отсутствуют. Хорошо подходит для систем, где не нужно выводить русские буквы или когда есть жесткие ограничения по объему памяти.

n означает numberic, т. е. цифровые символы (коды 42 .. 57). Обычно это только символы ^+,-./0123456789:. Знак % отсутствует.

b или B означает bold, т. е. “толстые” символы. Если шрифт мелкий, то символы будут угловатые, “квадратные”.

O означает наклонный шрифт, italic.

67_75, 78_79 наборы графических символов.

Некоторые символы сделаны так, что они хорошо масштабируются вверх при отображении (например u8g_font_trixel_square). Это позволяет очень экономить на памяти.

Цифры в названии шрифта в формате NNxMM означают размер окружающего символ прямоугольника по X и по Y. Например, имя u8g_font_10x20r говорит нам о том, что максимальный размер символа по горизонтали 10 точек, по вертикали 20, и что шрифт имеет урезанный набор символов (обычно с кодами не более 127).

Название шрифта Модификации Описание
u8g_font_04b_03 b, n, r, bn, br Очень маленькие буковки. Символы 128..255 заявлены, но графики на самом деле нет (т. е. это фактически то же самое, что и вариант r). Вариант b имеет весьма угловатые символы.
u8g_font_04b_24 r, n Очень маленькие буковки.
u8g_font_10x20_67_75 Графические символы. Шрифт можно использовать для стрелочек, чекбоксов, вращающегося прогресса, закраски штриховкой и т. п.
u8g_font_10x20_75r Графические символы те же, что и в u8g_font_10x20_67_75, только их меньше.
u8g_font_10x20_78_79 Тоже графические символы.
u8g_font_10x20 r Крупные символы, русифицированный шрифт.
u8g_font_4x6 r Возможно самый мелкий шрифт из всех, русифицированный.
u8g_font_5x7 r Мелкие символы, не русифицированный шрифт.
u8g_font_5x8 Мелкие символы, но разборчивые, русифицированный шрифт.
u8g_font_6x10 r Русифицированный шрифт, подойдет для текста.
u8g_font_6x12_67_75 u8g_font_6x12_75r Графические символы. То же самое, что и u8g_font_10x20_67_75, только мелкие.
u8g_font_6x12_78_79 То же самое, что и u8g_font_10x20_78_79, только мелкие графические символы.
u8g_font_6x12 r Обычный русифицированный шрифт. Больше всего подходит для консоли. Модификация r не содержит коды символов больше 127 (нет русских букв).
u8g_font_6x13_67_75 u8g_font_6x13_75r То же самое, что u8g_font_10x20_67_75, только мелкий.
u8g_font_6x13_78_79 То же самое, что и u8g_font_10x20_78_79.
u8g_font_6x13 B, Br, O, Or, r Не русифицированный шрифт среднего размера.
u8g_font_7x13_67_75 u8g_font_7x13_75r Графические символы. То же самое, что и u8g_font_10x20_67_75, только мелкие. Заметил, что нет промежутков между символами.
u8g_font_7x13 B, Br, O, Or, r
u8g_font_7x14 B, Br, r
u8g_font_8x13_67_75 u8g_font_8x13_75r Графические символы. То же самое, что и u8g_font_10x20_67_75, только средние.
u8g_font_8x13 Br, Or, r Символы среднего размера, тонкие линии, русифицированный.
u8g_font_9x15_67_75 u8g_font_9x15_75r
u8g_font_9x15_78_79
u8g_font_9x15Br u8g_font_9x15r
u8g_font_9x18_67_75 u8g_font_9x18_75r
u8g_font_9x18_78_79
u8g_font_9x18Br u8g_font_9x18r
u8g_font_baby n, r Мелкий округлый шрифт, не русифицированный. Высота символа 6 точек.
u8g_font_blipfest_07 n, r Супермелкий шрифт, по размеру похож на u8g_font_4x6, но не русифицирован. Высота символа шрифта 5 точек, ширина обычно 3 точки.
u8g_font_chikita n, r Мелкий широкий шрифт, не русифицированный.
u8g_font_courB 08, 08r, 10, 10r, 12, 12r, 14, 14r, 18, 18r, 24, 24r, 24n Courier, не русифицированный. Цифры в модификациях соответствуют размерам.
u8g_font_courR 08, 08r, 10, 10r, 12, 12r, 14, 14r, 18, 18r, 24, 24r, 24n
u8g_font_cu12_67_75 u8g_font_cu12_75r
u8g_font_cu12 Оригинальный не русифицированный, символы довольно крупные.
u8g_font_cursor r Очень крупные графические символы (особенные), с большими отступами по Y и смещениями по X.
u8g_font_fixed_v0 n, r Не русифицированный, угловатый, довольно мелкий шрифт.
u8g_font_freedoom r10r, r25n Квадратные символы среднего размера, урезанный шрифт (без русских букв).
u8g_font_fub 11, 11n, 11r, 14, 14n, 14r, 17, 17n, 17r, 20, 20n, 20r, 20t, 25, 25n, 25r, 30, 30n, 30r, 35n, 42n, 49n Семейство не русифицированных шрифтов
u8g_font_fur 11, 11n, 11r, 14, 14n, 14r, 17, 17n, 17r, 20, 20n, 20r, 25, 25r, 30, 30n, 30r, 35n, 42n, 49n Обычный по виду шрифт, не русифицированный.
u8g_font_gdb 11, 11n, 11r, 12, 12n, 12r, 14, 14n, 14r, 17, 17n, 17r, 20, 20n, 20r, 25, 25n, 25r, 30, 30n, 30r, 35n, 42n, 49n Красивый шрифт, не русифицированный.
u8g_font_gdr 9, 9n, 9r, 10, 10n, 11, 11n, 11r, 12, 12n, 12r, 14, 14n, 14r, 17, 17n, 17r, 20, 20n, 20r, 25, 25n, 25r, 30, 30n, 30r, 35n, 42n, 49n
u8g_font_helvB 08, 08n, 08r, 10, 10n, 10r, 11, 11n, 11r, 12, 12n, 12r, 14, 14n, 14r, 18, 18n, 18r, 24, 24n, 24r helvetica, не русифицированный.
u8g_font_helvR 08, 08n, 08r, 10, 10n, 10r, 12, 12n, 12r, 14, 14n, 14r, 18, 18n, 18r, 24, 24n, 24r helvetica, не русифицированный.
u8g_font_lucasfont_alternate r, n Мелкий шрифт, не русифицированный, довольно симпатичный.
u8g_font_m2icon _5, _7, _9 Графика, мелкий набор, есть галочка для чекбокса и радиокнопки.
u8g_font_micro Супермелкий шрифт, в кодах 128..255 пустота.
u8g_font_ncenB 08, 08r, 10, 10r, 12, 12r, 14, 14r, 18, 18r, 24, 24n, 24r Красивые толстенькие символы, но шрифт не русифицированный.
u8g_font_ncenR 08, 08r, 10, 10r, 12, 12r, 14, 14r, 18, 18r, 24, 24n, 24r
u8g_font_orgv01 n, r Квадратный, мелкий и широкий шрифт, не русифицированный. Высота символа шрифта 5 точек, ширина обычно 5 точек.
u8g_font_osb 18, 18n, 18r, 21, 21n, 21r, 26, 26n, 26r, 29, 29n, 29r, 35, 35n, 35r Крупный красивый шрифт, не русифицированный.
u8g_font_osr 18, 18n, 18r, 21, 21n, 21r, 26, 26n, 26r, 29, 29n, 29r, 35, 35n, 35r Большие красивые символы, не русифицированные.
u8g_font_p01type n, r Исключительно мелкие символы, не русифицированный, выше кода 127 есть пустоты.
u8g_font_pixelle_micro n, r Еще один очень мелкий шрифт, выше кода 127 пустота.
u8g_font_profont 10, 10r, 11, 11r, 12, 12r, 15, 15r, 17, 17r, 22, 22r, 29, 29r Обычный не русифицированный шрифт.
u8g_font_robot_de_niro n, r Мелкий не русифицированный шрифт, выше 127 есть пустоты.
u8g_font_symb 08, 08r, 10, 10r, 12, 12r, 14, 14r, 18, 18r, 24, 24r Шрифт с греческими символами и математической графикой.
u8g_font_timB 08, 08r, 10, 10r, 12, 12r, 14, 14r, 18, 18r, 24, 24n, 24r Толстенький не русифицированный шрифт.
u8g_font_timR 08, 08r, 10, 10r, 12, 12r, 14, 14r, 18, 18r, 24, 24n, 24r То же самое, что и u8g_font_timB, только линии тонкие.
u8g_font_tpss b, bn, br, n, r Вытянутый вверх, не русифицированный шрифт.
u8g_font_trixel_square n, r Еще один очень мелкий не русифицированный шрифт, выше 127 есть пустоты. Насколько я понял, этот шрифт разработан с учетом возможности его масштабирования вверх при отображении.
u8g_font_u8glib_4 r Супермелкий не русифицированный шрифт.
u8g_font_unifont r, _0_10, _0_11, _0_8, _12_13, _18_19, _2_3, _4_5, _67_75, _72_73, _75r, _76, _77, _78_79, _86, _8_9 Шрифт со спецграфикой. _0_10 такой же, как основной. _0_11 с особенной псевдографикой, не русифицированный. _0_8 шрифт со спецграфикой, среднего размера, есть русские символы. _12_13 “Арабская” псевдографика. _18_19, _2_3 какие-то спецсимволы. _4_5 Разные символы псевдографики. _67_75 графические символы те же, что и в u8g_font_10x20_67_75. _72_73 спецсимволы, есть в виде красивых кружочков с цифрами. _75r то же, что и _67_75, только урезан набор символов. _76 особенные символы графики. _77 другие особенные символы графики, есть игральные кости. _78_79 очень хороший набор символов графики. _86 символы графики, есть много стрелок, формат квадратный. _8_9 до 0x50 русские символы, выше графика и кракозябры.
Читайте также:  Малогабаритный иип

Источник: http://microsin.net/programming/avr/u8glib-fonts-overview.html

Русификация библиотеки UTFT – часть 1: SmallFont

Для работы с графическими TFT-дисплеями (например, ITDB02-3.2S) существует замечательная библиотека UTFT (которая совсем недавно обрела новую версию, которая существенно быстрее предыдущей).

И все в этой библиотеке замечательно – доступны необходимые графические примитивы (прямоугольники, круги, линии, точки, прямоугольники с закругленными углами и т.п.) и есть возможность использовать различные шрифты, но все шрифты, к сожалению, содержат символы латинского алфавита и стандартные символы.

Во многих случаях этого вполне достаточно (большинство тех, кто увлекается “ардуино” – владеют английским и надписи на английском воспринимаются ими вполне адекватно), но когда устройство переходит из статуса “прототип” (для разработчика) и получает некоторое движение в сторону “продакшн” (уже для реального использования) – надписи на русском языке становятся более предпочтительными. Как оказалось, “русифицировать” данную библиотеку оказалось относительно несложно (“относительно” – только из-за кропотливости данной работы – требуется фактически попиксельно отрисовать каждый недостающий символ). Результат русификации можно увидеть на следующем изображении (фотография с экрана TFT):

Дополнительным результатом работы по русификации стал еще один дополнительный шрифт (SmallSymbolFont), содержащий дополнительный набор символов.

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

Для того, чтобы сэкономить драгоценную память микроконтроллера, будем добавлять в шрифт только недостающие символы (к примеру, кириллическую букву “А” заново создавать не будем, поскольку она выглядит абсолютно идентично латинской “А”).

Шрифт SmallFont описан в файле DefaultFonts.c внутри папки librariesUTFT – именно этот файл мы и откроем для редактирования.

В начале файла находится конструкция, которая начинается следующим образом:

Где в первой строке объявлен массив SmallFonts, указана его длинна (1144).

В следующей строке видим 4 байта:

  • 0x08 – ширина знакоместа (8 точек)
  • 0x0C – высота знакоместа (12 точек)
  • 0x20 – “смещение” (32)
  • 0x5F – количество символов в шрифте (95)

Дальше идут данные, которыми закодировано написание каждого из символов (12 байт на символ). 

1 байт = 8 бит, что позволяет закодировать как раз “строчку” в составе знакоместа.

Параметр “смещение” становится понятен, если посмотреть на таблицу ASCII-кодов (к примеру, символ “пробел” имеет код 32). 

В общем-то, то, что написано выше, дает полное представление о том, что мы будем делать:

  1. Необходимо подготовить информацию по начертанию всех недостающих символов (12 байт на каждый недостающий символ).
  2. Добавить полученную информацию в массив данных SmallFont.
  3. Скорректировать размер массива.
  4. Скорректировать количество символов в шрифте (4 байт в массиве).

Все остальные данные мы оставляем как есть (поскольку не изменяем их).

План работ понятен. Приступим к подготовке начертаний недостающих букв.

К примеру, буква “Б”:

Соответственно, выше мы видим “знакоместо”, размером 8х12 и “единичками” мы указываем те пикселы, которые формируют начертание символа. 

Дальше каждую строчку с “единичками” и “нулями” нужно закодировать соответствующим значением байта в шестнадцатеричной записи. К примеру, третья строчка:

В левой части видны биты (нули или единички), в первой же части – то же самое, но в шестнадцатеричной системе исчисления. Для такого преобразования можно воспользоваться программой “Калькулятор”, которая входит в состав любой современной операционной системы (только необходимо переключить на вид “Для программиста”).

Безусловно, это все можно делать ровно по той схеме, что описано, но это как-то совершенно не интересно – работа абсолютно рутинная и требует много “ручных” действий. Чтобы как-то эту ситуацию улучшить, воспользуемся замечательным инструментом: Microsoft Excel (или бесплатным аналогом из OpenOffice).

Автоматизируем следующее:

  1. Создадим правило для “условного форматирования” (чтобы фон ячейки менялся в зависимости от значения внутри ячейки) – тогда символ будет более явно виден.
  2. Произведем вычисление и преобразование бит в байт (в шестнадцатеричном представлении).

  3. Создадим строку из байтов, которая полностью описывает начертание символа (достаточно ее скопировать и вставить ее в массив SmallFont).

Получается следующее:

Внизу приведено начертание “оригинальной” буквы “В” – чтобы понимать, как распределено “пространство” в знакоместе (как организуется отступ, где находится базовая линия шрифта и т.п.). 

Теперь достаточно (в верхней части файла) в пространстве знакоместа ставить “нолики” и “единички” (при этом символ автоматически “подкрашивается”, что позволяет оценить то, как он будет выглядеть) и сразу же формируется строка, описывающая начертание.

Файл для MS Excel (совместим с OpenOffice) находится в архиве вместе с уже готовым файлом шрифта для библиотеки UTFT, ссылка на который находится в конце статьи.

Собственно, таким образом и формируется информация о начертании недостающих кириллических символов.

После того, как готов массив, описывающий написание каждого символа в шрифте, не забудьте скорректировать длину массива и количество символов в шрифте (см. выше).

Читайте также:  Логические элементы и таблицы истинности

Теперь надо сказать несколько слов о том, как пользоваться созданным шрифтом.

Если открыть файл DefaultFonts.c (на скриншоте ниже уже скорректированный файл с русифицированным шрифтом) в текстовом редакторе можно увидеть примерно следующее:

В строчках закодировано то, как будет выглядеть соответствующий символ (текущий символ отображается в конце строки в начале комментария, за ним указан десятичный и шестнадцатеричный код символа). 

К примеру, для символа “б” это 150 и 0x96 (см. выделение на изображении выше).

Для печати текстов с помощью библиотеки UTFT используется следующая функция:

Где String – строка, которую необходимо вывести, x и y – координаты, где необходимо вывести строку.

Теперь (для русского языка) необходимо сформировать правильную строку. 

К сожалению, написать что-то типа myGLCD.print(“Пишем по-русски”, 0, 0); не получится (для этого требуется создать полноценный шрифт в кодировке UTF-8 (именно в ней работает IDE Arduino),  но это непозволительная роскошь (из-за того, что полноценный шрифт будет занимать слишком много памяти). 

Чтобы все-таки выводить кириллические надписи, требуется немного “схитрить”. 

Поясним это на примере слова “вода”: в этом слове два символа – кириллические (“в” и “д”) и два символа – латинские (“o” и “a”). Соответственно, для вывода результирующей строки мы воспользуемся следующей конструкцией:

Мы оставили латинские символы без изменения, а вместо кириллических символов сделали указание на их шестнадцатеричный код.

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

В шрифт SmallFont добавлять эти дополнительные символы посчитал нецелесообразным (они нужны не для всех случаев, а при использовании шрифта SmallFonts – просто занимали бы драгоценную память). 

Все дополнительные символы были выделены в отдельный шрифт SmallSymbolFont и теперь, если они необходимы в вашем проекте, вы можете просто подключить этот шрифт (в дополнение к тем, что используются в скетче). 

Например, чтобы вывести символ “батарейка 75%”, нужна конструкция типа:

В примере выше мы используем десятичное представление кода необходимого символа. Тестовый скетч выводит все символы двух шрифтов, которые упоминаются в этом посте: SmallFont и SmallSymbolFont:На этом первая часть русификации библиотеки завершена. С помощью информации из данного поста и excel-файла вы можете самостоятельно скорректировать написание любых символов или создать собственные уникальные символы и пиктограммы. Следите за обновлениями, продолжение следует…

Источник: http://devicter.blogspot.com/2013/03/rusUTFT-SmallFont.html

Вывод различных данных на дисплей LCD 128×64

#include “U8glib.h”    \библиотека для работы с LCD дисплеем #include “dht11.h”     \библиотека для работы с датчиком влажности и температуры #include       \библиотека для работы с I2C интерфесом

#include “RTClib.h”    \библиотека для работы с модулем часов реального времени (RTC – Real_time_clock)

RTC_DS1307 rtc;
dht11 DHT;                                 // Объявление переменной класса dht11

int chk; #define DHT11_PIN 12                       // Датчик DHT11 подключен к цифровому пину номер 13 const int ledlight = 9; const int sensor1 = 2;

const int sensor2 = 0;

U8GLIB_ST7920_128X64_1X u8g( 13, 11, 10);  // Создаём объект u8g для работы с дисплеем, указывая номер вывода CS для аппаратной шины SPI

void setup() {

  pinMode(ledlight, OUTPUT);
  pinMode(sensor1, INPUT);

  if (! rtc.begin()) {     while (1);

  }

  if (! rtc.isrunning()) {
  }

}

void loop () {   DateTime now = rtc.now();   if (digitalRead(sensor1) == HIGH) {     digitalWrite(ledlight, HIGH);   }   else   {     digitalWrite(ledlight, LOW);   }   u8g.firstPage();                          // Всё что выводится на дисплей указывается в цикле: u8g.firstPage(); do{ … команды … }while(u8g.nextPage());   do {     u8g.setColorIndex(1);     u8g.

drawBox(0, 0, 128, 10);     u8g.setFont(u8g_font_5x8);     u8g.setColorIndex(0);     u8g.setPrintPos( 2, 8); u8g.print(now.day() / 10);     u8g.setPrintPos( 7, 8); u8g.print(now.day() % 10);     u8g.setPrintPos( 11, 8); u8g.print(“.”);     u8g.setPrintPos( 15, 8); u8g.print(now.month() / 10);     u8g.setPrintPos( 20, 8); u8g.print(now.month() % 10);     u8g.setPrintPos( 24, 8); u8g.

print(“.”);

    u8g.setPrintPos( 29, 8); u8g.print(now.year(), DEC);

    u8g.setPrintPos( 101, 8); u8g.print(now.hour() / 10);     u8g.setPrintPos( 107, 8); u8g.print(now.hour() % 10);     u8g.setPrintPos( 112, 8); u8g.print(“:”);     u8g.setPrintPos( 117, 8); u8g.print(now.minute() / 10);     u8g.setPrintPos( 122, 8); u8g.print(now.minute() % 10);     u8g.setColorIndex(1);     u8g.setFont(u8g_font_6x10);     u8g.drawStr(30, 62, “tehnopage.ru”);

    u8g.setFont(u8g_font_6x10);

    chk = DHT.read(DHT11_PIN);

    u8g.setPrintPos( 3,  20); u8g.print(“Humidity”);     u8g.setPrintPos( 53, 21); u8g.print(“=”);     u8g.setPrintPos( 60, 20); u8g.print(DHT.humidity, 1);

    u8g.setPrintPos( 73, 20); u8g.print(“%”);

    u8g.setPrintPos( 3,  31); u8g.print(“Temp”);     u8g.setPrintPos( 29, 32); u8g.print(“=”);     u8g.setPrintPos( 37, 31); u8g.print(DHT.temperature, 1);

    u8g.setPrintPos( 49, 31); u8g.print(“°C”);

    u8g.setPrintPos( 3,  42); u8g.print(“Light”);     u8g.setPrintPos( 29, 43); u8g.print(” – “);     if (digitalRead(sensor1) == HIGH) {       u8g.setPrintPos( 45, 42); u8g.print(“On”);     }     else     {       u8g.setPrintPos( 45, 42); u8g.print(“Off”);

    }

    u8g.setPrintPos( 65, 43); u8g.print(“=”);

    int val = analogRead(sensor2);     val = map(val, 0, 1023, 0, 100);     u8g.setPrintPos( 73, 42); u8g.print(val);

    u8g.setPrintPos( 86, 42); u8g.print(“%”);

  }    while (u8g.nextPage());

}

Источник: http://TehnoPage.ru/vyvod-razlichnyh-dannyh-na-lcd-displej-128×64

LCD Image Converter / Создание изображений и шрифтов для встраиваемых приложений

Создание изображений и шрифтов для встраиваемых приложений.

LCD Image Converter — небольшая C++ / JavaScript / QT графическая утилита для создания изображений и шрифтов в формате исходников “C” для встраиваемых приложений.

Краткая история (от автора приложения):

Перед началом работы следует определить тип дисплея (монохромный, оттенки серого, цветной), количество бит на пиксель и ориентацию байт в памяти дисплея.

Если нужно изображение, можно создать новое (введя название структуры данных), либо импортировать из существующего графического файла (bmp, gif, jpg, jpeg, png, pbm, pgm, ppm, tiff, xbm, xpm), изменить размер на нужный, внести необходимые изменения и сохранить файл форматов bmp, jpg, png, ppm, tiff, xbm и xpm.

LCD Image Converter предлагает изменение состояния пикселей с помощью мыши (левая кнопка для цвета 1, правая для цвета 2), поворот (на 90, 180, 270 градусов), сдвиг, инверсия цветов, просмотр в редакторе в увеличении от 1 до 50 раз и редактирование с помощью внешнего редактора (например Gimp).

LCD Image Converter позволяет создать шрифт на основе имеющегося в системе и редактировать его.

Доступно изменение размера и инверсия всех символов (либо выбранных), поддержка Юникода, шрифт может отрисовываться как моношириный, либо пропорциональный, сглаживание шрифтов может отключаться и пр…

Выбранные символы могут быть объединены в одно изображение, для выбранных символов применимы все функции редактора изображения, имеется предварительный просмотр шрифта, сохраняется шрифт в xml файле и может быть открыт позже для продолжения редактирования.

Преобразование из массива байтов в исходник “C” осуществляется с помощью подстановки данных в файл шаблона. Этот файл является простым текстовым файлом с выделенными ключевыми словами.

Можно использовать встроенные шаблоны, либо выбрать собственный файл шаблона в настройках (заданные настройки шаблона сохраняются при перезапуске).

Преобразование нового документа так же можно выполнить в режиме командной строки (без использования GUI), используя заранее подготовленные настройки.

Лицензия: GNU General Public License version 3.0 (GPLv3)

Домашняя страница

Страница на sourceforge.net

Источник: http://zenway.ru/page/lcd-image-converter

Ссылка на основную публикацию
Adblock
detector