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

ЖК-модули 12864 на ST7920: подключение и команды

ST7920 — контроллер монохромных ЖК-модулей 128 × 64 точки, которые продаются под названием 12864. Он умеет выводить текст встроенными шрифтами и графику, работает от 5 В и подключается по 8 или 4 линиям данных или по трём проводам последовательного интерфейса. Разбираем по даташиту Sitronix.

Обновлено Редакция GAW

ST7920 — контроллер монохромного ЖК-дисплея фирмы Sitronix со встроенными шрифтами. В нём есть видеопамять для текста (DDRAM) и для графики (GDRAM на 64 × 256 бит), знакогенератор на 8192 иероглифа 16 × 16 и 126 знаков латиницы 16 × 8, четыре своих символа 16 × 16 в CGRAM, драйверы на 32 общих и 64 сегментных вывода и удвоитель напряжения для панели. С драйверами-расширителями ST7921 он управляет панелью до 32 × 256 точек — именно так устроены популярные модули 12864 с разрешением 128 × 64. Контроллер выпускается с разными наборами шрифтов: китайскими (традиционными и упрощёнными), японскими и корейскими — у модулей встречаются разные исполнения.

Питание

Контроллер работает от напряжения от 2,7 до 5,5 В и потребляет около 450 мкА при 5 В (в режиме ожидания — до 30 мкА). Напряжение для ЖК-панели, до 7 В, делает встроенный удвоитель. Модули 12864 обычно рассчитаны на 5 В, поэтому подключаются к Arduino Uno без согласования уровней; контраст регулируют подстроечным резистором на плате модуля.

Интерфейсы

Вывод PSB выбирает интерфейс: высокий уровень — параллельный, низкий — последовательный.

РежимPSBВыводы
Параллельный, 8 бит1RS, RW, E, DB0–DB7
Параллельный, 4 бита1RS, RW, E, DB4–DB7
Последовательный0CS (вывод RS), SID (вывод RW), SCLK (вывод E)

Параллельный режим устроен как у HD44780: RS выбирает регистр команд или данных, RW — запись или чтение, E стробирует передачу, а 8- или 4-битный режим задаёт бит DL команды установки функции.

Последовательный режим

В последовательном режиме модуль только принимает данные — прочитать флаг занятости нельзя. Вывод CS здесь активен высоким уровнем; если модуль на шине один, CS по даташиту можно подтянуть к питанию, и останутся две линии: SID и SCLK. Такт SCLK формирует микроконтроллер, внутренний генератор контроллера с ним не связан.

Каждая передача начинается со стартового байта: пять единиц, бит RW (0 — запись), бит RS (0 — команда, 1 — данные) и ноль. Затем каждый байт делится на полубайты, и каждый полубайт дополняется четырьмя нулями:

1 1 1 1 1 RW RS 0 | D7 D6 D5 D4 0 0 0 0 | D3 D2 D1 D0 0 0 0 0
 стартовый байт       старший полубайт        младший полубайт

Так команда 0Ch (включить дисплей) передаётся тремя байтами: F8h 00h C0h, а символ «A» (41h) — байтами FAh 40h 10h. Между командами нужно выдерживать время выполнения: внутреннего буфера команд у ST7920 нет.

Команды

Набор команд переключается битом RE команды установки функции. Основной набор (RE = 0) почти повторяет команды HD44780:

КомандаКодВремя выполнения
Очистка дисплея01h1,6 мс
Возврат курсора02h72 мкс
Режим ввода04h–07h72 мкс
Дисплей, курсор, мигание08h–0Fh: 0Ch — дисплей включён72 мкс
Сдвиг курсора или дисплея10h–1Fh72 мкс
Установка функции30h — 8 бит, основной набор; 20h — 4 бита72 мкс
Адрес CGRAM40h–7Fh72 мкс
Адрес DDRAM80h–BFh72 мкс
Запись данныхRS = 172 мкс

Время выполнения указано для частоты генератора 540 кГц. Расширенный набор (RE = 1) включается командой 34h (8 бит) и даёт режим ожидания, вертикальную прокрутку, инверсию строк и графику: следующая за ней 36h включает графику, 34h — выключает. Команда 80h | Y, а за ней 80h | X задают адрес в GDRAM.

Текст

Знаки выводятся записью их кодов в DDRAM. Одна позиция DDRAM — 16 точек по ширине: в неё помещается один иероглиф 16 × 16 или два знака латиницы 16 × 8. Даташит задаёт адреса строк: первая — 80H–8FH, вторая — 90H–9FH и отмечает, что один ST7920 показывает две строки. Строка контроллера — это 16 позиций, то есть 256 точек, а экран модуля 128 × 64 собран из двух половин по 128 точек. Поэтому на модуле видны четыре строки по 8 позиций:

