Русские символы на LCD1602А

В предыдущих статьях рассказывал о популярном модуле LCD1602A. На просторах интернета, можно найти большое количество вариантов использование, обусловлено это его дешевизной и наличию готовых библиотек. Но есть большой недостаток, данного модуля, в нем нету кириллицы (то есть не поддерживает русский язык). В этой статье расскажу как можно вывести на печать русский текст.
Общие сведения
Китайские производители модулей LCD1602A v.2.0, программируют английский алфавит в памяти модуля, включая цифры и еще кучу символом (все символы можно посмотреть в мануале). Если необходимого символа нет, можно нарисовать собственный, но не более 8 шт., то есть мы можем одновременно отобразить не более восьми собственных символов. Теперь немного подробнее, для отображения символов, модуль LCD1602A содержит 32 ячейки, каждая из этих ячеек, содержит восемь строк и пять столбцов (5х8). Наглядно можно приставить, как таблицу из 8 на 5 точек, если в любой точке таблицы мы укажем единицу, точка будет светится, если ноль нет.
Ниже продемонстрирован небольшой кусок кода, точно такой же как и в основном примере отличие только в написание.
1 2 3 4 5 6 7 8 9 10 11 |
byte smile[8] = { B00000, B00000, B01010, B01010, B00000, B10001, B01110, B00000, }; |
Подключение LCD1602А к Arduino
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► LCD-дисплей 1602A (2×16, 5V, Синий) x 1 шт.
► Интерфейсный модуль IIC, I2C, TWI для LCD x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.
Описание:
Сразу оговорюсь, данный пример позволяет немного решить проблему с написанием русского текста на LCD1602A. Подключаем Arduino UNO и LCD1602A по интерфейсу I2C с помощью проводов, SCL к выводу 5 (Arduino), SDA к выводу 4 (Arduino) и конечно же питание, открываем среду разработки и загружаем данный скетч в плату Arduino UNO
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
/* Тестирование производилось на Arduino IDE 1.6.12 Дата тестирования 08.12.2016г. */ #include <Wire.h> // Подключаем библиотеку Wire #include <LiquidCrystal_I2C.h> // Подключаем библиотеку LiquidCrystal_I2C byte bukva_B[8] = {B11110,B10000,B10000,B11110,B10001,B10001,B11110,B00000,}; // Буква "Б" byte bukva_G[8] = {B11111,B10001,B10000,B10000,B10000,B10000,B10000,B00000,}; // Буква "Г" byte bukva_D[8] = {B01111,B00101,B00101,B01001,B10001,B11111,B10001,B00000,}; // Буква "Д" byte bukva_ZH[8] = {B10101,B10101,B10101,B11111,B10101,B10101,B10101,B00000,}; // Буква "Ж" byte bukva_Z[8] = {B01110,B10001,B00001,B00010,B00001,B10001,B01110,B00000,}; // Буква "З" byte bukva_I[8] = {B10001,B10011,B10011,B10101,B11001,B11001,B10001,B00000,}; // Буква "И" byte bukva_IY[8] = {B01110,B00000,B10001,B10011,B10101,B11001,B10001,B00000,}; // Буква "Й" byte bukva_L[8] = {B00011,B00111,B00101,B00101,B01101,B01001,B11001,B00000,}; // Буква "Л" byte bukva_P[8] = {B11111,B10001,B10001,B10001,B10001,B10001,B10001,B00000,}; // Буква "П" byte bukva_Y[8] = {B10001,B10001,B10001,B01010,B00100,B01000,B10000,B00000,}; // Буква "У" byte bukva_F[8] = {B00100,B11111,B10101,B10101,B11111,B00100,B00100,B00000,}; // Буква "Ф" byte bukva_TS[8] = {B10010,B10010,B10010,B10010,B10010,B10010,B11111,B00001,}; // Буква "Ц" byte bukva_CH[8] = {B10001,B10001,B10001,B01111,B00001,B00001,B00001,B00000,}; // Буква "Ч" byte bukva_Sh[8] = {B10101,B10101,B10101,B10101,B10101,B10101,B11111,B00000,}; // Буква "Ш" byte bukva_Shch[8]= {B10101,B10101,B10101,B10101,B10101,B10101,B11111,B00001,}; // Буква "Щ" byte bukva_Mz[8] = {B10000,B10000,B10000,B11110,B10001,B10001,B11110,B00000,}; // Буква "Ь" byte bukva_IYI[8] = {B10001,B10001,B10001,B11001,B10101,B10101,B11001,B00000,}; // Буква "Ы" byte bukva_Yu[8] = {B10010,B10101,B10101,B11101,B10101,B10101,B10010,B00000,}; // Буква "Ю" byte bukva_Ya[8] = {B01111,B10001,B10001,B01111,B00101,B01001,B10001,B00000,}; // Буква "Я" LiquidCrystal_I2C lcd(0x27,16,2); // Задаем адрес и размерность дисплея. void setup() { lcd.init(); // Инициализация lcd дисплея lcd.backlight(); // Включение подсветки дисплея } void loop() { lcd.createChar(1, bukva_P); // Создаем символ под номером 1 lcd.createChar(2, bukva_I); // Создаем символ под номером 2 /* Для наглядности, вывод символом указал отдельно, можно минимизировать: lcd.print("\1P\2BET M\2P"); */ lcd.setCursor(3, 0); // Устанавливаем курсор на 1 строку ячейку 3 lcd.print("\1"); // Выводим букву "П" lcd.setCursor(4, 0); // Устанавливаем курсор на 1 строку ячейку 4 lcd.print("P"); // Выводим букву "P" lcd.setCursor(5, 0); // Устанавливаем курсор на 1 строку ячейку 5 lcd.print("\2"); // Выводим букву "И" lcd.setCursor(6, 0); // Устанавливаем курсор на 1 строку ячейку 6 lcd.print("B"); // Выводим букву "B" lcd.setCursor(7, 0); // Устанавливаем курсор на 1 строку ячейку 7 lcd.print("E"); // Выводим букву "E" lcd.setCursor(8, 0); // Устанавливаем курсор на 1 строку ячейку 8 lcd.print("T"); // Выводим букву "T" lcd.setCursor(10, 0); // Устанавливаем курсор на 1 строку ячейку 10 lcd.print("M"); // Выводим букву "М" lcd.setCursor(11, 0); // Устанавливаем курсор на 1 строку ячейку 11 lcd.print("\2"); // Выводим букву "И" lcd.setCursor(12, 0); // Устанавливаем курсор на 1 строку ячейку 12 lcd.print("P"); // Выводим букву "P" lcd.setCursor(2, 1); // Устанавливаем курсор на 2 строку ячейку 2 lcd.print ("www.rchip.ru") ; // Выводим текст } |
Скачать программу: пример 1 (в статье)
Скачать программу: пример 2 (минимизированная)
Так как есть одинаковые буквы российского и англиканского алфавита, такие как E, T, O, P, A, H, K, C, B, M, остается добавить недостающие Б, Г, Д, Ж, З, И, Й, Л, П, У, Ф, Ц, Ч, Ш, Щ, Ь, Ы, Ю, Я. Все недостающие буквы российского алфавита, уже нарисованы и доступны в скетче, в строке 37 и 38 регистрируем символы «/1» и «/2», в строке 46 мы отображаем символ за писаный как «/1». Для наглядности, вывод символом указал отдельно (в новой строке), можно минимизировать:
1 |
lcd.print("\1P\2BET M\2P");\ |
Вот принципе и все, что хотел сказать
Ссылки
Библиотека LiquidCrystal_I2C
Документация к LCD1602A
Купить на Aliexpress
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
LCD-дисплей 1602A
Купить в Самаре и области
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
LCD-дисплей 1602A
Буква «У» и буква «Я» — один и тот же код…
Спасибо за замечание, поправил.
Подскажите пожалуйста, по какой причине любой 8 собственный символ отображается цифрой символа, либо «0»
В примере работает? сначала: lcd.createChar(1, bukva_P); , затем lcd.print(«1»);
«Подскажите пожалуйста, по какой причине любой 8 собственный символ отображается цифрой символа, либо «0»»
Потому что отсчет идет от нуля. Т.е надо:
lcd.createChar(0, bukva_A); lcd.print(\0); // первый
lcd.createChar(7, bukva_Ya); lcd.print(\7); // восьмой
Здравствуйте!
В таких индикаторах есть латиница и альтернративный, так вот альтернативный часто и есть русский.
Только вот вопрос как сделать чтобы по команде lcd.print («Привет Мир!») ; выводился все же русский, а не абракодабра?
Может есть какие-то библиотеки конвертации?
Заранее Спасибо!
Добрый день,
В LCD1602A нет кодировки с кирилицей. Существуют дисплеи с уже загруженной кириллицей, например WH1602B.
При написание статьи была одна библиотека.
Здравствуйте, подскажите, возможен ли вывод многострочного текста на двухстрочный дисплей?
Если две строки, то да.
да, друг… чегой-то ты напортачил, если заменить букву ну например Щ на 13 , то сразу же кракрзябра, число двойное путает, записываешь цифрой а не числом — всё норм. или я что не пойму?
всё друг, я разобрался, это я тупил. прости , с горяча наговорил))
с буквой Л проблема, не выводится, выдает ошибку
Может я какой особо рукопопый. При компиляции примера в строке 33 выдал ‘class LiquidCrystal_I2C’ has no member named ‘init’ — В ‘классе LiquidCrystal_I2C’ нет элемента с именем ‘init’ . Как с этим бороться?
Здравствуйте, проверил все нормально работает, обновите библиотеку.