LCD 1602 Работа c ЖК дисплеем


Принципы работы самого популярного ЖК индикатора формата 2 строки по 16 символов

Дисплей на жидких кристаллах (ЖК, LCD) — это самый распространенный тип дисплея, который используется в современных цифровых устройствах, таких как MP3 плееры, часы, компьютеры, мобильные телефоны и т.д. Эти экраны очень компактны и потребляют мало энергии.

LCD 1602 Работа c ЖК дисплеем

Заказать такой дисплей в Китае недорого…

К тому же ЖК индикаторы легкодоступны и дешевы, поэтому радиолюбители очень часто используют их в своих проектах. В настоящее время производится огромное количество различных типов LCD экранов, которые отличаются друг от друга конструкцией, назначением, возможностью вывода графической информации или только текстовых символов. Наибольшее распространение среди радиолюбителей получил текстовый ЖК индикатор, позволяющий выводить 2 строки по 16 символов. Именно такой дисплей используется как стандартный модуль отображения информации в мире Arduino. В этой статье мы разберем принципы работы с ЖК-дисплеем 16X2 на базе контроллера, совместимого с  HD44780 (KS0066).

Для вывода символа дисплей использует т.н. память DDRAM (Display Data RAM), которая хранит ASCII-коды символов, которые выводятся на экран. Память содержит 80 ячеек. На ЖКИ 16X2 мы увидим лишь часть символов, которые находятся в DDRAM:

LCD 1602 Работа c ЖК дисплеем

Схема контактов ЖК-дисплея 16 × 2

LCD 1602 Работа c ЖК дисплеем
  • Контакт 1 (Земля) — это контакт GND дисплея, используемый для подключения терминала GND блока микроконтроллера или источника питания
  • Контакт 2 (VCC / Source Pin) — это вывод питания дисплея, используемый для подключения + источника питания
  • Контакт 3 (V0 / VEE / Control Pin) — этот вывод для регулировки контрастности дисплея, обычно сюда подключается вывод движка потенциометра регулировки контрастности, либо другой источник управляющего напряжения в диапазоне от 0 до 5 вольт.
  • Контакт 4 (выбор регистра / вывод управления) — этот вывод переключает регистр команд или регистр данных, и принимает значение 0 или 1 (0 = режим данных и 1 = командный режим).
  • Вывод 5 (вывод чтения / записи / управления) — это вывод выьора режима работы дисплея, чтение или запись (0 = операция записи и 1 = операция чтения).
  • Контакт 6 (контакт включения / управления) — Для работы дисплея этот контакт должен иметь высокий уровень.
  • Контакты 7-14 (выводы данных) — эти выводы используются для отправки данных на дисплей. Дисплей может использоваться в 4-проводном или 8-проводном режиме данных. В 4-проводном режиме только четыре контакта подключены к блоку микроконтроллера, (от 0 до 3), тогда как в 8-проводном режиме к блоку микроконтроллера подключены все 8 контактов, от 0 до 7.
  • Контакт 15 (контакт + ve светодиода) — этот контакт питания подсветки дисплея. Подключается к + 5В.
  • Контакт 16 (-ve контакт светодиода) — Вывод катода светодиода подсветки. Необходимо подключить к GND

Характеристики LCD16x2

  • Рабочее напряжение составляет 4,7-5,3 В.
  • Две строки, каждая из которых может содержать 16 символов.
  • Потребляемый ток около 1 мА (без подсветки).
  • Каждый символ отображается матрицей 5 × 8 пикселей.
  • Отображение цифр и букв.
  • Два режима передачи данных: 4-битный и 8-битный
  • Есть варианты с синей и зеленой подсветкой.
  • Возможность отображения нескольких пользовательских символов

Регистры LCD

ЖК-дисплей 16 × 2 имеет два регистра, регистр данных и регистр команд. Вывод RS (выбор регистра) используется для перехода от одного регистра к другому. Когда на RS установлен «0», активен регистр команд. если на RS подать «1», то подключается регистр данных.

Регистр команд

Основная функция регистра команд — хранить инструкции управления дисплеем. Таким образом, можно выполнять предопределенные задачи, такие как очистка дисплея, инициализация, установка позиции курсора и управление отображением.

Регистр данных

Основная функция регистра данных — хранить информацию, которая должна отображаться на ЖК-экране. Посылаем сюда ASCII код нужного символаи он отображается на экране. Всякий раз, когда вывод RS установлен в «0» и мы отправляем информацию на ЖК-дисплей, она передается в регистр данных, отображается на экране. 

Все команды дисплея 1602

Формат представления команды: RS RW | D7 D6 D5 D4 D3 D2 D1 D0

