Не важно каким способом подключен LCD к Ардуинке, по тихоходному I2C, по четырехбитному или быстрому восьмибитному методами, правило вывода знаков на LCD идентично.
Способы подключения здесь рассматривать не будем, они уже рассматривались. Ссылки в конце статьи. Рассмотрим только вывод кириллицы и стирание отдельных символов на LCD.
Существуют библиотеки, которые позволяют выводить строки на русском языке. В этих библиотеках заложена функция замены русских букв на их корректные коды. Но при таком подходе есть существенный минус. Во первых русифицированная библиотека не всегда корректно работает, особенно с 2004, во вторых, вкратце, требуются большие ресурсы памяти ардуинки.
Будем выводить, например по I2C на LCD 2004 с использованием стандартной библиотеки LiquidCrystal_I2C (LiquidCrystal), а русскую строку просто изначально зададим в кодах, которые "зашиты" в память дисплея.
Гуглим даташит(DataSheet, документация) к данному (или Вашему) дисплею. В нем есть таблицы символов, обычно две.
Вторая страница почти идентична первой
Одновременно с разных страниц код знака взять не получится, нужно переключаться специальной командой. Об этом чуть ниже. Давайте к практике.
Изменим информацию не очищая дисплей
Получаем КрАкоЗяболУ
Когда мы меняем символ на знакоместе он переписывается, а все остальные будут "висеть " в памяти дисплея. Поэтому мы получили "РАРАБОТАЕМОВ" и число 365, вернее вывели 36, а 5 осталось от предыдущего вывода. 125 просто сотрем пустыми символом, а строку " К РАБОТЕ ГОТОВ" "опустошим" с помощью цикла пустых символов и запишем в чистую строку "РАБОТАЕМ"
Мы ни разу не затронули символы "A =". Конечно в данном случае практического эффекта мало, только учебный. Но на практике бывает так, что весь дисплей "перетирать" не хочется.
Достоинства вывода символов шестнадцатеричным или восьмеричным методами экономия ресурсов памяти ардуинки.
Недостатки: Неудобно. Во вторых, не во всех китайских LCD "зашита" кириллица. В таком дисплее придется рисовать символ.
Теперь пришла пора ответить на вопрос. Можно ли вывести на экран символ, которого нет в памяти дисплея? ДА, хоть и не очень просто. Для этого сперва нужно понять устройство знакоместа, состоящего из точек в количестве 5х8.
Давайте УЛЫБНЕМСЯ
Создадим массив нашей рожицы и будем выводить где считаем нужным
Если сильно постараться, то можно сваять анимацию, например огня или бегущего коня...
На последок разместим здесь набор кодировок русских печатных букв, взятого из открытых источников. Это поможет вам сэкономить время для работы с нерусифицированным дисплеем.
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,}; // Буква "Я"
Удачи
Работа с LCD по I2C ТУТ
Работа c LCD по четырех и восьми битных подключениях без библтотеки ТУТ