Тема касается отображения кириллицы на дисплеях МЭЛТ МТ–16S2H (Почему именно этот дисплей -- потому что был в комплекте "Матрешка Z"). При использовании библиотеки LiquidCrystal из "комплекта" Arduino IDE с отображением кириллицы есть некоторые проблемы -- если в программе задать строку типа "абвгд", то дисплей отобразит "кракозябры". Первое время это как-то не доставляло проблем, но вот сошлись звёзды: 1. понадобилось подключать дисплей и при этом задействовать минимум пинов Arduino; 2. надоело копаться в таблице символов из документации на дисплей МЭЛТ, что бы заставить отображать кириллицу. Результат -- первая версия библиотеки LiquidCrystal3WI (хотя до библиотеки ещё наврно не доросла). Что касается первого пункта, DrProg уже создавал тему, в которой описывалось как подключить дисплей с использованием сдвигового регистра 74HC595 через интерфейс SPI. Но то-ли руки кривые, то-ли луна не в той фазе была, но как-то не задалось. Но сама идея использовать сдвиговый регистр оказалось интересной. Итак несколько слов о LiquidCrystal3WI. 3WI -- 3 Wire Interface -- трёх проводной интерфейс. Так же используется сдвиговый регистр 74HC595, но нет привязки к определённым пинам Arduino, т.е. можно использовать 3 любых пина, которые, грубо говоря, поддерживают 'digitalWrite'. Для Arduino UNO -- это любые сигнальные пины. По-умолчанию используется вторая кодовая таблица дисплея, которая соответствует кодировке CP-1251. Есть поддержка кодировки UTF-8 (только кириллица). Несколько слов о применении: 1. необходимо знать в какой кодировке кириллические символы сохраняются в бинарнике. Скорее всего кодировка совпадает с кодировкой исходных файлов (*.c, *.cpp). Для случая OC Linux Ubuntu, Arduino IDE версии 1.6.5 по-умолчанию используется кодировка UTF-8. В ОС Windows по-умолчанию может использоваться кодировка CP-1251; 2. если кодировка CP-1251, то никаких особенностей нет; 3. если используется UTF-8, то для вывода строки нужно использовать функцию printUTF8; 4. добавлена функция включения/выключения подсветки дисплея -- setBacklight(bool) -- параметр true/false -- включить/выключить. Порядок подключения. Сдвиговый регистр к Arduino подключается стандартным способом. Дисплей подключается следующим образом: выводы дисплея 11 .. 14 (DB4 .. DB7) -> выводы регистра 1 .. 4 (Q1 .. Q4); вывод дисплея 6 (E) -> вывод регистра 7 (Q7); вывод дисплея 4 (RS) -> вывод регистра 5 (Q5). управление подсветкой дисплея осуществляется с помощью вывода регистра 15 (Q0) -- при вызове фунции setBacklight(true) на выходе Q0 устанавливается высокий уровень, при вызове setBacklight(false) -- низкий. Далее все зависит от типа ключа, который управляет непосредственно подсветкой. остальные выводы дисплея подключаются стандартным способом. PS: Данная библиотека -- переработка библиотеки LiquidCrystal из комплекта среды Arduino IDE. Досконально в этой библиотеке не разбирался, т.е. сделал copy/paste и заменил участки кода отвечающие за отправку данных на дисплей. Поэтому, если вдруг какие функции не будут работать, сильно не пинайте -- по возможности буду исправлять.
Проверочный скетч: Код (C++): #include <LiquidCrystal3WI.h> // 8 пин Arduino ---> DataPin - 14 (DS) вывод регистра // 9 пин ---> ClockPin - 11 (SH_CP) вывод регистра // 10 пин ---> LatchPin - 12 (ST_CP) вывод регистра LiquidCrystal3WI lcd(8, 9, 10); void setup() { lcd.begin(16, 2); const char *STR = "Привет МИР!"; lcd.setCursor(0, 0); lcd.printUTF8(STR); const char *str = "Матрёшка Z"; lcd.setCursor(0, 1); lcd.printUTF8(str); } bool bl = true; void loop() { // мигаем подсветкой дисплея lcd.setBacklight(bl); delay(1000); bl = !bl; } и прикрепил схему подключения (Fritzing). Правда пришлось расширение файла поменять с 'fzz' на 'zip' -- не разрешалось добавить файл.
Т.к. на этом форуме некоторые пользователи используют Arduino IDE, привожу короткую инструкцию по установке библиотеки в среду: 1. качаем zip-архив и запоминаем куда скачали; 2. в Arduino IDE запускаем мастер добавления библиотеки: 3. после установки проверяем, что библиотека доступна:
есть предложение изменить функцию включения подсветки на "умную" - если она подключена через пин, поддерживающий ШИМ, то можно будет регулировать ее яркость. Cинтаксис: setBacklight(value); при этом "0" или "false" будет по-прежнему ее отключать. Далее простым ветвлением смотрим используемую плату и, если пин поддерживает PWM, то регулируем яркость, если не поддерживает, то тупо включаем как digitalWrite(pin, HIGH);
Дело в том, что данная библиотека не предполагает прямого подключения дисплея к Arduino. Посредником используется сдвиговый регистр. Реализовать ШИМ на выводе сдвигового регистра теоретически можно, но боюсь это "съест" все ресурсы контроллера Arduino.
Предлагаю ознакомится с проектом https://github.com/mk90/LiquidCrystalRus В нем русифицирован вывод на LCD дисплей в виде готовой библиотеки