Clear display 
//Очистка дисплея и установка адреса DDRAM в 0
использование команды:
0 0 | 0 0 0 0 0 0 0 1 
Return home
//Установка текущего адреса DDRAM в 0 (курсор – домой) Данные DDRAM не меняются
использование команды:
0 0 | 0 0 0 0 0 0 1 0
Время выполнения 1.52 ms
Entry mode set
//Установка направления движения курсора (I/D) и смещения дисплея (S) при выводе данных
использование команды:
0 0 | 0 0 0 0 0 1 I/D S
Если:  I/D=1: адрес DDRAM увеличивается, I/D=0: адрес DDRAM уменьшается
S=1: сдвиг рабочей области дисплея по DDRAM разрешен
Время выполнения  37 µs
Display on/off contro - включение или отключение дисплея(D), включение и отключение курсора(C), режим мигания курсора(B).
использование команды:
0 0 | 0 0 0 0 1 D C B
D = 1: дисплей включен
C = 1: курсор включен
В = 1: мерцание курсора включено
Время выполнения 37 µs
Cursor or display shift
//Перемещает курсор и смещает "окно) дисплея по памяти DDRAM
использование команды:
0 0 | 0 0 0 1 S/C R/L Х Х
S/C=1 -  сдвинуть дисплей S/C=0 - переместить курсор;
R/L=1 - вправо R/L=0:  влево
X - любое значение
Время выполнения 37 µs 

Set CGRAM address
//Установка счетчика адреса CGRAM. После этого можно записывать данные в CGRAM
использование команды:
0 0 | 0 1 ACG5 ACG4 ACG3 ACG2 ACG1 ACG0
ACG: CGRAM address
Function set
//Установка интерфейса(DL), число строк(N) и шрифт символов(F)
использование команды:
0 0 | 0 0 1 DL N F Х Х
DL=1 - 8 bit интерфейс; DL=0 -  4 bits интерфейс
N=1 - 2 строки:  N=0 - 1 строка
F= 1 - 5х10 матрица; F=0 - 5х8 матрица
Время выполнения 37 µs  
Set DDRAM address
//Установка счетчика адреса DDRAM
использование команды:
0 0 | 1 ADD6  ADD5 ADD4 ADD3 ADD2 ADD1 ADD0
ADD: DDRAM address (адрес курсора)
Read busy flag & address
//Если BF=1 то контроллер ЖКИ выполняет внутреннюю операцию (занят). 
//АC6-АC0 – текущее значение адреса DDRAM
использование команды:
0 1 | BF AC6 AC5 AC4 AC3 AC2 AC1 AC0
AC: Счетчик адресов DD и CGRAM адресов

Подключаем ЖКИ 1602 к плате Arduino

На следующей принципиальной схеме показано, как подключить дисплей к  модулю Arduino . Вывод RS ЖК-дисплея подключен к выводу 12 Arduino. Вывод R/W подключен к земле. Вывод 11 Arduino подключен к выводу сигнала включения ЖК-модуля. В этом проекте ЖК-модуль и модуль Arduino взаимодействуют в 4-битным режимом. Следовательно, для обмена информацией с дисплеем используются его лини от DB4 .. DB7. Процесс очень простой, он требует меньше соединительных проводов, однако мы можем максимально использовать потенциал ЖК-модуля.

LCD 1602 Работа c ЖК дисплеем

Линии данных дисплея (DB4-DB7) подключены к контактам 5…2 Arduino. Чтобы отрегулировать контрастность дисплея, мы используем потенциометр 10K. Ток через светодиод подсветки ограничивается резистора 560 Ом. Разъем для внешнего питания предусмотрен платой для Arduino. Можно также запитать плату Arduino от USB порта компьютера. Напряжение питания +5 дисплея берем с платы Arduino.

LCD 1602 Работа c ЖК дисплеем

Для работы с дисплеем используется встроенная в среду Arduino IDE библиотека LiquidCrystal.h

Код:

// Подключаем библиотеку для работы с LCD
#include <LiquidCrystal.h>

// Инициализация библиотеки
// сообщаем библиотеке к каким контактам платы подключен дисплей
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
   // Устанавливаем число символов и строк
   lcd.begin(16, 2);
   // Выводим сообщение на дисплей
   lcd.print("hello, world!");
}

void loop() {
   //Устанавливаем курсор в позицию 0 строки 1
   lcd.setCursor(0, 1);
   // Выводим количество секунд с момента перезагрузки контроллера
   lcd.print(millis() / 1000);
}

Полная документация DataSheet здесь

Читать также: Генератор нестандартных символов для дисплея LCD1602

2 comments

  1. Clear display
    использование команды:
    0 0 | 0 0 0 0 0 0 0 1

    Return home
    использование команды:
    0 0 | 0 0 0 0 0 0 0 1

    Странно как-то разные команды, с одинаковым кодом — «0 0 | 0 0 0 0 0 0 0 1».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *