LCD 1602 русский шрифт на Ардуино

QAPASS LCD 1602 русский шрифт не поддерживает, но можно вывести кириллицу на Arduino с помощью создания собственных спецсимволов. Рассмотрим, как сделать любые символы и буквы на кириллице на LCD дисплее Ардуино. Для этого нам потребуется использовать в скетче переменную byte и функцию lcd.createChar (). Сразу отметим, что объем памяти дисплея для знаков ограничен восемью символами.
Как вывести свой символ на LCD 1602
Вывести свой символ или кириллическую букву на дисплей поможет таблица знакогенератора (CGROM). Такой вид памяти в Ардуино, как CGRAM, может хранить собственные символы, но размер памяти ограничен и может вместить лишь 8 собственных символов. Один из нестандартных символов, который пригодится для создания домашней метеостанции — знак градуса. Давайте нарисуем символ.

Для начала возьмите листок бумаги и нарисуйте на нем таблицу, где будет 5 столбцов и 8 строчек. Далее заштрихуйте в таблице клеточки (смотри фото выше), которые должны высвечиваться на дисплее. Дело в том, что каждый символ на дисплее состоит из пикселей (5 пикселей в ширину и 8 пикселей в высоту). Далее представим наш символ в виде массива данных, состоящего из восьми элементов — восьми строк.
Выводим на LCD 1602 собственный символ
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- LCD монитор 1602;
- провода «папа-мама».

