Рейтинг@Mail.ru
I2C адаптер и ЖК экран
I2C адаптер и ЖК экран

Как подключить LCD дисплей с I2C модулем к Arduino

В статье будем подключать к Ардуино жидкокристаллический дисплей 1602 с I2C модулем FC-113, благодаря чему подключение будет осуществляться всего по 2 проводам данных + 2 проводам питания.

Инструкция по подключению ЖК дисплея к Arduino по интерфейсу I2C

Вам понадобится

  • Arduino;
  • LCD 1602 дисплей (16 символов, 02 строки);
  • I2C адаптер FC-113;
  • соединительные провода.

1Описание I2C модуля FC-113

  • Модуль FC-113 сделан на базе микросхемы PCF8574T, которая представляет собой 8-битный сдвиговый регистр – «расширитель» входов-выходов для последовательной шины I2C. На рисунке микросхема обозначена DD1.
  • R1 – подстроечный резистор для регулировки контрастности ЖК дисплея.
  • Джампер J1 используется для включения подсветки дисплея.
  • Выводы 1…16 служат для подключения модуля к выводам LCD дисплея.
  • Контактные площадки А1…А3 нужны для изменения адреса I2C устройства. Запаивая соответствующие перемычки, можно менять адрес устройства. В таблице приведено соответствие адресов и перемычек: "0" соответствует разрыву цепи, "1" – установленной перемычке. По умолчанию все 3 перемычки разомкнуты и адрес устройства 0x27.
I2C модуль FC-113 для подключения ЖК экрана
I2C модуль FC-113 для подключения ЖК экрана

2Схема подключения ЖК дисплея к Arduinoпо протоколу I2C

Подключение модуля к Arduino осуществляется стандартно для шины I2C: вывод SDA модуля подключается к аналоговому порту A4, вывод SCL – к аналоговому порту A5 Ардуино. Питание модуля осуществляется напряжением +5 В от Arduino. Сам модуль соединяется выводами 1…16 с соответствующими выводами 1…16 на ЖК дисплее.

Схема подключения ЖК дисплея к Arduino по протоколу I2C
Схема подключения ЖК дисплея к Arduino по протоколу I2C

3Библиотека для работы по протоколу I2C

Теперь нужна библиотека для работы с LCD по интерфейсу I2C. Можно воспользоваться, например, вот этой (ссылка в строке "Download Sample code and library").

Библиотека для работы по протоколу I2C
Библиотека для работы по протоколу I2C

Скачанный архив LiquidCrystal_I2Cv1-1.rar разархивируем в папку \libraries\, которая находится в директории Arduino IDE.

Библиотека поддерживает набор стандартных функций для LCD экранов:

ФункцияНазначение
LiquidCrystal()создаёт переменную типа LiquidCrystal и принимает параметры подключения дисплея (номера выводов);
begin()инициализация LCD дисплея, задание параметров (кол-во строк и символов);
clear()очистка экрана и возврат курсора в начальную позицию;
home() возврат курсора в начальную позицию;
setCursor()установка курсора на заданную позицию;
write()выводит символ на ЖК экран;
print()выводит текст на ЖК экран;
cursor()показывает курсор, т.е. подчёркивание под местом следующего символа;
noCursor()прячет курсор;
blink()мигание курсора;
noBlink()отмена мигания;
noDisplay()выключение дисплея с сохранением всей отображаемой информации;
display()включение дисплея с сохранением всей отображаемой информации;
scrollDisplayLeft()прокрутка содержимого дисплея на 1 позицию влево;
scrollDisplayRight()прокрутка содержимого дисплея на 1 позицию вправо;
autoscroll()включение автопрокрутки;
noAutoscroll()выключение автопрокрутки;
leftToRight() задаёт направление текста слева направо;
rightToLeft()направление текста справа налево;
createChar()создаёт пользовательский символ для LCD-экрана.

4Скетч для вывода текста на LCD экран по шине I2C

Откроем образец: Файл Образцы LiquidCrystal_I2C CustomChars и немного его переделаем. Выведем сообщение, в конце которого будет находиться мигающий символ. В комментариях к коду прокомментированы все нюансы скетча.

#include <Wire.h>  // подключаем библиотеку Wire
#include <LiquidCrystal_I2C.h>  // подключаем библиотеку ЖКИ

#define printByte(args) write(args); //

uint8_t heart[8] = {0x0,0xa,0x1f,0x1f,0xe,0x4,0x0}; // битовая маска символа «сердце»

LiquidCrystal_I2C lcd(0x27, 16, 2); // Задаём адрес 0x27 для LCD дисплея 16x2