Строка модуляАдреса DDRAM
180h–87h
290h–97h
388h–8Fh — продолжение первой строки контроллера
498h–9Fh — продолжение второй

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

Графика

Графическая память GDRAM — 64 × 256 бит. Её адресуют 16-битными словами: вертикальный адрес Y (0–63), горизонтальный X (0–15), за каждый адрес — два байта данных, старший первым. После записи слова горизонтальный адрес увеличивается сам, а после 15 возвращается к нулю — вертикальный адрес при этом не меняется, его надо задавать для каждой строки заново.

Порядок записи одного слова:

  1. 34h, затем 36h — расширенный набор команд и включение графики. Даташит запрещает менять биты DL, RE и G одной командой: сначала переключают набор (RE), потом графику (G).
  2. 80h | Y — вертикальный адрес.
  3. 80h | X — горизонтальный адрес.
  4. Два байта данных: D15–D8, затем D7–D0.

Как и в тексте, в модуле 128 × 64 используется 32 строки GDRAM по 256 точек: слова X = 0–7 — верхняя половина экрана, X = 8–15 при тех же Y — нижняя. Полный кадр — 32 · 16 слов по 2 байта, 1024 байта, и при записи по последовательному интерфейсу с паузами на выполнение команд он передаётся заметно медленнее, чем у OLED-дисплеев на SSD1306. Поэтому графические библиотеки для ST7920, например U8g2, рисуют в копии экрана в памяти микроконтроллера (целиком или по частям) и затем переписывают её в GDRAM.

Частые вопросы

Как подключить 12864 на ST7920 к Arduino тремя проводами?

Вывод PSB модуля соединяют с землёй — это включает последовательный режим. Тогда RS становится выбором кристалла CS (активен высокий уровень), RW — линией данных SID, E — тактом SCLK. Если модуль на шине один, CS можно просто подтянуть к питанию и обойтись двумя линиями. В последовательном режиме модуль работает только на запись.

Почему в последовательном режиме ST7920 каждый байт передаётся тремя?

Передача начинается со стартового байта: пять единиц, бит RW, бит RS и ноль. Затем каждый байт команды или данных делится на два полубайта, и каждый дополняется четырьмя нулями: старшие четыре бита и 0000, младшие четыре бита и 0000. Так на одну команду уходит 24 такта, на несколько байтов подряд — по 16 тактов на байт после стартового.

Сколько строк текста показывает модуль 12864?

Четыре строки по 16 знаков латиницы (знакоместо 16 × 8) или по 8 иероглифов (16 × 16). Даташит пишет, что один ST7920 показывает две строки по 256 точек; в модуле 128 × 64 каждая такая строка сложена из двух половин экрана. Поэтому строки модуля начинаются с адресов 80H, 90H, 88H и 98H: третья строка — продолжение первой, четвёртая — второй.

Какое напряжение нужно модулю на ST7920?

Сам контроллер работает от 2,7 до 5,5 В, поэтому модули 12864 обычно питают от 5 В, и они напрямую подключаются к Arduino Uno. Напряжение ЖК-панели до 7 В контроллер получает встроенным удвоителем; контраст на модуле задаёт подстроечный резистор. Подсветка — светодиоды модуля, они питаются отдельно.

Источники

  1. Sitronix. ST7920 Chinese Fonts built in LCD controller/driver, V4.0, 2008-08-18 — основные возможности: питание 2,7–5,5 В, DDRAM, GDRAM 64 × 256 бит, CGROM 8192 иероглифа 16 × 16, HCGROM 126 знаков 16 × 8, 32 общих и 64 сегментных вывода, расширение до 256 сегментов драйвером ST7921; выбор интерфейса выводом PSB; последовательный режим — стартовая последовательность, RW, RS и полубайты; таблицы основных (RE = 0) и расширенных (RE = 1) команд с временем выполнения; адреса строк DDRAM 80H, 90H, A0H, B0H; запись в GDRAM
  2. Hitachi. HD44780U (LCD-II) Dot Matrix Liquid Crystal Display Controller/Driver, ADE-207-272(Z), 1999 — для сравнения: основной набор команд ST7920 повторяет команды HD44780 — очистка, возврат, режим ввода, включение дисплея, сдвиг, установка функции, адреса CGRAM и DDRAM

Нашли ошибку?