| LCD 1602 i2c | Arduino Uno | Arduino Nano | Arduino Mega |
| GND | GND | GND | GND |
| VCC | 5V | 5V | 5V |
| SDA | A4 | A4 | 20 |
| SCL | A5 | A5 | 21 |
Подключение LCD дисплея по I2C производится четырьмя проводами «папка-мамка» — 2 провода данных и 2 провода питания. Если вы подключаете дисплей Ардиуно УНО, используйте следующую схему — вывод SDA подключается к порту A4, вывод SCL – к порту A5 и два провода питания — GND и 5V. Если QAPASS 1602 подключается по шине I2C к Arduino Mega, то на плате имеются соответствующие порты — SDA и SCL.
Скетч для создания символа на LCD I2C
#include «Wire.h» // библиотека для управления устройствами по I2C #include «LiquidCrystal_I2C.h» // подключаем библиотеку для LCD 1602 LiquidCrystal_I2C LCD(0x27,16,2); // присваиваем имя LCD для дисплея // создаем свой символ и присваиваем ему имя «simvol» byte simvol[8] = < 0b01100, 0b10010, 0b10010, 0b01100, 0b00000, 0b00000, 0b00000, 0b00000 >; void setup() < LCD.init(); // инициализация LCD дисплея LCD.backlight(); // включение подсветки дисплея LCD.createChar(1, simvol); LCD.setCursor(0,0); // ставим курсор на 1 символ первой строки LCD.print(char(1)); // печатаем символ на первой строке > void loop()
Пояснения к коду:
- с помощью массива byte simvol[8] = < >; мы зашифровали знак градуса, который нарисовали ранее на листочке бумаги;
- функция lcd.createChar(num, data); создает пользовательский символ для LCD, где в скобках указан num — номер символа и data — данные о массиве.
Выводим на LCD 1602 русский шрифт
QAPASS дисплей поддерживает 8 новых символов (пронумерованных от 0 до 7) размером 5 на 8 пикселей. Букву на кириллице, как и символ, можно задать массивом из восьми байт, характеризующих соответствующую строку. Можно добавить до 8 символов, поэтому используйте при выводе сочетание латинских и кириллических букв, как на примере. Загрузите скетч с надписью «Я ❤ РОБОТЕХНИКА18.РФ»
Скетч с русскими буквами на LCD I2C
#include «Wire.h» // библиотека для управления устройствами по I2C #include «LiquidCrystal_I2C.h» // подключаем библиотеку для LCD 1602 LiquidCrystal_I2C LCD(0x27,16,2); // присваиваем имя LCD для дисплея // создаем символ сердца и четырех букв на кириллице byte heart[8] = < 0b00000, 0b01010, 0b11111, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000 >; byte I[8] = < 0b01111, 0b10001, 0b10001, 0b01111, 0b00101, 0b01001, 0b10001, 0b00000 >; byte B[8] = < 0b11111, 0b10000, 0b10000, 0b11110, 0b10001, 0b10001, 0b11110, 0b00000 >; byte N[8] = < 0b10001, 0b10001, 0b10011, 0b10101, 0b11001, 0b10001, 0b10001, 0b00000 >; byte F[8] = < 0b01110, 0b10101, 0b10101, 0b10101, 0b01110, 0b00100, 0b00100, 0b00000 >; void setup() < LCD.init(); // инициализация LCD дисплея LCD.backlight(); // включение подсветки дисплея // присваиваем символам порядковый номер LCD.createChar(1, heart); LCD.createChar(2, I); LCD.createChar(3, B); LCD.createChar(4, N); LCD.createChar(5, F); LCD.setCursor(6,0); // устанавливаем курсор на 6 символ первой строки LCD.print(char(2)); LCD.print(» «); LCD.print(char(1)); LCD.setCursor(0,1); // устанавливаем курсор на начало второй строки LCD.print(«PO»); LCD.print(char(3)); LCD.print(«OTEXH»); LCD.print(char(4)); LCD.print(«KA18.P»); LCD.print(char(5)); > void loop()
Пояснения к коду:
- массивы строк в функции byte simvol[8] = < >; можно прописывать в строку;
- слово РОБОТЕХНИКА18.РФ использует набор русских и латинских букв.
Русификация LCD 1602 I2C дисплея
Перед загрузкой следующего скетча, необходимо установить библиотеку LCD_1602_RUS.h для русификации дисплея 1602 Ардуино. Архив с библиотекой можно скачать на нашем сайте на странице — Библиотеки для Ардуино. После установки библиотеки из архива загрузите в микроконтроллер небольшой пример с кодом для LCD, который значительно упростит для вас вывод кириллицы на дисплей.
Скетч с библиотекой LCD_1602_RUS.h
#include Wire.h> // библиотека для управления устройствами по I2C #include LCD_1602_RUS.h> // подключаем библиотеку LCD_1602_RUS LCD_1602_RUS LCD(0x27,16,2); // присваиваем имя LCD для дисплея void setup() < LCD.init(); // инициализация LCD дисплея LCD.backlight(); // включение подсветки дисплея LCD.setCursor(2,0); // ставим курсор на 3 символ первой строки LCD.print(«РУСИФИКАЦИЯ!»); // печатаем символ на первой строке > void loop()
Пояснения к коду:
- для стирания надписей на дисплее используйте команду LCD.clear(); .
Заключение. Мы рассмотрели различные варианты русификации дисплея 1602 Ардуино — с помощью библиотеки LCD_1602_RUS.h и создания собственных символов. При возникновении проблем с работой программы или загрузкой скетча — пишите свои вопросы в комментариях на этой странице. На все поступающие вопросы (но только те, которые относятся к данной теме) мы стараемся ответить.
Часы на Ардуино без модуля RTC на LCD 1602

