Какие настройки нужны для OLED SSD1306?
Столбцы по страницам · LSB первым Столбцы по страницам, LSB первым, включённый пиксель = 1 — если байты пишутся прямо в видеопамять дисплея.
Превращает китайский или английский текст и изображения в массивы C для SSD1306, SH1106, ST7920 и Adafruit GFX. Чёткие пиксельные шрифты 12×12 и 16×16, все четыре режима сканирования PCtoLCD2002 и декодер неизвестных массивов.
Системные шрифты — контурные со сглаживанием, поэтому меньше примерно 20 px черты рвутся или сливаются. Для 12 и 16 px используйте пиксельные шрифты выше.
Перетащите изображение сюда или щёлкните, чтобы выбрать файл
PNG, JPG, GIF, BMP, WebP или SVG — логотип, иконка или скриншот
Тёмные пиксели изображения становятся включёнными пикселями дисплея. Прозрачные области считаются фоном.
Достался массив шрифта из старого проекта или урока, и неизвестно, как он был сгенерирован? Вставьте его сюда: все направления сканирования и порядки битов будут нарисованы рядом, и читаемый вариант подскажет настройки.
Соответствует страничной памяти SSD1306 / SSD1309 / SH1106 / ST7565 и MicroPython framebuf.MONO_VLSB — байты можно писать прямо в дисплей.
Включённый пиксель = 1, глиф GNU Unifont. Сравните эти байты со своим массивом, чтобы понять, с какими настройками он сделан.
| Направление сканирования | Порядок битов | Байты (HEX) |
|---|---|---|
| Построчно (горизонтальные байты) | MSB первым — первый пиксель в бите 7 | 01 00 01 00 01 00 01 00 3F F8 21 08 21 08 21 08 21 08 21 08 3F F8 21 08 01 00 01 00 01 00 01 00 |
| Построчно (горизонтальные байты) | LSB первым — первый пиксель в бите 0 | 80 00 80 00 80 00 80 00 FC 1F 84 10 84 10 84 10 84 10 84 10 FC 1F 84 10 80 00 80 00 80 00 80 00 |
| По столбцам (вертикальные байты) | MSB первым — первый пиксель в бите 7 | 00 00 00 00 0F F0 08 20 08 20 08 20 08 20 FF FF 08 20 08 20 08 20 08 20 0F F0 00 00 00 00 00 00 |
| По столбцам (вертикальные байты) | LSB первым — первый пиксель в бите 0 | 00 00 00 00 F0 0F 10 04 10 04 10 04 10 04 FF FF 10 04 10 04 10 04 10 04 F0 0F 00 00 00 00 00 00 |
| Столбцы по страницам (вертикальные байты, порядок страниц SSD1306) | MSB первым — первый пиксель в бите 7 | 00 00 0F 08 08 08 08 FF 08 08 08 08 0F 00 00 00 00 00 F0 20 20 20 20 FF 20 20 20 20 F0 00 00 00 |
| Столбцы по страницам (вертикальные байты, порядок страниц SSD1306) | LSB первым — первый пиксель в бите 0 | 00 00 F0 10 10 10 10 FF 10 10 10 10 F0 00 00 00 00 00 0F 04 04 04 04 FF 04 04 04 04 0F 00 00 00 |
| Строки по полосам (горизонтальные байты, полосы по 8 пикселей) | MSB первым — первый пиксель в бите 7 | 01 01 01 01 3F 21 21 21 21 21 3F 21 01 01 01 01 00 00 00 00 F8 08 08 08 08 08 F8 08 00 00 00 00 |
| Строки по полосам (горизонтальные байты, полосы по 8 пикселей) | LSB первым — первый пиксель в бите 0 | 80 80 80 80 FC 84 84 84 84 84 FC 84 80 80 80 80 00 00 00 00 1F 10 10 10 10 10 1F 10 00 00 00 00 |
Пиксельные шрифты: GNU Unifont (16 px) и Fusion Pixel Font (12 px), оба под лицензией SIL Open Font License 1.1. Тексты лицензий
Создано и проверено инженерной командой Go Tools.
Столбцы по страницам · LSB первым Столбцы по страницам, LSB первым, включённый пиксель = 1 — если байты пишутся прямо в видеопамять дисплея.
Построчно · MSB первым Построчно, MSB первым, включённый пиксель = 1, каждая строка дополнена до целых байтов.
32 байта 32 байта при любом направлении сканирования. 12 × 12 — 24 байта, ASCII-символ 8 × 16 — 16 байт.
逆向 = LSB первым 顺向 = MSB первым (первый пиксель в бите 7); 逆向 = LSB первым (первый пиксель в бите 0).
У большинства графических контроллеров OLED и LCD — в том числе SSD1306, SH1106 и ST7565 — нет встроенного шрифта. Чтобы вывести символ, прошивка копирует в видеопамять небольшую сетку включённых и выключенных пикселей — по биту на пиксель, по восемь пикселей в байте. Превращение глифа в эти байты называют генерацией матрицы символа (в китайских руководствах по встраиваемым системам — 取模); именно этим много лет занимается Windows-программа PCtoLCD2002.
Но одних байтов мало. Один и тот же символ 16 × 16 можно упаковать четырьмя способами (построчно, по столбцам, столбцами по страницам, строками по полосам), и в каждом первый пиксель может оказаться в бите 7 или в бите 0. Восемь разных потоков байтов описывают один и тот же глиф, а дисплей правильно нарисует только один из них. Поэтому шрифт, скопированный из чужого урока, так часто выходит зеркальным, разрезанным пополам или повёрнутым.
// 中 (16x16), pages of columns, LSB first, lit = 1 — SSD1306 page order
const unsigned char zhong[32] = {
0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,
0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x0F,0x00,0x00,0x00
};
// First 16 bytes = page 0 (rows 0-7), one byte per column, bit 0 = top row Шрифты браузера — контурные и сглаженные: после порогового преобразования на 12 px в гарнитуре Song горизонтальные черты 中 просто исчезают. Поэтому здесь используются настоящие растровые шрифты: шрифт 16 × 16 покрывает все 6 763 иероглифа GB2312, а в шрифте 12 × 12 нет 143 редких знаков — они рисуются системным шрифтом и помечаются.
Построчно, по столбцам, столбцы по страницам и строки по полосам — каждый с MSB первым или LSB первым, включённый пиксель = 1 или 0. Названия опций взяты из PCtoLCD2002, а их смысл сверен с даташитом SSD1306 и распространёнными примерами проектов для OLED, так что можно выбрать те же настройки, что и в существующем проекте.
Выберите SSD1306, Adafruit GFX или XBM — и настройки выставятся сами. Измените любую вручную, и инструмент подскажет, какие дисплеи и библиотеки читают такой порядок байтов, — или что не читает ни одна.
Вставьте массив шрифта неизвестного происхождения — все восемь вариантов прочтения (направление сканирования × порядок битов) будут нарисованы рядом. Читаемый вариант подскажет настройки, а один щелчок их применит.
Логотипы, иконки и фотографии масштабируются под размер дисплея и переводятся в 1 бит по порогу или с dithering по Floyd–Steinberg или Atkinson. Прозрачные области считаются фоном, а порог работает в любом режиме.
Двумерные массивы в стиле C51 с комментариями /*"中",0*/, Arduino PROGMEM со смещениями, словари MicroPython bytearray, строки DB для A51 или просто HEX. Сгенерированный код на C компилируется без предупреждений с -Wall -Wextra -pedantic.
中
00 00 F0 10 10 10 10 FF 10 10 10 10 F0 00 00 00 00 00 0F 04 04 04 04 FF 04 04 04 04 0F 00 00 00
32 байта: 16 столбцов страницы 0 (строки 0–7), затем 16 столбцов страницы 1 (строки 8–15). В байте 0xFF в столбце 7 установлены все биты: вертикальная черта проходит через все восемь строк обеих страниц.
中
01 00 01 00 01 00 01 00 3F F8 21 08 21 08 21 08 21 08 21 08 3F F8 21 08 01 00 01 00 01 00 01 00
По два байта на строку, 16 строк. 0x01 0x00 — это одна центральная черта: крайний левый пиксель — бит 7 первого байта, поэтому пиксель в столбце 7 попадает в бит 0. Отправьте эти байты постраничной записью в SSD1306 — получите мусор: глиф тот же, упаковка другая.
A
00 00 00 00 18 24 24 42 42 7E 42 42 42 42 00 00
Символы ASCII — половинной ширины: 8 × 16 — это 16 байт, по одному байту на строку при построчном сканировании. Отметьте «Растянуть полуширинные символы на всю ширину ячейки», если драйвер ожидает, что каждый глиф будет 16 × 16.
中 (12 × 12, построчно, MSB первым)
00 00 04 00 04 00 FF E0 84 20 84 20 84 20 FF E0 04 00 04 00 04 00 04 00
Каждой 12-пиксельной строке нужно два байта; последние четыре бита второго байта — дополнение. 12 строк × 2 байта = 24. Все библиотеки дисплеев адресуют строку как (ширина + 7) / 8 байт, так что более плотная упаковка битов сломала бы их все.
Текст рисуется настоящим пиксельным шрифтом: 12 × 12 (Fusion Pixel) или 16 × 16 (GNU Unifont), символы ASCII — половинной ширины. Для логотипов и иконок переключитесь на вкладку «Изображение» и задайте целевой размер, например 128 × 64.
Для SSD1306 / SH1106 / ST7565 нужны вертикальные байты в порядке страниц, верхний пиксель — в бите 0. Для Adafruit GFX, TFT_eSPI, U8g2 drawBitmap и LVGL нужны горизонтальные байты, левый пиксель — в бите 7. XBM / U8g2 drawXBM — то же самое, но левый пиксель в бите 0.
Превью показывает ровно тот растр, который кодируется. Щёлкните по любому пикселю, чтобы переключить его, или сдвиньте глиф полями смещения.
Выберите C (стиль C51 из PCtoLCD2002), Arduino PROGMEM, MicroPython bytearray, ассемблер A51 или просто HEX. Первая строка вывода фиксирует направление сканирования, порядок битов и размер глифа, так что массив документирует сам себя.
Горизонтальные байты с неверным порядком битов. Для Adafruit GFX drawBitmap() нужен MSB первым; для XBM и U8g2 drawXBM() — LSB первым.
U8g2 drawXBM() получает байты с MSB первым
drawXBM() → пресет XBM (построчно, LSB первым)
Вертикальные байты с неверным порядком битов. Контроллеры семейства SSD1306 кладут D0 в верхнюю строку, поэтому им нужен LSB первым.
Столбцы по страницам, MSB первым → SSD1306
Столбцы по страницам, LSB первым → SSD1306
Перепутаны режимы «по столбцам» и «столбцы по страницам». Они дают одинаковые байты только для глифов высотой до 8 пикселей; на 16 пикселях порядок байтов различается.
По столбцам → постраничная запись в SSD1306
Столбцы по страницам → постраничная запись в SSD1306
Отражение по диагонали означает, что горизонтальные байты прочитаны как вертикальные (или наоборот). Тёмный текст на светящемся фоне — значит, выбран включённый пиксель = 0 там, где дисплей ожидает включённый пиксель = 1.
Построчные байты отправлены в страницу SSD1306
Вставьте массив на вкладку «Превью готового массива» и выберите читаемый вариант
Конвертеры
Конвертация между системами счисления — двоичной, hex, десятичной, восьмеричной и любой базой 2-36 мгновенно. Бесплатно, приватно — вся обработка в браузере.
Конвертеры
Введите знаковое целое и получите прямой, обратный, дополнительный и смещённый код сразу, от 4 до 64 бит. Или вставьте битовый паттерн либо hex-байт и увидите все пять прочтений рядом. Локально и бесплатно.
Конвертеры
Конвертация прав доступа Linux между восьмеричной записью (755, 644) и символами rwx. Готовые команды chmod и предупреждения о рискованных режимах вроде 777 — бесплатно, прямо в вашем браузере.
Конвертеры
Конвертируйте HEX в RGB, HSL, OKLCH, OKLAB и CMYK прямо в браузере — копируйте любой формат в один клик. Бесплатно, без регистрации, ваши цвета никогда не покидают страницу.
Конвертеры
Перевод координат из любого формата — десятичные градусы, градусы минуты секунды, DDM — в UTM, Web Mercator и китайские GCJ-02 (AMap) и BD-09 (Baidu). Определяет порядок lat,lng/lng,lat, пакетно выгружает CSV. Работает в браузере.
Конвертеры
Конвертируйте HEX-цвета в CMYK прямо в браузере. Наивное приближение на основе sRGB для предпросмотра печати. Бесплатно, без регистрации, ваши цвета остаются локально.