Не думаю, что "открою америку", но, думаю, пригодится. 
Пришлось поработать вот с таким дисплейчиком
https://www.chipdip.ru/product/weh001602agpp5n0000
Штучка симпатичная и весьма привлекательная по характеристикам.
Одна беда - не понимает кириллицу, если не вправить мозги.
Согласно ДШ в нем имеется аж 4 страницы набора символов (стр.24 ДШ) и на одной из них есть то, что нам надо.
Покопавшись в интернете (не скрою, сочинял не "с нуля"), сварганил переключатель для переключения этих наборов.
В строке программы, правда, требуется перекодировка...
Порты и пины можно назначать произвольно.
Dim codepage As Byte codepage = 2 ' Указатель страницы символов ' Значения для п/п формирования задержки ~14 тактов 'SPEED = 10 ' 14 для 16MHz, 10 для 8MHz, 6 для 4MHz, 5 для <4MHz ' При неустойчивом старте можно увеличить Waitms 10 busyflag: ' Ждем готовности дисплея CONFIG PORTD = OUTPUT PORTD = &B00000110 CONFIG PORTD.7 = INPUT PORTD.2 = 1 ' E - подготовка Gosub delay14 ' задержка PORTD.2 = 0 ' E - считывание флага IF PIND.7 = 1 THEN GOTO busyflag CONFIG PORTD = OUTPUT PORTD = &B00000100 'PORTD.0 = 0 ' RS - команда/данные 'PORTD.1 = 0 ' RW - чтение/запись в дисплей 'PORTD.2 = 1 ' E - подготовка/передача Gosub delay14 ' задержка PORTD = &B00100100 ' Старшая тетрада команды дисплея 'PORTD.4 = 0 'PORTD.5 = 1 ' - включаем 4-битный режим 'PORTD.6 = 0 'PORTD.7 = 0 PORTD.2 = 0 ' E - передача в дисплей Gosub delay14 ' задержка PORTD.2 = 1 ' E - подготовка Gosub delay14 PORTD = &B00100100 ' Повтор старшей тетрады команды дисплея PORTD.2 = 0 Gosub delay14 PORTD.2 = 1 Gosub delay14 PORTD = &B10000100 ' Младшая тетрада команды дисплея 'PORTD.4 = 0 ' - биты выбора 'PORTD.5 = 0 ' страницы символов 'PORTD.6 = 0 ' - размер символов 5х8 'PORTD.7 = 1 ' - включаем двухстрочный режим Select Case codepage Case 0: Gosub page0 ' ENGLISH_JAPANESE codepage Case 1: Gosub page1 ' WESTERN EUROPEAN codepage 1 Case 2: Gosub page2 ' ENGLISH_RUSSIAN codepage Case 3: Gosub page3 ' WESTERN EUROPEAN codepage 2 End Select PORTD.2 = 0 Gosub delay14 PORTD.2 = 1 Gosub delay14 PORTD = &B00000100 ' Старшая тетрада команды очистки экрана PORTD.2 = 0 Gosub delay14 PORTD.2 = 1 Gosub delay14 PORTD = &B00010100 ' Младшая тетрада команды очистки экрана PORTD.2 = 0 Waitms 10 ' ================================================================== ' Дальше можно работать с дисплеем обычными методами. ' Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = PortD.4 , Db5 = PortD.5 , Db6 = PortD.6 , Db7 = PortD.7 , E = PortD.2 , Rs = PortD.0 ',Rw = PortD.1 Locate 1, 1 Lcd "Page "; codepage Locate 2, 1 Lcd "Kёpё»»ёеa" End ' ================================================================== delay14: ' п/п задержки LDI R18, 14 ' в регистр R18 значение SPEED delay14loop: DEC R18 ' уменьшение на 1 содержимого R18 BRNE delay14loop ' переход, пока флаг Z не будет равен 0 ret ' выход из п/п задержки после выполнения ~14 тактов page0: PORTD.4 = 0 PORTD.5 = 0 Return page1: PORTD.4 = 1 PORTD.5 = 0 Return page2: PORTD.4 = 0 PORTD.5 = 1 Return page3: PORTD.4 = 1 PORTD.5 = 1 Return
Кстати !
Опробованные две шт. <noname> 1602A и один 2004A с китайскими крокозябрами (обычные LCD, все взяты в разное время) приятно порадовали - на одном из 1602 и на 2004 оказались страницы с кириллицей, но страниц в памяти всего 2, а не 4, как у OLED.