Если вы используете Arduino Mega, то на этой плате порты SDA и SCL для подключения дисплея расположены на 20 и 21 пине. У платы Arduino Nano распиновка такая же, как на Uno и LCD 1602 подключается к пинам A4 (SDA) и A5 (SCL). Будильник будет пищать в течении 1 минуты, чтобы его выключить можно нажать на кнопку, подключенную к 8 порту. После сборки электрической схемы загрузите в плату следующую программу.
Скетч. Часы на LCD 16×02 без модуля RTC
#include "Wire.h" // библиотека для протокола I2C #include "LiquidCrystal_I2C.h" // библиотека для LCD 16x02 LiquidCrystal_I2C LCD(0x27, 20, 2); // присваиваем имя дисплею // переменные для отсчета времени и будильника byte SEC = 0; byte MIN = 34; byte HOUR = 12; byte MIN_A = 35; byte HOUR_A = 12; unsigned long timer; // переменные для считывания нажатия на кнопки boolean button1WasUp = true; boolean button2WasUp = true; boolean button1IsUp; boolean button2IsUp; boolean alarm = true; byte c1, c2, c3, w, i; // значок будильника byte bell [8] = < 0b11000, 0b11110, 0b01100, 0b01000, 0b00000, 0b00000, 0b00000, 0b00000, >; void setup() < pinMode(9, INPUT_PULLUP); // подключаем тактовые кнопки pinMode(8, INPUT_PULLUP); pinMode(5, OUTPUT); // подключаем пьезопищалку LCD.init(); // инициализация дисплея LCD.backlight(); // включение подсветки LCD.createChar(1, bell); timer = millis(); > void loop() < // узнаем текущее состояние кнопки button1IsUp = digitalRead(9); button2IsUp = digitalRead(8); // если кнопка 1 нажата, заходим в настройки (цикл while) if (button1WasUp && !button1IsUp) < delay(10); button1IsUp = digitalRead(9); if (!button1IsUp) < SEC = 0; w = 1; >> button1WasUp = button1IsUp; // если кнопка 2 была нажата выключаем будильник if (button2WasUp && !button2IsUp) < delay(10); button2IsUp = digitalRead(8); if (!button2IsUp) < alarm = false; >> button2WasUp = button2IsUp; // если прошло 1000 мс - прибавляем одну секунду if (millis() - timer > 1000) < timer = millis(); SEC++; // если прошло 59 секунд, прибавляем 1 минуту if (SEC > 59) < SEC = 0; MIN++; >// если прошло 59 минут, прибавляем 1 час if (MIN > 59) < MIN = 0; HOUR++; >if (HOUR > 23) < HOUR = 0; >// включение будильника в течении 1 минуты if (alarm == true && HOUR == HOUR_A && MIN == MIN_A && i < 60) < tone(5, 50); i++; > if (i >= 60) < noTone(5); alarm == false; i = 0; > if (HOUR < 10) < c1 = 5; >if (HOUR >= 10) < c1 = 4; >if (MIN < 10) < c2 = 8; >if (MIN >= 10) < c2 = 7; >if (SEC < 10) < c3 = 11; >if (SEC >= 10) < c3 = 10; >// выводим время на дисплей LCD.setCursor(4, 0); LCD.print("0"); LCD.setCursor(c1, 0); LCD.print(HOUR); LCD.print(":"); LCD.setCursor(7, 0); LCD.print("0"); LCD.setCursor(c2, 0); LCD.print(MIN); LCD.print(":"); LCD.setCursor(10, 0); LCD.print("0"); LCD.setCursor(c3, 0); LCD.print(SEC); if (alarm == true) < LCD.print(char(1)); > if (alarm == false) < LCD.print(" "); > noTone(5); > while (w == 1) < if (HOUR > 23) < HOUR = 0; >if (HOUR < 10) < c1 = 5; >if (HOUR >= 10) < c1 = 4; >if (MIN < 10) < c2 = 8; >if (MIN >= 10) < c2 = 7; >LCD.setCursor(4, 0); LCD.print("0"); LCD.setCursor(c1, 0); LCD.print(HOUR); LCD.print(":"); LCD.setCursor(7, 0); LCD.print("0"); LCD.setCursor(c2, 0); LCD.print(MIN); LCD.print(":"); LCD.setCursor(10, 0); LCD.print("00"); if (alarm == true) < LCD.print(char(1)); > if (alarm == false) < LCD.print(" "); > LCD.setCursor(2, 1); LCD.print("HOUR SETTING"); button1IsUp = digitalRead(9); button2IsUp = digitalRead(8); // если кнопка 1 была нажата, заходим во 2 цикл while if (button1WasUp && !button1IsUp) < delay(10); button1IsUp = digitalRead(9); if (!button1IsUp) < LCD.clear(); w = 2; > > button1WasUp = button1IsUp; // если кнопка 2 была нажата, прибавляем 1 час if (button2WasUp && !button2IsUp) < delay(10); button2IsUp = digitalRead(8); if (!button2IsUp) < HOUR++; >> button2WasUp = button2IsUp; > while (w == 2) < if (MIN > 59) < MIN = 0;>if (HOUR < 10) < c1 = 5; > if (HOUR >= 10) < c1 = 4; >if (MIN < 10) < c2 = 8; >if (MIN >= 10) < c2 = 7; >LCD.setCursor(4, 0); LCD.print("0"); LCD.setCursor(c1, 0); LCD.print(HOUR); LCD.print(":"); LCD.setCursor(7, 0); LCD.print("0"); LCD.setCursor(c2, 0); LCD.print(MIN); LCD.print(":"); LCD.setCursor(10, 0); LCD.print("00"); if (alarm == true) < LCD.print(char(1)); > if (alarm == false) < LCD.print(" "); > LCD.setCursor(1, 1); LCD.print("MINUTE SETTING"); button1IsUp = digitalRead(9); button2IsUp = digitalRead(8); // если кнопка 1 была нажата, заходим в 3 цикл while if (button1WasUp && !button1IsUp) < delay(10); button1IsUp = digitalRead(9); if (!button1IsUp) < LCD.clear(); w = 3; > > button1WasUp = button1IsUp; // если кнопка 2 была нажата, прибавляем 1 минуту if (button2WasUp && !button2IsUp) < delay(10); button2IsUp = digitalRead(8); if (!button2IsUp) < MIN++; >> button2WasUp = button2IsUp; > while (w == 3) < if (MIN_A > 59) < MIN_A = 0; HOUR_A++; >if (HOUR_A > 23) < HOUR_A = 0; >if (HOUR_A < 10) < c1 = 5; >if (HOUR_A >= 10) < c1 = 4; >if (MIN_A < 10) < c2 = 8; >if (MIN_A >= 10) < c2 = 7; >LCD.setCursor(4, 0); LCD.print("0"); LCD.setCursor(c1, 0); LCD.print(HOUR_A); LCD.print(":"); LCD.setCursor(7, 0); LCD.print("0"); LCD.setCursor(c2, 0); LCD.print(MIN_A); LCD.print(":"); LCD.setCursor(10, 0); LCD.print("00"); if (alarm == true) < LCD.print(char(1)); LCD.setCursor(4, 1); LCD.print("ALARM ON "); > if (alarm == false) < LCD.print(" "); LCD.setCursor(4, 1); LCD.print("ALARM OFF"); > button1IsUp = digitalRead(9); button2IsUp = digitalRead(8); // если кнопка 1 была нажата, заходим в 4 цикл while if (button1WasUp && !button1IsUp) < delay(10); button1IsUp = digitalRead(9); if (!button1IsUp) < LCD.clear(); w = 4; > > button1WasUp = button1IsUp; // если кнопка 2 была нажата, прибавляем 1 минуту if (button2WasUp && !button2IsUp) < delay(10); button2IsUp = digitalRead(8); if (!button2IsUp) < alarm = !alarm; >> button2WasUp = button2IsUp; > while (w == 4) < if (MIN_A > 59) < MIN_A = 0; HOUR_A++; >if (HOUR_A > 23) < HOUR_A = 0; >if (HOUR_A < 10) < c1 = 5; >if (HOUR_A >= 10) < c1 = 4; >if (MIN_A < 10) < c2 = 8; >if (MIN_A >= 10) < c2 = 7; >LCD.setCursor(4, 0); LCD.print("0"); LCD.setCursor(c1, 0); LCD.print(HOUR_A); LCD.print(":"); LCD.setCursor(7, 0); LCD.print("0"); LCD.setCursor(c2, 0); LCD.print(MIN_A); LCD.print(":"); LCD.setCursor(10, 0); LCD.print("00"); if (alarm == true) < LCD.print(char(1)); > if (alarm == false) < LCD.print(" "); > LCD.setCursor(1, 1); LCD.print("ALARM SET HOUR"); button1IsUp = digitalRead(9); button2IsUp = digitalRead(8); // если кнопка 1 была нажата, заходим в 5 цикл while if (button1WasUp && !button1IsUp) < delay(10); button1IsUp = digitalRead(9); if (!button1IsUp) < LCD.clear(); w = 5; > > button1WasUp = button1IsUp; // если кнопка 2 была нажата, прибавляем 1 час if (button2WasUp && !button2IsUp) < delay(10); button2IsUp = digitalRead(8); if (!button2IsUp) < HOUR_A++; >> button2WasUp = button2IsUp; > while (w == 5) < if (MIN_A > 59) < MIN_A = 0; HOUR_A++; >if (HOUR_A > 23) < HOUR_A = 0; >if (HOUR_A < 10) < c1 = 5; >if (HOUR_A >= 10) < c1 = 4; >if (MIN_A < 10) < c2 = 8; >if (MIN_A >= 10) < c2 = 7; >LCD.setCursor(4, 0); LCD.print("0"); LCD.setCursor(c1, 0); LCD.print(HOUR_A); LCD.print(":"); LCD.setCursor(7, 0); LCD.print("0"); LCD.setCursor(c2, 0); LCD.print(MIN_A); LCD.print(":"); LCD.setCursor(10, 0); LCD.print("00"); if (alarm == true) < LCD.print(char(1)); > if (alarm == false) < LCD.print(" "); > LCD.setCursor(0, 1); LCD.print("ALARM SET MINUTE"); button1IsUp = digitalRead(9); button2IsUp = digitalRead(8); // если кнопка 1 была нажата, выходим из цикла if (button1WasUp && !button1IsUp) < delay(10); button1IsUp = digitalRead(9); if (!button1IsUp) < LCD.clear(); w = 0; > > button1WasUp = button1IsUp; // если кнопка 2 была нажата, прибавляем 1 минуту if (button2WasUp && !button2IsUp) < delay(10); button2IsUp = digitalRead(8); if (!button2IsUp) < MIN_A++; >> button2WasUp = button2IsUp; > >
Пояснения к коду:
- переменные c1 и c2 отвечают за позицию курсора при выводе времени и минут на экране, в зависимости от того — двухзначное или однозначное число хранится в переменной (это сделано для удобства вывода информации);
- во время настройки часов и будильника, таймер останавливается.
Заключение. Часы без модуля RTC ds1302 будут сбрасывать время на начальные значения при отключении питания, поэтому в проект были добавлены кнопки. С помощью них можно настроить часы, без необходимости повторной загрузки скетча — получился простой проект на Ардуино для начинающих программировать. Также можно добавить датчик DHT11 или BMP180, чтобы выводить на экране температуру.
LCD Module: Connection to Arduino Board With and Without an I2C Module

The LCD module can be connected to an Arduino board in two ways:
- Direct connection from the LCD module to the Arduino board (No I2C/IIC)
- LCD Module and Arduino board connected through an I2C Module
DIRECT CONNECTION

Components needed for direct connection:
- Arduino Nano + USB connector (Although most Arduino boards can be used as well)
- LCD Module (we will be using the 1602 module – 16 characters per row, 2 rows)
- Rotary potentiometer (we will be using a 10K-ohm potentiometer)
- Lots of jumper wires (I am using 16 jumper wires)

For us to be able to connect the module to an Arduino board, we need to study first the pins of the LCD module. The image below shows the pinout of for the LCD Module (1602):

Usually, the module’s pins are labeled 1 (leftmost pin) and 16 (rightmost pin). This gives us the order of the pins from 1 – 16. To better clarify the pin labeling, please see below:

We take a look at the schematics for this experiment:

Table below explains the connections among these components:
The potentiometer has to be powered as well, so connect its VCC and GND pins to the +5V and GND pins respectively of the Arduino board of your choice (refer to the schematics for the VCC and GND pins).

Set the needed components up to the breadboard, and the setup should similarly look like the image shown below:
Connect the Arduino board to the PC via a USB connector (usually supplied with your board when you buy one). We are now ready to upload some example sketches to our Arduino board. Luckily, the Arduino IDE has a built-in ready example for our set up. The first part of the sketch explains the pin connections from the LCD module to the Arduino board, and this matches our schematics.