void setup() {
  lcd.init();  // инициализация ЖК дисплея
  lcd.backlight();  // включение подсветки дисплея
  lcd.createChar(3, heart);  // создаём символ «сердце» в 3 ячейке памяти
  lcd.home();  // ставим курсор в левый верхний угол, в позицию (0,0)
  
  lcd.print("Hello SolTau.ru!");  // печатаем строку текста
  lcd.setCursor(0, 1);  // перевод курсора на строку 2, символ 1
  lcd.print(" i ");  // печатаем сообщение на строке 2
  lcd.printByte(3); // печатаем символ «сердце», находящийся в 3-ей ячейке
  lcd.print(" Arduino ");
}

void loop() { // мигание последнего символа
  lcd.setCursor(13, 1);   // перевод курсора на строку 2, символ 1
  lcd.print("\t");
  delay(500);             
  lcd.setCursor(13, 1);   // перевод курсора на строку 2, символ 1
  lcd.print(" ");
  delay(500);
}

Кстати, символы, записанные командой lcd.createChar();, остаются в памяти дисплея даже после выключения питания, т.к. записываются в ПЗУ дисплея 1602.

5Создание собственных символов для ЖК дисплея

Немного подробнее рассмотрим вопрос создания собственных символов для ЖК экранов. Каждый символ на экране состоит из 35-ти точек: 5 в ширину и 7 в высоту (+1 резервная строка для подчёркивания). В строке 6 приведённого скетча мы задаём массив из 7-ми чисел: {0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0}. Преобразуем 16-ричные числа в бинарные: {00000, 01010, 11111, 11111, 01110, 00100, 00000}. Эти числа – не что иное, как битовые маски для каждой из 7-ми строк символа, где "0" обозначают светлую точку, а "1" – тёмную. Например, символ сердца, заданный в виде битовой маски, будет выглядеть на экране так, как показано на рисунке.

Создание собственного символа для LCD экрана
Создание собственного символа для LCD экрана

6Управление ЖК экраном по шине I2C

Загрузим скетч в Arduino. На экране появится заданная нами надпись с мигающим курсором в конце.

Управление ЖК экраном с помощью Arduino по шине I2C
Управление ЖК экраном с помощью Arduino по шине I2C

7Что находится «за» шиной I2C

В качестве бонуса рассмотрим временную диаграмму вывода латинских символов "A", "B" и "С" на ЖК дисплей. Эти символы имеются в ПЗУ дисплея и выводятся на экран просто передачей дисплею их адреса. Диаграмма снята с выводов RS, RW, E, D4, D5, D6 и D7 дисплея, т.е. уже после преобразователя FC-113 «I2C параллельная шина». Можно сказать, что мы погружаемся немного «глубже» в «железо».

Временная диаграмма вывода латинских символов "A", "B" и "С" на LCD дисплей 1602
Временная диаграмма вывода латинских символов "A", "B" и "С" на LCD дисплей 1602

На диаграмме видно, что символы, которые имеются в ПЗУ дисплея (см. стр.11 даташита, ссылка ниже), передаются двумя полубайтами, первый из которых определяет номер столбца таблицы, а второй – номер строки. При этом данные «защёлкиваются» по фронту сигнала на линии E (Enable), а линия RS (Register select, выбор регистра) находится в состоянии логической единицы, что означает передачу данных. Низкое состояние линии RS означает передачу инструкций, что мы и видим перед передачей каждого символа. В данном случае передаётся код инструкции возврата каретки на позицию (0, 0) ЖК дисплея, о чём также можно узнать, изучив техническое описание дисплея.

И ещё один пример. На этой временной диаграмме показан вывод символа «Сердце» на ЖК дисплей.

Временная диаграмма вывода символа «Сердце» из ПЗУ на ЖК дисплей 1602
Временная диаграмма вывода символа «Сердце» из ПЗУ на ЖК дисплей 1602

Опять, первые два импульса Enable соответствуют инструкции Home() (0000 00102) – возврат каретки на позицию (0; 0), а вторые два – вывод на ЖК дисплей хранящийся в ячейке памяти 310 (0000 00112) символ «Сердце» (инструкция lcd.createChar(3, heart); скетча).

Скачать LCD 1602 datasheet

Последнее изменениеПонедельник, 27 Ноябрь 2017 19:24
(7 голосов)
Прочитано 31223 раз
Теги :

Поделиться

Оставить комментарий

Убедитесь, что вы вводите (*) необходимую информацию, где нужно
HTML-коды запрещены