Для инициализации дисплея, а также для вывода символов необходимо подать соответствующие команды на его входы. В большинстве случаев будет требоваться только ввод информации в дисплей, поэтому вывод R/W лучше сразу подключить к GND.
ADDR6 - ADDR0 - адрес символа на дисплее, куда следует установить курсор.
Данные, передаваемые на дисплей делятся на два типа:
- Очистка дисплея:
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
Все символы стираются и адрес вводимого символа устанавливается в 0x00.
- Возврат назад:
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
-
|
Адрес вводимого символа устанавливается в 0x00, при этом все символы на дисплее остаются неизменными.
- Режимы сдвига:
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
0
|
0
|
0
|
0
|
0
|
1
|
I/D
|
S
|
I/D - установка направления движения курсора после ввода символа. (1 - влево, 0 - вправо)
S - сдвиг курсора сопровождается сдвигом символов.
- Управление дисплеем:
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
0
|
0
|
0
|
0
|
1
|
D
|
C
|
B
|
D - включение дисплея (1 - включен, 0 - выключен)
С - видимость курсора (1 - видим, 0 - скрыт)
B - мигание курсора (1 - мигает, 0 - отображается постоянно).
- Сдвиг курсора и символов:
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
0
|
0
|
0
|
1
|
S/C
|
R/L
|
-
|
-
|
S/C - выбор сдвигаемого параметра (1 - символы дна дисплее, 0 - курсор)
R/L - направление сдвига (1-вправо, 0 - влево).
- Режим работы:
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
0
|
0
|
1
|
DL
|
N
|
F
|
-
|
-
|
DL - длина блока данных (1 - 8 бит, 0 - 4 бита)
N - количество строк отображаемых данных (1 - две, 0 -одна)
F - тип выводимых символов (1 - 5*10 точек, 0 - 5*8 точек)
- Установка курсора:
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
1
|
ADDR6
|
ADDR5
|
ADDR4
|
ADDR3
|
ADDR2
|
ADDR1
|
ADDR0
|
ADDR6 - ADDR0 - адрес символа на дисплее, куда следует установить курсор.
После установки кода команды, на вывод E подается короткий строб записи. Все команды выполняются примерно около 40 микросекунд.
Алгоритм инициализации дисплея при ширине шины данных 8 бит:
- ждем не менее 15 мс
- D7-D0 = 0x30
- ждем не менее 4.1 мс
- D7-D0 = 0x30
- ждем не менее 100 мкс
- D7-D0 = 0x30
- D7-D0 = 0x38
- D7-D0 = команда управления дисплеем (включение, отображение курсора)
- D7-D0 = очистка дисплея
- ввод пользовательских команд и символов
Алгоритм инициализации дисплея при ширине шины данных 4 бита:
Команды управления, за исключением команд инициализации, вводятся последовательно, сначала биты D7-D4, а затем D3-D0.
- ждем не менее 15 мс
- D7-D4 = 0x3
- ждем не менее 4.1 мс
- D7-D4 = 0x3
- ждем не менее 100 мкс
- D7-D4 = 0x3
- D7-D4 = 0x2
- D7-D4 = 0x8
- D7-D4 = команда управления дисплеем (включение, отображение курсора) (за два такта)
- D7-D0 = очистка дисплея (за два такта)
- ввод пользовательских команд и символов (за два такта)
Вывод символа на дисплей осуществляется точно также как и ввод команд, только вывод RS необходимо установить в 1. После вывода символа происходит автоматический сдвиг дисплея в указанном направлении и драйвер дисплея готов к выводу следующего символа.
Для 4-битного интерфейса, код символа передается также за два такта. Сначала старшие четыре бита, затем младшие.
Понятно, что мертвого ворошу, но все же - "вывод R/W лучше сразу подключить" к GND.
ОтветитьУдалитьСпасибо, исправил.
УдалитьПривожу последовательность, полученную в результате сеанса бэкинженеринга, логическим анализатором SALEAE. Очень стабильно работает с любыми 1602 lcd.
ОтветитьУдалить(33h,32h,28h,0ch,01h,06h,80h)
Не понимаю, откуда вытекает привязка адреса курсора и ADDR6 - ADDR0, т.е. какая комбинация за позицию в каком углу (например) отвечает? Например, я хочу поставить курсор в левый нижний угол, какую команду мне написать? 1*******
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьВ даташите на дисплей есть таблица адресов курсора. Верхняя строка: 10******, нижняя строка 11******.
ОтветитьУдалить