Open an example sketch for the LCD. In this experiment, we will use the HelloWorld sketch:

You should see something like this:

As said previously, the first part of the sketch explains the pin connection of the LCD module to the Arduino board. The next thing to do is to upload this sketch to the Arduino board. However, before that, we need to check if were have selected the right board, the and the right COM where the Arduino is connected to (for other boards, please select the right configurations as required by the board):

We are now ready to upload this example sketch. To upload this sketch, the shortcut CTRL + U can be used. Uploading sketches can also be done by going to Sketch > Upload in the menu, or click the arrow (pointing rightward), just below the menus:

After uploading the sketch, you should be seeing something like this in your LCD:
IMPORTANT: If you are not seeing anything (or maybe only white blocks) in the LCD screen, then you might want trying to adjust the contrast of the display via the potentiometer. Turn it left or right until the output can be seen in the display.
VIA THE I2C (IIC) MODULE

Components needed for direct connection:
- Arduino Nano + USB connector (Although most Arduino boards can be used as well)
- LCD Module (we will be using the 1602 module – 16 characters per row, 2 rows)
- I2C (IIC) module (If your have the I2C module already soldered to the LCD module, the better)
- Few of jumper wires (I am ONLY using 4 jumper wires!)

The schematics shows the connection between the LCD Module and the I2C module. We connect the I2C module to the Arduino board, using only 4 wires. Let’s look at the schematic below.:

