суббота, 13 апреля 2013 г.

Команды инициализации и управления LCD 1602

Для инициализации дисплея, а также для вывода символов необходимо подать соответствующие команды на его входы. В большинстве случаев будет требоваться только ввод информации в дисплей, поэтому вывод R/W лучше сразу подключить к GND.
Данные, передаваемые на дисплей делятся на два типа:
  • RS = 0 - команды управления
  • RS = 1 - код символа ASCII
Существует несколько команд управления:
  • Очистка дисплея:
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-битного интерфейса, код символа передается также за два такта. Сначала старшие четыре бита, затем младшие.

6 комментариев:

  1. Понятно, что мертвого ворошу, но все же - "вывод R/W лучше сразу подключить" к GND.

    ОтветитьУдалить
  2. Привожу последовательность, полученную в результате сеанса бэкинженеринга, логическим анализатором SALEAE. Очень стабильно работает с любыми 1602 lcd.
    (33h,32h,28h,0ch,01h,06h,80h)

    ОтветитьУдалить
  3. Не понимаю, откуда вытекает привязка адреса курсора и ADDR6 - ADDR0, т.е. какая комбинация за позицию в каком углу (например) отвечает? Например, я хочу поставить курсор в левый нижний угол, какую команду мне написать? 1*******

    ОтветитьУдалить
  4. Этот комментарий был удален автором.

    ОтветитьУдалить
  5. В даташите на дисплей есть таблица адресов курсора. Верхняя строка: 10******, нижняя строка 11******.

    ОтветитьУдалить