Подключить LCD1602 к Arduino (или любой другой LCD на базе микросхем HD44780) не всегда удобно, потому что используются как минимум 6 цифровых выходов. LCD I2C модули на базе микросхем PCF8574 позволяют подключить символьный дисплей к плате Arduino всего по двум сигнальным проводам (SDA и SCL).
- 1 PCF8574 — I2C модуль для LCD на базе HD44780
- 2 Установка библиотеки LiquidCrystal I2C
- 3 Описание методов библиотеки LiquidCrystal I2C
- 4 Подключение LCD1602 к Arduino
- 5 Создание собственных символов
- 6 Проблемы подключения LCD1602 к Arduino по I2C
- 7 Материалы
- 8 Купить LCD Adapter PCF8574 на AliExpress
- 9 Похожие записи
PCF8574 — I2C модуль для LCD на базе HD44780
Микросхема PCF8574/PCF8574T обеспечивает расширение портов ввода/вывода для контроллеров через интерфейс I2C и позволит легко решить проблему нехватки цифровых портов. При использовании модуля как расширитель портов ввода/вывода следует учитывать то, что вывод Р3 имеет инверсный выход с открытым коллектором.
Микросхема может использоваться для управления ЖК дисплеем под управлением контроллера HD44780, в 4-х битном режиме. Для этой цели на плате установлена микросхема PCF8574, которая является преобразователем шины I2C в параллельный 8 битный порт.
Плата модуля разведена таким образом, чтобы ее можно было сразу подключить к ЖКИ. На вход подается питание и линии I2C. На плате сразу установлены подтягивающие резисторы на линиях SCL и SDA, потенциометр для регулировки контрастности и питание самого дисплея. Джампер справа включает/отключает подсветку.
Установка библиотеки LiquidCrystal I2C
Для работы с данным модулем необходимо установить библиотеку LiquidCrystal I2C. Скачиваем, распаковываем и закидываем в папку libraries в папке Arduino. В случае, если на момент добавления библиотеки, Arduino IDE была открытой, перезагружаем среду.
Библиотеку можно установить из самой среды следующим образом:
- В Arduino IDE открываем менеджер библиотек: Скетч->Подключить библиотеку->Управлять библиотеками…
- В строке поиска вводим «LiquidCrystal I2C», находим библиотеку Фрэнка де Брабандера (Frank de Brabander), выбираем последнюю версию и кликаем Установить.
- Библиотека установлена (INSTALLED).
Описание методов библиотеки LiquidCrystal I2C
LiquidCrystal_I2C(uint8_t, uint8_t, uint8_t)
Конструктор для создания экземпляра класса, первый параметр это I2C адрес устройства, второй — число символов, третий — число строк.
LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows);
init()
Инициализация ЖК-дисплея.
void init();
backlight()
Включение подсветки дисплея.
void backlight();
setCursor(uint8_t, uint8_t)
Установка позиции курсора.
void setCursor(uint8_t, uint8_t);
clear()
Возвращает курсор в начало экрана.
void clear();
home()
Возвращает курсор в начало экрана и удаляет все, что было на экране до этого.
void home();
write(uint8_t)
Позволяет вывести одиночный символ на экран.
#if defined(ARDUINO) && ARDUINO >= 100 virtual size_t write(uint8_t); #else virtual void write(uint8_t); #endif
cursor()
Показывает курсор на экране.
void cursor();
noCursor()
Скрывает курсор на экране.
void noCursor();
blink()
Курсор мигает (если до этого было включено его отображение).
void blink();
noBlink()
Курсор не мигает (если до этого было включено его отображение).
void noBlink();
display()
Позволяет включить дисплей.
void display();
noDisplay()
Позволяет отключить дисплей.
void noDisplay();
scrollDisplayLeft()
Прокручивает экран на один знак влево.
void scrollDisplayLeft();
scrollDisplayRight()
Прокручивает экран на один знак вправо.
void scrollDisplayRight();
autoscroll()
Позволяет включить режим автопрокручивания. В этом режиме каждый новый символ записывается в одном и том же месте, вытесняя ранее написанное на экране.
void autoscroll();
noAutoscroll()
Позволяет выключить режим автопрокручивания. В этом режиме каждый новый символ записывается в одном и том же месте, вытесняя ранее написанное на экране.
void noAutoscroll();
leftToRight()
Установка направление выводимого текста — слева направо.
void leftToRight();
rightToLeft()
Установка направление выводимого текста — справа налево.
void rightToLeft();
createChar(uint8_t, uint8_t[])
Создает символ. Первый параметр — это номер (код) символа от 0 до 7, а второй — массив 8 битовых масок для создания черных и белых точек.
void createChar(uint8_t, uint8_t[]);
Подключение LCD1602 к Arduino
Модуль оборудован четырех-пиновым разъемом стандарта 2.54мм
- SCL: последовательная линия тактирования (Serial CLock)
- SDA: последовательная линия данных (Serial DAta)
- VCC: «+» питания
- GND: «-» питания
Выводы отвечающие за интерфейс I2C на платах Arduino на базе различных контроллеров разнятся
Arduino Mega | Arduino Uno/Nano/Pro Mini | LCD I2C модуль | Цвет проводов на фото |
---|---|---|---|
GND | GND | GND | Черный |
5V | 5V | VCC | Красный |
20 (SDA) | A4 | SDA | Зелёный |
21 (SCL) | A5 | SCL | Жёлтый |
Схема подключения LCD1602 к Arduino по I2C
Пример скетча
/* Добавляем необходимые библиотеки */ #include <LiquidCrystal_I2C.h> /* Устанавливаем ЖК-дисплей по адресу 0x27, 16 символов и 2 строки */ LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() { /* Инициализируем ЖК-дисплей */ lcd.init(); /* Включаем подсветку дисплея */ lcd.backlight(); /* Устанавливаем курсор на первую строку и нулевой символ. */ lcd.setCursor(0, 0); /* Выводим на экран строку */ lcd.print(" micro-pi.ru "); } void loop() { /* Устанавливаем курсор на вторую строку и 3 символ. */ lcd.setCursor(3, 1); /* Выводим на экран количество секунд с момента запуска ардуины */ lcd.print(millis() / 1000); delay(1000); }
Результат
Создание собственных символов
С выводом текста разобрались, буквы английского алфавита зашиты в память контроллера. А вот что делать если нужного символа в памяти контроллера нет? Требуемый символ можно сделать вручную. Данный способ частично, ограничение в 7 символов, поможет решить проблему вывода.
Ячейка, в рассматриваемых нами дисплеях, имеет разрешение 5х8 точек. Все, к чему сводится задача создания символа, это написать битовую маску и расставить в ней единички в местах где должны гореть точки и нолики где нет.
Пример скетча
/* Добавляем необходимые библиотеки */ #include <LiquidCrystal_I2C.h> extern uint8_t bell[8]; extern uint8_t note[8]; extern uint8_t clock[8]; extern uint8_t heart[8]; extern uint8_t duck[8]; extern uint8_t check[8]; extern uint8_t cross[8]; extern uint8_t retarrow[8]; /* Устанавливаем ЖК-дисплей по адресу 0x27, 16 символов и 2 строки */ LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() { /* Инициализируем ЖК-дисплей */ lcd.init(); /* Включаем подсветку дисплея */ lcd.backlight(); /* Добавляем символы */ lcd.createChar(0, bell); lcd.createChar(1, note); lcd.createChar(2, clock); lcd.createChar(3, heart); lcd.createChar(4, duck); lcd.createChar(5, check); lcd.createChar(6, cross); lcd.createChar(7, retarrow); /* Устанавливаем курсор на первую строку и нулевой символ. */ lcd.home(); /* Выводим на экран строку */ lcd.print("Hello world..."); } void loop() { static char i = 0; /* Устанавливаем курсор на вторую строку и 'i' символ. */ lcd.setCursor(i, 1); /* Выводим на экран символ с номером 'i' */ lcd.print(i); /* Ждём секунду */ delay(1000); if (i == 7) { /* Очищаем вторую строку после вывода всех символов */ i = 0; lcd.setCursor(0, 1); for (char j = 0; j < 16; j++) { lcd.print(' '); } } else { i++; } } /* ..O.. .OOO. .OOO. .OOO. OOOOO ..... ..O.. */ uint8_t bell[8] = { 0b00100, 0b01110, 0b01110, 0b01110, 0b11111, 0b00000, 0b00100 }; /* ...O. ...OO ...O. .OOO. OOOO. .OO.. ..... */ uint8_t note[8] = { 0b00010, 0b00011, 0b00010, 0b01110, 0b11110, 0b01100, 0b000000000 }; /* ..... .OOO. O.O.O O.OOO O...O .OOO. ..... */ uint8_t clock[8] = { 0b00000, 0b01110, 0b10101, 0b10111, 0b10001, 0b01110, 0b00000 }; /* ..... .O.O. OOOOO OOOOO .OOO. ..O.. ..... */ uint8_t heart[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000 }; /* ..... .OO.. OOO.O .OOOO .OOOO ..OO. ..... */ uint8_t duck[8] = { 0b00000, 0b01100, 0b11101, 0b01111, 0b01111, 0b00110, 0b00000 }; /* ..... ....O ...OO O.OO. OOO.. .O..O ..... */ uint8_t check[8] = { 0b00000, 0b00001, 0b00011, 0b10110, 0b11100, 0b01001, 0b00000 }; /* ..... OO.OO .OOO. ..O.. .OOO. OO.OO ..... */ uint8_t cross[8] = { 0b00000, 0b11011, 0b01110, 0b00100, 0b01110, 0b11011, 0b00000 }; /* ....O ....O ..O.O .O..O OOOOO .O..O ..O.. */ uint8_t retarrow[8] = { 0b00001, 0b00001, 0b00101, 0b01001, 0b11111, 0b01001, 0b00100 };
Результат
Проблемы подключения LCD1602 к Arduino по I2C
Если после загрузки скетча у вас не появилось никакой надписи на дисплее, попробуйте выполнить следующие действия:
- Можно регулировать контрастность индикатора потенциометром. Часто символы просто не видны из-за режима контрастности и подсветки.
- Проверьте правильность подключения контактов, подключено ли питание подсветки. Если вы использовали отдельный I2C переходник, то проверьте еще раз качество пайки контактов.
- Проверьте правильность I2C адреса. Попробуйте сперва поменять в скетче адрес устройства с 0x20 до 0x27 для PCF8574 или с 0x38 до 0x3F для PCF8574A. Если и это не помогло, можете запустить скетч I2C сканера, который просматривает все подключенные устройства и определяет их адрес методом перебора. Для изменения адресации необходимо установить джамперы в нужное положение, тем самым притянуть выводы A0, A1, A2 к положительному либо отрицательному потенциалу. На плате положения промаркированы.
-
Если экран все еще останется нерабочим, попробуйте подключить LCD обычным образом.
Материалы
datasheets PCF8574.pdf
LiquidCrystal_I2C
Добрый день.
Большой проект Color and Code версии 19. Определение элементов по цвету, коду, справочники, включая Arduino.
Есть встроенный калькулятор LCD1602 символов, генерация программной строки….
Может кому пригодится https://colorandcode.su
Автор, огромнейшее тебе спасибо за совет, ты единственный из двух миллионов, кто подсказал поиграться потенциометром для регулировки контрастности, я уже голову сломал, перепробовал миллион скетчей, но шрифт так и не отображался, как раз из за низкой контрастности шрифта не было вообще видно
металлический значок на фуражке изготовление корпоративных значков
аккаунт для рекламы https://marketplace-akkauntov-top.ru/
биржа аккаунтов магазин аккаунтов
купить аккаунт купить аккаунт
Buy Account Buy accounts
Buy accounts Account Trading
Account marketplace Website for Buying Accounts
Social media account marketplace Accounts marketplace
Profitable Account Sales Sell Account
Accounts for Sale Buy and Sell Accounts
accounts marketplace account store
sell accounts website for buying accounts
verified accounts for sale account marketplace
account trading account store
social media account marketplace account exchange
sell pre-made account account trading service
sell pre-made account account market
find accounts for sale account trading service
profitable account sales account acquisition
website for selling accounts https://accounts-buy.org
account buying service website for selling accounts
database of accounts for sale account selling platform
online account store secure account sales
account exchange service sell accounts
account sale gaming account marketplace
buy pre-made account account market
secure account sales account trading
guaranteed accounts buy and sell accounts
account exchange service https://accounts-market-soc.org/
find accounts for sale account selling platform
account acquisition account sale
sell pre-made account buy account
sell accounts account market