Connect the VCC pin of the I2C module to 5V pin (VCC) of the Arduino board. The GND pin of the I2C module should be connected to the GND pin of the Arduino board. SDA and SCL pins of the I2C modules should be connected to A4 and A5 pins of the Arduino board respectively:

Some LCD modules already have the I2C module attached to them (soldered). This is actually better, as we don’t need a breadboard to connect the modules together. In our experiment, we will assume that the I2C module isn’t soldered to the LCD module. If the schematics above is followed correctly, the setup should be similar to what is shown below:
Now, the setup is complete. However, we still need to add the library for the I2C version of the LCD module. You can download the library from Liquid Crystal I2C Library (And Samples too!).
Since we are using an I2C module, we need to determine the address of the device. You can then Upload first the I2C Scanner to your Arduino board, open the Serial monitor (be sure you are in the correct COM port). The I2C Scanner sketch can be found in the Arduino web site: I2C Scanner.
For a detailed instruction on how to add these libraries, please visit one of my articles entitled Displaying Text to LCD via i2c Module on DIY Arduino Board.
NOTE: You need to upload first the I2C Scanner sketch to the board to determine the address of your I2C module. After you’ve determine its address, then the sample sketches for the Liquid Crystal I2C can then be uploaded, since the sample sketches requires the I2C address.

Now, open the HelloWorld sketch under LiquidCrystal_I2C examples:

Sketch is something similar as below. The text inside the blue rectangle in the sketch is the address of the I2C device, but yours might have a different one – the reason why we need to upload the I2C Scanner sketch and determine the address by opening the Serial Monitor in the Arduino IDE:

Now, upload this sketch (be sure to change the address, since this might be different as yours. Mine is 0x3F). The output should be the same as shown below:

By the way, this is how it looks like when the I2C module is already soldered to the LCD Module:
Comments are welcome, especially correction to this article. I will have them corrected once I have verified that these indeed need correction.
I hope this simple tutorial helps.
Подключение модуля LCD 1602 к Arduino
Модуль дисплея LCD 1602 — очень популярен в последнее время ввиду простоты его работы и способа подключения. Используется во множестве проектов где требуется вывод информации на дисплей. О том как подключить и настройка LCD модуля 1602 к Arduino и пойдет речь в этом посте.
При помощи модуля LCD 1602 можно без труда вывести на кран какую либо информацию — будь это текстовое сообщение, значение температуры, количество оборотов, давление и любые другие параметры.
Стоит он не дорого и не нуждается в какой либо тонкой и сложной настройке. Все что нужно для того чтобы начать с ним работать это подключить его к Arduino по схемам ниже. Подключить библиотеку для работы с ним и написать скрипт.
Один важный момент: модуль можно подключить напрямую к Arduino либо через специальный модуль i2c — этот вариант предпочтительнее, т.к. позволяет передавать данные всего по 4-м проводам.
Распиновка LCD модуля 1602

