ЖК-модули 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 бит | 1 | RS, RW, E, DB0–DB7 |
| Параллельный, 4 бита | 1 | RS, RW, E, DB4–DB7 |
| Последовательный | 0 | CS (вывод 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:
| Команда | Код | Время выполнения |
|---|---|---|
| Очистка дисплея | 01h | 1,6 мс |
| Возврат курсора | 02h | 72 мкс |
| Режим ввода | 04h–07h | 72 мкс |
| Дисплей, курсор, мигание | 08h–0Fh: 0Ch — дисплей включён | 72 мкс |
| Сдвиг курсора или дисплея | 10h–1Fh | 72 мкс |
| Установка функции | 30h — 8 бит, основной набор; 20h — 4 бита | 72 мкс |
| Адрес CGRAM | 40h–7Fh | 72 мкс |
| Адрес DDRAM | 80h–BFh | 72 мкс |
| Запись данных | RS = 1 | 72 мкс |
Время выполнения указано для частоты генератора 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 |
|---|---|
| 1 | 80h–87h |
| 2 | 90h–97h |
| 3 | 88h–8Fh — продолжение первой строки контроллера |
| 4 | 98h–9Fh — продолжение второй |
Например, чтобы написать текст с начала третьей строки, отправляют команду 88h, а затем коды знаков.
Графика
Графическая память GDRAM — 64 × 256 бит. Её адресуют 16-битными словами: вертикальный адрес Y (0–63), горизонтальный X (0–15), за каждый адрес — два байта данных, старший первым. После записи слова горизонтальный адрес увеличивается сам, а после 15 возвращается к нулю — вертикальный адрес при этом не меняется, его надо задавать для каждой строки заново.
Порядок записи одного слова:
34h, затем36h— расширенный набор команд и включение графики. Даташит запрещает менять биты DL, RE и G одной командой: сначала переключают набор (RE), потом графику (G).80h | Y— вертикальный адрес.80h | X— горизонтальный адрес.- Два байта данных: 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 В контроллер получает встроенным удвоителем; контраст на модуле задаёт подстроечный резистор. Подсветка — светодиоды модуля, они питаются отдельно.
Источники
- 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
- Hitachi. HD44780U (LCD-II) Dot Matrix Liquid Crystal Display Controller/Driver, ADE-207-272(Z), 1999 — для сравнения: основной набор команд ST7920 повторяет команды HD44780 — очистка, возврат, режим ввода, включение дисплея, сдвиг, установка функции, адреса CGRAM и DDRAM
Нашли ошибку?
Смотрите также
- ЖК-дисплеиHD44780, KS0108, ST7920, TFT и OLED: типы модулей и выбор
- HD44780 и LCD 1602Распиновка 1602, команды, инициализация, I²C, кириллица, CGRAM
- OLED на SSD1306Питание, I²C и SPI, адрес, память по страницам, команды, инициализация
- SPISCLK, MOSI, MISO, CS, режимы 0–3, daisy chain, частота, SPI в AVR