Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Кирпичи... » Кириллица на китайских OLED дисплеях


Кириллица на китайских OLED дисплеях

Сообщений 1 страница 8 из 8

1

Не думаю, что "открою америку", но, думаю, пригодится. ;)

Пришлось поработать вот с таким дисплейчиком
http://datasheet4u.com/datasheet/W/E/H/ … r.pdf.html

Штучка симпатичная и весьма привлекательная по характеристикам.
Одна беда - не понимает кириллицу, если не вправить мозги.

Согласно ДШ в нем имеется аж 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

Вот что получилось
http://sg.uploads.ru/t/meC8p.jpg

Кстати !
Опробованные две шт. <noname> 1602A и один 2004A с китайскими крокозябрами (обычные LCD, все взяты в разное время) приятно порадовали - на одном из 1602 и на 2004 оказались страницы с кириллицей, но страниц в памяти всего 2, а не 4, как у OLED.

+4

2

Так это-же 1602?! Вот это да, а я всё 8 символов забью и придумываю слова под эти символы:
y - У
6 - Б
А остальное:

Код:
Deflcdchar 0 , 31 , 17 , 17 , 17 , 17 , 17 , 17 , 17        ' 0-П
Deflcdchar 1 , 31 , 16 , 16 , 16 , 16 , 16 , 16 , 16        ' 1-Г
Deflcdchar 2 , 21 , 21 , 21 , 14 , 14 , 21 , 21 , 21        ' 2-Ж
Deflcdchar 3 , 17 , 17 , 19 , 21 , 25 , 17 , 17 , 32        ' 3-И
Deflcdchar 4 , 6 , 10 , 10 , 10 , 10 , 10 , 31 , 17         ' 4-Д
Deflcdchar 5 , 3 , 5 , 9 , 9 , 17 , 17 , 17 , 17            ' 5-Л
Deflcdchar 6 , 16 , 16 , 16 , 30 , 17 , 17 , 17 , 30        ' 6-Ь
Deflcdchar 7 , 15 , 17 , 17 , 17 , 15 , 5 , 9 , 17          ' 7-Я

0

3

Ev3658 написал(а):

Так это-же 1602?! Вот это да, а я всё 8 символов забью и придумываю слова под эти символы

Да, дисплей 16 х 2.
Только одна фишка: после смены кодовой страницы - не использовать команды InitLcd и Cls.
Настройка слетает в дефолтную...

0

4

Nord написал(а):

Опробованные две шт. <noname> 1602A и один 2004A с китайскими крокозябрами (обычные LCD, все взяты в разное время) приятно порадовали

С китайским не сработало. 0 и 1 бит команды Function Set игнорируется.

Отредактировано Пётр (2018-04-12 16:34:02)

0

5

Пётр написал(а):

С китайским не сработало. 0 и 1 бит команды Function Set игнорируется.

У меня тоже из трех на одном не прокатило, я про это говорил. ;)

0

6

Я тестировал не с кодом из первого сообщения, а с другим, т. к. подключение через I2C. Может еще от инициализации зависит. Она немного отличается.

Отредактировано Пётр (2018-04-13 12:38:20)

0

7

Пётр написал(а):

Я тестировал не с кодом из первого сообщения, а с другим, т. к. подключение через I2C. Может еще от инициализации зависит. Она немного отличается.

А как будет вестись инициализация с I2C, если это (из #1) по сути и есть инициализация ?
Или я что-то недопонимаю ?

Случалось работать с дисплеями I2С, ничего экстремального не встретил (не с переключением страниц).

0

8

Не получилось переключить страницы. Дисплей китайский.

http://s8.uploads.ru/t/6GRPM.png

0


Вы здесь » Программирование ATMEL в BASCOM. » Кирпичи... » Кириллица на китайских OLED дисплеях