Назначение выводов дисплея 1602
| Вывод | Обозначение | Пин Arduino Uno |
|---|---|---|
| 1- земля GND; | GND | GND |
| 2-питание 5 В; | VCC | 5V |
| 3-установка контрастности монитора; | VO | GND |
| 4-команда, данные; | RS | 11 |
| 5-записывание и чтение данных; | R/W | GND |
| 6-enable; | E | 12 |
| 7- линии данных; | DB0 | — |
| 8- линии данных; | DB1 | — |
| 9- линии данных; | DB2 | — |
| 10- линии данных; | DB3 | — |
| 11- линии данных; | DB4 | 5 |
| 12- линии данных; | DB5 | 4 |
| 13- линии данных; | DB6 | 3 |
| 14- линии данных; | DB7 | 2 |
| 15- плюс подсветки; | VCC | 5V |
| 16- минус подсветки; | GND | GND |
Основные технические характеристики дисплея 1602
- наличие светодиодной подсветки;
- контроллер HD44780;
- напряжение питания 5 В;
- размер дисплея 16х2 символов;
- диапазон рабочей температуры от -20 С до +70 С;
- угол обзора 180 градусов.
Схема подключения LCD модуля 1602 к Arduino без I2C

В данной схеме мы напрямую подключаем Arduino к LCD модулю, при такой схеме подключения много проводов. Что не очень удобно. Как видно из схемы для подключения Arduino напрямую к LCD 1602 понадобится 6 проводов.
Схема подключения LCD модуля 1602 к Arduino при помощи модуля I2C

В данной схеме используется модуль I2C , при помощи которого можно значительно сократить количество проводов. Для подключения понадобится всего 4 провода, которые соединяются с модулем.
Модуль i2c для работы с LCD 1602
Этот интерфейсный модуль позволяет уменьшить количество используемых выводов контроллера, вместо 8 или 4-битного соединения, требуется только 2 вывода (SDA и SCL).
- поддержка дисплеев: LCD 16×02 / 20×04;
- дополнительно: регулировка контрастности;
- напряжение питания. 5 В;
- интерфейс: I2C;
- размеры модуля: 54 мм x 19 мм x 15 мм
Схема модуля i2c для работы с LCD 1602

Внешний вид интерфейсного модуля i2c

Для соединения на модуле расположено три группы контактов:
Первая группа:
- SCL: линия тактирования (Serial CLock)
- SDA: линия данных (Serial Dфta)
- VCC: «+» питание
- GND: «-» питание
Вторая группа:
- VSS: «-» питание
- VDD: «+» питание
- VO: Вывод управления контрастом
- RS: Выбор регистра
- RW: Чтение/запись ( режим записи при соединении с землей)
- E: Еnable (строб по спаду)
- DB0-DB3: биты интерфейса (младшие )
- DB4-DB7: биты интерфейса (старшие)
- A: «+» питания подсветки
- K: «-» питания подсветки
Третья группа: (по умолчанию установлена перемычка)
Библиотека для работы с модулем LCD 1602
Для соединения Arduino c LCD 1602 по протоколу I2C потребуются две библиотеки:
- Библиотеки Wire.h — стандартная библиотека для работы Arduino c устройствами по протоколу с I2C она уже есть в Arduino IDE;
- Библиотека LiquidCrystal.h так же есть в в Arduino IDE используется при прямом подключении Arduino к LCD 1602 (без модуля I2C) ;
- Библиотека LiquidCrystal_I2C.h которая предоставляет все необходимые функции для работы с LCD 1602. Скачать вы ее можете в конце статьи.
Примеры скетчев
- Пример с LiquidCrystal.h
- Пример с LiquidCrystal_I2C.h
- Пример с Wire.h
#include < LiquidCrystal.h >// используйте свои значения const int rs = 4, en = 5, d4 = 10, d5 = 11, d6 = 12, d7 = 13; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); void setup() < lcd.begin(16, 2); >void loop() < // устанавливаем курсор в позицию (0,0): lcd.setCursor(0, 0); // выводим цифры от 0 до 9: for (int thisChar = 0; thisChar < 10; thisChar++) < lcd.print(thisChar); delay(500); >// устанавливаем курсор в (16,1): lcd.setCursor(16, 1); // включаем автоматическую прокрутку lcd.autoscroll(); // печатаем от 0 до 9: for (int thisChar = 0; thisChar < 10; thisChar++) < lcd.print(thisChar); delay(500); >// выключаем автоматическую прокрутку lcd.noAutoscroll(); // очищаем экран для следующей итерации lcd.clear(); >
#include < Wire.h >#include < LiquidCrystal_I2C.h >// Подключение библиотеки //#include < LiquidCrystal_PCF8574.h >// Подключение альтернативной библиотеки LiquidCrystal_I2C lcd(0x27,16,2); // Указываем I2C адрес (наиболее распространенное значение), а также параметры экрана (в случае LCD 1602 - 2 строки по 16 символов в каждой //LiquidCrystal_PCF8574 lcd(0x27); // Вариант для библиотеки PCF8574 void setup() < lcd.init(); // Инициализация дисплея lcd.backlight(); // Подключение подсветки lcd.setCursor(0,0); // Установка курсора в начало первой строки lcd.print("Hello"); // Набор текста на первой строке lcd.setCursor(0,1); // Установка курсора в начало второй строки lcd.print("ArduinoMaster"); // Набор текста на второй строке >void loop()
#include < Wire.h >void setup() < Wire.begin(); Serial.begin(9600); // ответ будем просматривать через мониторинг порта. while (!Serial); Serial.println("\nI2C Scanner"); >void loop() < byte error, address; int nDevices; Serial.println("Scanning. "); nDevices = 0; // Пока не нашли ни одного устройства. Счетчик обнуляем for(address = 8; addresselse if (error==4) < Serial.print("Unknow error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); >> if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); >
Описание функций и методов библиотеки LiquidCrystal I2C:
- home() и clear() – возврат курсора в начало экрана, вторая это очистка экрана курсор после очистки переходи в начало;
- write(ch) – вывод символа на экран;
- cursor() и noCursor() – показать/скрыть курсор на экране;
- blink() и noBlink() – включение/выключение мигание курсора;
- display() и noDisplay() – подключаем/отключаем дисплей;
- scrollDisplayLeft() и scrollDisplayRight() – смещаем экран на один символ вправо/влево;
- autoscroll() и noAutoscroll() – позволяет вкл./выкл. режим автопрокрутки. В этом режиме каждый новый символ записывается в одном и том же месте, вытесняя ранее написанное на экране;
- leftToRight() и rightToLeft() – направление выводимых символов слева направо или справа налево;
- createChar(ch, bitmap) – создание символа с кодом ch (0 – 7), для создания черных и белых точек
Возможные ошибки при подключении модуля I2C
Если после того загрузили программу в arduino экран никак не реагирует и он не отображается никакого символа, попробуйте выполнить следующие шаги:
1. Попробуйте увеличить или уменьшить контрастность монитора. Часто символы просто не видны из-за режима контрастности и подсветки.
2. Если первый пункт не помогает проверьте правильность подключения контактов, подключено ли питание подсветки. Если вы использовали отдельный i2c переходник, то проверьте еще раз качество пайки контактов.
Другой причиной не рабочего экрана может стать неправильный i2c адрес, для устранения неисправности попробуйте выполнить следующие шаги:
1. Попробуйте сперва изменить в скетче адрес устройства с 0x27 0x20 или на 0x3F. У разных производителей могут быть установлены свои адреса по умолчанию.
2. Если и это не помогло, можете запустить скетч i2c сканера, который просматривает все подключенные устройства и определяет их адрес методом перебора.
3. Если экран все еще останется нерабочим, попробуйте отпаять переходник и подключить LCD обычным образом.
- Staticvoid
- 13 Июл 2020
- пока нет комментариев