Как подключить LCD дисплей 1602A к Arduino по I2C интерфейсу. Какие преимущества дает I2C подключение по сравнению с параллельным. Как настроить и запрограммировать вывод текста на LCD 1602A через I2C. Какие библиотеки использовать для работы с дисплеем по I2C.
Что такое LCD дисплей 1602A и его особенности
LCD дисплей 1602A — это популярный символьный жидкокристаллический дисплей, способный отображать 2 строки по 16 символов. Основные характеристики дисплея:
- Размер экрана: 16 символов x 2 строки
- Размер символа: 5×8 пикселей
- Напряжение питания: 5В
- Контроллер: HD44780 или совместимый
- Подсветка: LED (обычно синяя или зеленая)
- Интерфейс: параллельный 4/8 бит или I2C (через адаптер)
Дисплей 1602A широко используется в любительских проектах на Arduino и других микроконтроллерах для вывода текстовой информации. Он прост в подключении и программировании.
Преимущества подключения LCD 1602A по I2C интерфейсу
Хотя LCD 1602A изначально имеет параллельный интерфейс, его можно подключить через I2C адаптер. Это дает ряд преимуществ:
- Уменьшение количества проводов для подключения (всего 4 вместо 6-12)
- Освобождение пинов микроконтроллера для других задач
- Возможность подключения нескольких устройств на одну шину I2C
- Упрощение программирования за счет использования готовых библиотек
- Увеличение расстояния подключения дисплея (до нескольких метров)
При этом скорость работы дисплея по I2C практически не отличается от параллельного подключения для большинства задач.
Схема подключения LCD 1602A к Arduino по I2C
Для подключения LCD 1602A по I2C потребуется специальный I2C адаптер. Схема подключения выглядит следующим образом:
- VCC адаптера — к 5V Arduino
- GND адаптера — к GND Arduino
- SDA адаптера — к пину A4 (SDA) Arduino
- SCL адаптера — к пину A5 (SCL) Arduino
Сам LCD дисплей подключается к адаптеру через стандартный 16-пиновый разъем. Питание подсветки дисплея также идет через адаптер.
Настройка I2C адреса дисплея
I2C адаптер LCD 1602A обычно имеет адрес 0x27 или 0x3F. Его можно определить с помощью специального скетча для сканирования I2C устройств:
#include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); Serial.println("I2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address < 16) Serial.print("0"); Serial.print(address, HEX); Serial.println(" !"); nDevices++; } else if (error == 4) { Serial.print("Unknown 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); }
Этот скетч просканирует все возможные I2C адреса и выведет в монитор порта найденные устройства. Так можно узнать адрес конкретного LCD адаптера.
Библиотеки для работы с LCD 1602A по I2C
Для упрощения работы с LCD дисплеем по I2C рекомендуется использовать специализированные библиотеки. Наиболее популярные:
- LiquidCrystal_I2C - базовая библиотека с основными функциями
- NewLiquidCrystal_I2C - расширенная версия с дополнительными возможностями
- hd44780 - универсальная библиотека для разных LCD дисплеев
Рассмотрим использование библиотеки LiquidCrystal_I2C как наиболее простой и распространенной.
Базовый скетч для вывода текста на LCD 1602A по I2C
Вот пример простого скетча для вывода текста на дисплей по I2C:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Указываем I2C адрес (наиболее распространенное значение), а также параметры экрана (в случае LCD 1602 - 16 символов и 2 строки).
void setup()
{
lcd.init(); // Инициализация дисплея
lcd.backlight(); // Включаем подсветку дисплея
lcd.setCursor(0, 0); // Устанавливаем курсор в начало первой строки
lcd.print("Hello, World!"); // Выводим текст на первую строку
lcd.setCursor(0, 1); // Устанавливаем курсор в начало второй строки
lcd.print("I2C LCD 1602A"); // Выводим текст на вторую строку
}
void loop()
{
// Ничего не делаем в цикле
}
Этот скетч инициализирует дисплей, включает подсветку и выводит приветственное сообщение на две строки. Обратите внимание на указание I2C адреса при создании объекта lcd.
Дополнительные функции для работы с LCD 1602A
Библиотека LiquidCrystal_I2C предоставляет ряд полезных функций для работы с дисплеем:
lcd.clear()
- очистка экранаlcd.noBacklight()
иlcd.backlight()
- выключение и включение подсветкиlcd.setCursor(column, row)
- установка позиции курсораlcd.print(text)
- вывод текста в текущей позицииlcd.createChar(num, data)
- создание пользовательского символа
Пример использования некоторых из этих функций:
void loop() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperature:");
lcd.setCursor(0, 1);
lcd.print(getTemperature());
lcd.print(" C");
delay(2000);
lcd.noBacklight();
delay(1000);
lcd.backlight();
delay(2000);
}
Этот код периодически обновляет информацию на экране и мигает подсветкой.
Создание пользовательских символов на LCD 1602A
LCD 1602A позволяет создавать до 8 пользовательских символов размером 5x8 пикселей. Вот пример создания и использования такого символа:
byte heart[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000
};
void setup() {
lcd.init();
lcd.backlight();
lcd.createChar(0, heart);
lcd.setCursor(0, 0);
lcd.print("Custom symbol:");
lcd.setCursor(0, 1);
lcd.write(0); // Выводим созданный символ
}
Этот код создает символ сердечка и выводит его на экран.
Типичные проблемы при работе с LCD 1602A по I2C
При подключении и программировании LCD 1602A по I2C могут возникнуть следующие проблемы:
- Неправильный I2C адрес - убедитесь, что вы используете корректный адрес для вашего адаптера
- Отсутствие подтягивающих резисторов на линиях SDA и SCL - они обычно уже встроены в Arduino, но иногда требуются дополнительные
- Конфликт с другими I2C устройствами - проверьте, не используют ли другие устройства тот же адрес
- Некорректная работа подсветки - возможно, требуется дополнительное управление подсветкой через транзистор
Большинство этих проблем решается проверкой подключения и корректной настройкой параметров в скетче.
Заключение
Подключение LCD дисплея 1602A по I2C интерфейсу значительно упрощает его использование в проектах на базе Arduino. Это позволяет экономить пины микроконтроллера и упрощает монтаж. С помощью готовых библиотек легко реализовать вывод текста, создание пользовательских символов и другие функции дисплея.
При правильном подключении и настройке LCD 1602A по I2C становится удобным инструментом для отображения информации в различных проектах - от простых метеостанций до сложных систем управления.
инструкция по подключению и примеры использования [Амперка / Вики]
Текстовый экран 16×2 пригодится для вывода показаний датчиков, отображения простых меню, подсказок и приветствий.
Видеообзор
Примеры работы для Arduino
В качестве примера подключим дисплей к управляющей плате Arduino Uno.
Подключение к Arduino
Для коммуникации понадобится Breadboard Half и соединительные провода «папа-папа».
Вывод | Обозначение | Пин Arduino Uno |
---|---|---|
1 | GND | GND |
2 | VCC | 5V |
3 | VO | GND |
4 | RS | 11 |
5 | R/W | GND |
6 | 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 |
Для упрощения работы с LCD-дисплеем используйте встроенную библиотеку Liquid Crystal. В ней вы найдёте примеры кода с подробными комментариями.
Вывод текста
Для вывода первой программы приветствия, воспользуйтесь кодом вроде этого:
- hello-amperka.ino
// подключаем стандартную библиотеку LiquidCrystal #include <LiquidCrystal.h> // инициализируем объект-экран, передаём использованные // для подключения контакты на Arduino в порядке: // RS, E, DB4, DB5, DB6, DB7 LiquidCrystal lcd(11, 12, 5, 4, 3, 2); void setup() { // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(16, 2); // печатаем первую строку lcd.print("Hello world"); // устанавливаем курсор в колонку 0, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(0, 1); // печатаем вторую строку lcd.print("Do It Yourself"); } void loop() { }
Кириллица
Существует два способа вывода кириллицы на текстовые дисплеи:
Рассмотрим оба способа более подробно.
Таблица знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв.
Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.
Так букве Я
соответствует код B1
в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности \x##
встроить в строку код символа:
lcd.print("\xB1ndex");
Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x
, он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0-9
и A-F
следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две записанные рядом строки склеиваются.
Сравните две строки кода для вывода надписи «Яeee»:
lcd.print("\xB1eee"); // ошибка lcd.print("\xB1""eee"); // правильно
Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:
- hello-amperka-rus.ino
// подключаем стандартную библиотеку LiquidCrystal #include <LiquidCrystal.h> // инициализируем объект-экран, передаём использованные // для подключения контакты на Arduino в порядке: // RS, E, DB4, DB5, DB6, DB7 LiquidCrystal lcd(11, 12, 5, 4, 3, 2); void setup() { // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(16, 2); // устанавливаем курсор в колонку 5, строку 0 // на самом деле это первая строка, т.к. нумерация начинается с нуля lcd.setCursor(5, 0); // печатаем первую строку lcd.print("\xA8""p""\xB8\xB3""e\xBF"); // устанавливаем курсор в колонку 3, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(3, 1); // печатаем вторую строку lcd.print("o\xBF A\xBC\xBE""ep\xBA\xB8"); } void loop() { }
Переключение страниц знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:
// переключение с нулевой страницы на первую command(0x101010); // переключение с первой страницы на нулевую command(0x101000);
Дисплей не может одновременно отображать символы разных страниц.
Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.
- change-page.ino
// Подключаем стандартную библиотеку LiquidCrystal #include <LiquidCrystal.h> // Инициализируем объект-экран, передаём использованные // для подключения контакты на Arduino в порядке: // RS, E, DB4, DB5, DB6, DB7 LiquidCrystal lcd(11, 12, 5, 4, 3, 2); void setup() { // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(16, 2); // устанавливаем курсор в колонку 5, строку 0 // на самом деле это первая строка, т.к. нумерация начинается с нуля lcd.setCursor(5, 0); // печатаем строку lcd.print("\x9b\x9c\x9d\x9e\x9f"); } void loop() { // устанавливаем 0 станицу знакогенератора (стоит по умолчанию) lcd.command(0b101000); // ждём 1 секунду delay(1000); // устанавливаем 1 станицу знакогенератора lcd.command(0b101010); // ждём 1 секунду delay(1000); }
Полную таблицу символов с кодами можно найти в документации к экрану.
Использование библиотеки LiquidCrystalRus
Совсем не обязательно мучатся со знакогенератором, чтобы вывести русский символ. Для решения проблемы скачайте и установите библиотеку LiquidCrystalRus.
Это копия оригинальной библиотеки LiquidCrystal
с добавлением русского языка. Добавленный в библиотеку код трансформирует русские символы UTF8
в правильные коды для текстового экрана.
В качестве примера выведем фразу «Привет от Амперки» на дисплей.
- hello-amperka-rus-custom-library.ino
// подключаем библиотеку LiquidCrystalRus #include <LiquidCrystalRus.h> // инициализируем объект-экран, передаём использованные // для подключения контакты на Arduino в порядке: // RS, E, DB4, DB5, DB6, DB7 LiquidCrystalRus lcd(11, 12, 5, 4, 3, 2); void setup() { // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(16, 2); // устанавливаем курсор в колонку 5, строку 0 // на самом деле это первая строка, т.к. нумерация начинается с нуля lcd.setCursor(5, 0); // печатаем первую строку lcd.print("Привет"); // устанавливаем курсор в колонку 3, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(3, 1); // печатаем вторую строку lcd.print("от Амперки"); } void loop() { }
Примеры работы для Espruino
В качестве примера подключим дисплей к управляющей плате Iskra JS.
Подключение к Iskra JS
Для коммуникации понадобится Breadboard Half и соединительные провода «папа-папа».
Вывод | Обозначение | Пин Iskra JS |
---|---|---|
1 | GND | GND |
2 | VCC | 5V |
3 | VO | GND |
4 | RS | P11 |
5 | R/W | GND |
6 | E | P12 |
7 | DB0 | — |
8 | DB1 | — |
9 | DB2 | — |
10 | DB3 | — |
11 | DB4 | P5 |
12 | DB5 | P4 |
13 | DB6 | P3 |
14 | DB7 | P2 |
15 | VCC | 5V |
16 | GND | GND |
Для работы с LCD-дисплеем из среды Espruino существует библиотека HD44780.
Вывод текста
Для вывода программы приветствия, воспользуйтесь скриптом:
- hello-amperka.js
// создаём переменную для работы с дисплеем // HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев var lcd = require("HD44780").connect(P11,P12,P5,P4,P3,P2); // печатем первую строку lcd.print("Hello world"); // устанавливаем курсор в колонку 0, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(0, 1); // печатаем вторую строку lcd.print("Do It Yourself");
Кирилица
Вывод кирилицы на дисплей с помощью платформы Iskra JS доступен через встроенную в дисплей таблицу знакогенератора.
Таблица знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв.
Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.
Так букве Я
соответствует код B1
в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности \x##
встроить в строку код символа:
lcd.print("\xB1ndex");
Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x
, он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0–9
и A–F
следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются.
Сравните две строки кода для вывода надписи «Яeee»:
lcd.print("\xB1eee"); // ошибка lcd.print("\xB1"+"eee"); // правильно
Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:
- hello-amperka-rus.js
// создаём переменную для работы с дисплеем // HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев var lcd = require("HD44780").connect(P11,P12,P5,P4,P3,P2); // устанавливаем курсор в колонку 5, строку 0 // на самом деле это первая строка, т.к. нумерация начинается с нуля lcd.setCursor(5, 0); // печатаем первую строку lcd.print("\xA8"+"p"+"\xB8\xB3"+"e\xBF"); // устанавливаем курсор в колонку 3, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(3, 1); // печатаем вторую строку lcd.print("o\xBF"+" A\xBC\xBE"+"ep\xBA\xB8");;
Переключение страниц знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:
// переключение с нулевой страницы на первую command(0x101010); // переключение с первой страницы на нулевую command(0x101000);
Дисплей не может одновременно отображать символы разных страниц.
Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.
- change-page.js
// создаём переменную для работы с дисплеем // HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев var lcd = require("HD44780").connect(P11,P12,P5,P4,P3,P2); // создаём переменную состояния var state = false; // устанавливаем курсор в колонку 5, строку 0 // на самом деле это первая строка, т.к. нумерация начинается с нуля lcd.setCursor(5, 0); // печатаем первую строку lcd.print("\x9b\x9c\x9d\x9e\x9f"); setInterval(function() { // каждую секунду меняем переменую состояния state = !state; // вызываем функцию смены адреса страницы lcdChangePage(); }, 1000); function lcdChangePage () { if (state) { // устанавливаем 0 станицу знакогенератора (стоит по умолчанию) lcd.write(0b101000, 1); } else { // устанавливаем 1 станицу знакогенератора lcd.write(0b101010, 1); } }
Полную таблицу символов с кодами можно найти в документации к экрану.
Комнатный термометр
Дисплей удобен для отображения показаний модулей и сенсоров. Сделаем задатки «Умного Дома», а именно «комнатный термометр».
Что понадобится
Как собрать
Возьмите Troyka Shield и установите сверху на управляющую плату — Arduino или Iskra JS.
- Подключите аналоговый термометр к управляющей плате через 3-проводной шлейф к аналоговому пину
A0
. В итоге должна получится схема. Прошейте управляющую платформу кодом, приведённым ниже.
Скетч для Arduino
- thermometer-room.ino
// подключаем стандартную библиотеку LiquidCrystal #include <LiquidCrystal.h> // инициализируем объект-экран, передаём использованные // для подключения контакты на Arduino в порядке: // RS, E, DB4, DB5, DB6, DB7 LiquidCrystal lcd(11, 12, 5, 4, 3, 2); // пин датчика температуры #define TEMPERATURE_PIN A0 void setup() { // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(16, 2); } void loop() { // очищаем дисплей lcd.clear(); // устанавливаем курсор в колонку 3, строку 0 // на самом деле это первая строка, т.к. нумерация начинается с нуля lcd.setCursor(3, 0); // считываем показания с датчика температуры int sensorADC = analogRead(A0); // переводим значения с АЦП в вольты float sensorVoltage = sensorADC * (5.0 / 1023.0); // переводим вольты в градусы цельсия int temperature = (sensorVoltage - 0.5) * 100; // выводим результат на дисплей lcd.print("Temp="); lcd.print(temperature); lcd.print("\x99""C"); delay(500); }
Скрипт для Iskra JS
- thermometer-room.js
// создаём переменную для работы с дисплеем // HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев var lcd = require("HD44780").connect(P11,P12,P5,P4,P3,P2); // создаём переменную для работы с датчиком температуры var thermometer = require('@amperka/thermometer') .connect(A0); // каждую секунду считываем данные с датчика температуры и выводим на дисплей setInterval(function() { var celsius = thermometer.read('C'); lcd.setCursor(3, 0); lcd.print("Temp="+ celsius.toFixed(0) + "\x99"+"C"); }, 1000);
Элементы платы
Дисплей
Дисплей MT-16S2H умеет отображать все строчные и прописные буквы латиницы и кириллицы, а также типографские символы. Для любителей экзотики есть возможность создавать собственные иконки.
Экран выполнен на жидкокристаллической матрице, которая отображает 2 строки по 16 символов. Каждый символ состоит из отдельного знакоместа 5×8 пикселей.
Контроллер дисплея
Матрица индикатора подключена к встроенному чипу КБ1013ВГ6 с драйвером расширителя портов, которые выполняют роль посредника между экраном и микроконтроллером.
Контроллер КБ1013ВГ6 аналогичен популярным чипам зарубежных производителей HD44780 и KS0066, что означает совместимость со всеми программными библиотеками.
Контакты подключения
На плате дисплея выведено 16 контактов для подведения питания и взаимодействия с управляющей электроникой.
Вывод | Обозначение | Описание |
---|---|---|
1 | GND | Общий вывод (земля) |
2 | VCC | Напряжение питания (5 В) |
3 | VO | Управление контрастностью |
4 | RS | Выбор регистра |
5 | R/W | Выбор режима записи или чтения |
6 | E | Разрешение обращений к индикатору (а также строб данных) |
7 | DB0 | Шина данных (8-ми битный режим)(младший бит в 8-ми битном режиме) |
8 | DB1 | Шина данных (8-ми битный режим) |
9 | DB2 | Шина данных (8-ми битный режим) |
10 | DB3 | Шина данных (8-ми битный режим) |
11 | DB4 | Шина данных (8-ми и 4-х битные режимы)(младший бит в 4-х битном режиме) |
12 | DB5 | Шина данных (8-ми и 4-х битные режимы) |
13 | DB6 | Шина данных (8-ми и 4-х битные режимы) |
14 | DB7 | Шина данных (8-ми и 4-х битные режимы) |
15 | LED+ | Питания подсветки (+) |
16 | LED– | Питания подсветки (–) |
Обратите внимания, что физические контакты подсветки экрана 15
и 16
расположены не в порядком соотношении с другими пинами экрана.
Питание
Экран совместим со всеми контроллерами с логическим напряжением от 3,3 до 5 вольт. Но для питания самого индикатора (пин VCC) необходимо строго 5 вольт. Если в вашем проекте нет линии 5 вольт, обратите внимание на дисплей текстовый экран 16×2 / I²C / 3,3 В.
Интерфейс передачи данных
Дисплей может работать в двух режимах:
8-битный режим — в нём используются и младшие и старшие биты (
DB0
-DB7
)4-битный режим — в нём используются только младшие биты (
DB4
-DB7
)
Использовать восьмибитный режим не целесообразно. Для его работы требуется на четыре дополнительные ноги, а выигрыша по скорости практически нет.
Габаритный чертёж
Характеристики
Тип дисплея: текстовый
Цвет: монохромный
Технология: LCD (Liquid Crystal Display)
Индикация: 2 строки по 16 символов
Драйвера матрицы: КБ1013ВГ6
Интерфейс: параллельный 4/8 бит
Тип подсветки: LED
Цвет подсветки (зависит от модели): красный / зелёный / синий / чёрный / янтарный
Цвет символов (зависит от модели): зелёный / чёрный / белый
Напряжение питания: 5 В
Максимальный ток потребления: 1 мА
Потребляемый ток подсветки: 100 мА
Напряжение логических уровней: 3,3–5 В
Габариты: 84×44×13 мм
Ресурсы
Подключаем дисплей LCD 1602 параллельно в XOD | Электрик по-жизни
Привет, друзья!
Пора уже подключить дисплей и наблюдать за измерениями не только с помощью светодиодов и пищалок, а на экране дисплея.
Дисплей LCD 1602Дисплей LCD 1602
Дисплей LCD 1602 один из самых популярных дисплеев, как для самоделок в стиле DIY, так и для промышленных разработок. Дисплей можно встретить на современной бытовой технике и промышленных блоках управления.
Распиновка дисплея LCD 1602 следующая:
Распиновка LCD 1602Распиновка LCD 1602
В процессе подключения я столкнулся с небольшими трудностями. Дело в том, что на разных сайтах очень противоречивая информация относительно подключения. В некоторых источниках вообще описание одно, а на фото - соединение к плате Arduino сделано к другим пинам. Вот как верить таким источникам?
В одном все источники сходятся, подключать пины DB0; DB1; DB2; DB3 совсем не обязательно. Во-первых, при параллельном подключении это высвободит дополнительные пины, которые и так при таком соединении используются, аж, 6 штук, во-вторых на быстродействие и производительность это ни как не скажется. Большинство ардуинщиков используют соединение по I2S (об этом в другой раз), но ведь параллельное соединение тоже имеет право жить поэтому, сегодня соединим параллельно.
Схема параллельного соединения дисплея
LCD 1602Схема соединения LCD 1602Схема соединения LCD 1602
Для подключения дисплея LCD 1602 вам потребуется:
- Плата Arduino 1 шт.;
- Дисплей LCD 1602 1 шт.;
- Резистор переменный 10 кОм 1 шт.;
- Резистор 220 Ом 1 шт.;
- Провода "папа-папа" 16 шт.;
Еще один вопрос на который я не нашел в интернете чёткого ответа, нужен ли резистор 220 Ом на светодиод подсветки дисплея, у одних он есть, у других нет. Поэтому решил поставить, от греха подальше, хуже не будет, и место много он не занимает, но, по-моему, он на плате присутствует. Все ровно, бережёного бог бережёт.
После того как схема собрана, пришло время создать патч в программе XOD IDE.
Создаём новый проект, кликаем мышкой два раза по полю программы и в выпавшем строке поиска вводим название нужного нода text-lcd-parallel-16x2
Настройка нода text-lcd-parallel-16x2Настройка нода text-lcd-parallel-16x2
Данная распиновка соответствует схеме представленной выше, думаю не стоит перечислять, где какой пин в инспекторе нужно указать, по-моему, и так всё понятно.
Если вы установили все настройки в инспекторе, включайте USB-разъём и загружайте патч в Arduino. На дисплее должно высветиться следующее...
Если вы все правильно сделалиЕсли вы все правильно сделали
Внимание. При первом включении потенциометром настройте яркость экрана, в противном случае тест и цифры видно не будет.
Ну вот, думаю на сегодня хватит, главное, дисплей мы подключили. По-экспериментируйте с текстом и цифрами, но знайте, что русскую кириллицу эти дисплей не поддерживают.
Взаимодействие дисплея с датчиками и другими нодами рассмотрим в следующий раз.
Экспериментируйте!!!
Предыдущие статьи:
Сделай сам. Действующая сигнализация без написания кода
Пожалуй самый важный блок в XOD
Аналоговые датчики и сервопривод
Сервопривод. Что за привод?
Потенциал потенциометра
Измеряем температуру с помощью Ардуино
Простая - не простая кнопка в Arduino
Реле SRD-05VDC и способы подключения в XOD
Спасибо, что дочитали статью до конца.
Надеюсь статья была вам полезна и интересна.
Понравилась статья, ставьте палец вверх.
Хотите следить за новостями, подписывайтесь на наш канал.
Впереди ещё много интересного!Вы можете помочь проекту в развитии:
Подключение LCD 1602 по I2C интерфейсу | RadioLaba.ru
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#include <P16F628A.INC>
LIST p=16F628A
__CONFIG H'3F10' ;Конфигурация микроконтроллера
errorlevel -302 ;не выводить сообщения с ошибкой 302 в листинге
Sec equ 0020h ;вспомогательные регистры счета
Sec1 equ 0021h ;
Sec2 equ 0022h ;
scetbit equ 0024h ;вспомогательный регистр счета кол-ва бит
perem equ 0025h ;вспомогательный регистр приема/передачи байта по интерфейсу
tmp equ 0026h ;вспомогательный регистр счетчик
;
lcd_tmp equ 0027h ;вспомогательный регистр передачи инструкций
;
adr_i2c equ 0028h ;регистры подпрограммы передачи данных по интерфейсу
tmp_i2c equ 0029h ;
slave_adr equ 002Ah ;
data_i2c equ 002Bh ;
;
flag equ 007Fh ;регистр флагов
#DEFINE sda PORTB,0 ;линия sda
#DEFINE scl PORTB,1 ;линия scl
#DEFINE sda_io TRISB,0 ;линия направления sda
#DEFINE scl_io TRISB,1 ;линия направления scl
#DEFINE knp_led PORTB,2 ;кнопка вкл/выкл подсветки
#DEFINE led PORTB,3 ;светодиод ошибки передачи данных по интерфейсу
;flag,2 - флаг состояния подсветки (0 - выключена, 1 - включена)
;flag,3 - флаг передачи команда/данные (0 - команда, 1 - данные)
;flag,4 - флаг направления передачи (0 - чтение, 1 - запись)
;flag,5 - флаг окончания приема данных от ведомого
;flag,6 - флаг ошибки передачи по интерфейсу I2C (отсутствие подтверждения от ведомого)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0000h ;начать выполнение программы с адреса 0000h
goto Start ;переход на метку Start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Основная программа
Start movlw b'00000000' ;установка значений выходных защелок порта B
movwf PORTB ;
;
movlw b'00000111' ;выключение компараторов
movwf CMCON ;
;
bsf STATUS,RP0 ;выбрать 1-й банк
movlw b'11110111' ;настройка линий ввода\вывода порта B
movwf TRISB ;RB3 - на выход, остальные на вход
bcf STATUS,RP0 ;выбрать 0-й банк
;
clrf flag ;сброс регистра флагов
;
call lcd_led_on ;вызов подпрограммы включения подсветки
;
call init_lcd ;вызов подпрограммы инициализации дисплея
call err_prov ;проверка ошибки
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw 0x02 ;установка адреса DDRAM памяти (1-я строка 3-я позиция)
call lcd_adr ;вызоа подпрограммы передачи адреса DDRAM
movlw 'R' ;Вывод надписи RadioLaba.ru
call lcd_dat ;
movlw 'a' ;
call lcd_dat ;
movlw 'd' ;
call lcd_dat ;
movlw 'i' ;
call lcd_dat ;
movlw 'o' ;
call lcd_dat ;
movlw 'L' ;
call lcd_dat ;
movlw 'a' ;
call lcd_dat ;
movlw 'b' ;
call lcd_dat ;
movlw 'a' ;
call lcd_dat ;
movlw '.' ;
call lcd_dat ;
movlw 'r' ;
call lcd_dat ;
movlw 'u' ;
call lcd_dat ;
;
call paus ;пауза 1 сек
;
movlw 0x43 ;установка адреса DDRAM памяти (2-я строка 4-я позиция)
call lcd_adr ;вызоа подпрограммы передачи адреса DDRAM
;
movlw 'L' ;Вывод надписи LCD 1602A
call lcd_dat ;
movlw 'C' ;
call lcd_dat ;
movlw 'D' ;
call lcd_dat ;
movlw ' ' ;
call lcd_dat ;
movlw '1' ;
call lcd_dat ;
movlw '6' ;
call lcd_dat ;
movlw '0' ;
call lcd_dat ;
movlw '2' ;
call lcd_dat ;
movlw 'A' ;
call lcd_dat ;
;
call paus ;пауза 1 сек
call paus ;пауза 1 сек
;
movlw .16 ;сдвиг экрана влево на 16 позиций
movwf tmp ;
met_1 movlw b'00011000' ;команда сдвига экрана влево
call lcd_comm ;вызов подпрограммы передачи команды
decfsz tmp,F ;
goto met_1 ;
movlw 0x13 ;установка адреса DDRAM памяти (1-я строка 20-я позиция)
call lcd_adr ;вызоа подпрограммы передачи адреса DDRAM
movlw 'P' ;Вывод надписи PCF8574AT
call lcd_dat ;
movlw 'C' ;
call lcd_dat ;
movlw 'F' ;
call lcd_dat ;
movlw '8' ;
call lcd_dat ;
movlw '5' ;
call lcd_dat ;
movlw '7' ;
call lcd_dat ;
movlw '4' ;
call lcd_dat ;
movlw 'A' ;
call lcd_dat ;
movlw 'T' ;
call lcd_dat ;
;
call paus ;пауза 1 сек
;
movlw 0x54 ;установка адреса DDRAM памяти (2-я строка 21-я позиция)
call lcd_adr ;вызоа подпрограммы передачи адреса DDRAM
;
movlw 'I' ;Вывод надписи I2C bus
call lcd_dat ;
movlw '2' ;
call lcd_dat ;
movlw 'C' ;
call lcd_dat ;
movlw ' ' ;
call lcd_dat ;
movlw 'b' ;
call lcd_dat ;
movlw 'u' ;
call lcd_dat ;
movlw 's' ;
call lcd_dat ;
;
call paus ;пауза 1 сек
call paus ;пауза 1 сек
;
sdvig movlw .16 ;сдвиг экрана вправо на 16 позиций с одновременным опросом кнопки подсветки
movwf tmp ;с частотой 10 Гц
sdvig_1 movlw b'00011100' ;команда сдвига экрана вправо
call lcd_comm ;вызов подпрограммы передачи команды
call knp_opros ;вызов подпрограммы опроса кнопки подсветки
movlw .100 ;
call paus_lcd ;пауза 100 мс
decfsz tmp,F ;
goto sdvig_1 ;
movlw .20 ;пауза 2 сек с опросом кнопки подсветки с частотой 10 Гц
movwf tmp ;
sdvig_2 call knp_opros ;вызов подпрограммы опроса кнопки подсветки
movlw .100 ;
call paus_lcd ;пауза 100 мс
decfsz tmp,F ;
goto sdvig_2 ;
movlw .16 ;сдвиг экрана влево на 16 позиций с одновременным опросом кнопки подсветки
movwf tmp ;с частотой 10 Гц
sdvig_3 movlw b'00011000' ;команда сдвига экрана влево
call lcd_comm ;вызов подпрограммы передачи команды
call knp_opros ;вызов подпрограммы опроса кнопки подсветки
movlw .100 ;
call paus_lcd ;пауза 100 мс
decfsz tmp,F ;
goto sdvig_3 ;
movlw .20 ;пауза 2 сек с опросом кнопки подсветки с частотой 10 Гц
movwf tmp ;
sdvig_4 call knp_opros ;вызов подпрограммы опроса кнопки подсветки
movlw .100 ;
call paus_lcd ;пауза 100 мс
decfsz tmp,F ;
goto sdvig_4 ;
goto sdvig ;переход на метку sdvig
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
knp_opros btfsc knp_led ;Подпрограмма опроса кнопки подсветки дисплея
return ;кнопка не нажата: выход из подпрограммы
call paus_knp ;кнопка нажата, ожидание отжатия
btfss knp_led ;
goto $-2 ;
;
btfsc flag,2 ;опрос флага состояния подсветки
goto knp_1 ;
call lcd_led_on ;подсветка выключена: вызов подпрограммы включения подсветки
return ;выход из подпрограммы
;
knp_1 call lcd_led_off ;подсветка включена: вызов подпрограммы выключения подсветки
return ;выход из подпрограммы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
err_prov btfss flag,6 ;проверка ошибок передачи данных
return ;нет ошибок: выход из подпрограммы
err_1 bsf led ;ошибка: включить светодиод led
goto err_1 ;переход на метку err_1: зацикливание программы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Подпрограмма включения/выключения подсветки дисплея
lcd_led_on movlw b'00001000' ;Команда включения подсветки 3-й бит в 1
movwf adr_i2c ;
bsf flag,2 ;установка флага включенного состояния подсветки
goto lcd_led_1 ;
lcd_led_off movlw b'00000000' ;Команда выключения подсветки 3-й бит в 0
movwf adr_i2c ;
bcf flag,2 ;установка флага выключенного состояния подсветки
lcd_led_1 movlw b'01111110' ;
movwf slave_adr ;запись адреса микросхемы PCF8574AT в регистр slave_adr
clrf tmp_i2c ;
call write_i2c ;вызов подпрограммы записи по интерфейсу i2c
return ;выход из подпрограммы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Подпрограмма инициализации дисплея LCD 1602
init_lcd movlw .15 ;пауза 15 мс
call paus_lcd ;
movlw b'00110000' ;Передача команды 0011 (старший полубайт)
call lcd_comm_1 ;вызов подпрограммы передачи полубайта команды на дисплей
btfsc flag,6 ;проверка ошибки
return ;
movlw .5 ;пауза 5 мс
call paus_lcd ;
movlw b'00110000' ;Передача команды 0011 (старший полубайт)
call lcd_comm_1 ;вызов подпрограммы передачи полубайта команды на дисплей
btfsc flag,6 ;проверка ошибки
return ;
movlw .1 ;пауза 1 мс
call paus_lcd ;
movlw b'00110000' ;Передача команды 0011 (старший полубайт)
call lcd_comm_1 ;вызов подпрограммы передачи полубайта команды на дисплей
btfsc flag,6 ;проверка ошибки
return ;
;Передача команды 0010 (старший полубайт)
movlw b'00100000' ;Установка 4-х битного режима
call lcd_comm_1 ;вызов подпрограммы передачи полубайта команды на дисплей
btfsc flag,6 ;проверка ошибки
return ;
;Передача команды 00101000
movlw b'00101000' ; 4-х битный режим, использовать 2 строки дисплея, шрифт 5x8
call lcd_comm ;вызов подпрограммы передачи байта команды на дисплей
btfsc flag,6 ;проверка ошибки
return ;
;Передача команды 00001000
movlw b'00001000' ;выключить дисплей, выключить курсор, выключить мигание курсора
call lcd_comm ;вызов подпрограммы передачи байта команды на дисплей
btfsc flag,6 ;проверка ошибки
return ;
movlw b'00000001' ;Передача команды очистки дисплея 00000001
call lcd_comm ;вызов подпрограммы передачи байта команды на дисплей
btfsc flag,6 ;проверка ошибки
return ;
;Передача команды 00000110
movlw b'00000110' ;направление движения курсора- вправо (инкремент адреса), запретить сдвиг экрана
call lcd_comm ;вызов подпрограммы передачи байта команды на дисплей
btfsc flag,6 ;проверка ошибки
return ;
;Передача команды 00001100
movlw b'00001100' ;включить дисплей, выключить курсор, выключить мигание курсора
call lcd_comm ;вызов подпрограммы передачи байта команды на дисплей
return ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Подпрограмма передачи полубайта команды на дисплей
lcd_comm_1 movwf lcd_tmp ;
movlw b'01111110' ;
movwf slave_adr ;запись адреса микросхемы PCF8574AT в регистр slave_adr
movlw b'11110000' ;Передача старшего полубайта, бит E=1
andwf lcd_tmp,W ;
movwf adr_i2c ;
movlw b'00000100' ;
iorwf adr_i2c,F ;
btfsc flag,2 ;опрос флага состояния подсветки
bsf adr_i2c,3 ;флаг подсветки=1, включение подсветки
movlw data_i2c ;установка первого регистра приема/передачи
movwf FSR ;
movlw b'11110000' ;Передача старшего полубайта, бит E=0
andwf lcd_tmp,W ;
movwf INDF ;
btfsc flag,2 ;опрос флага состояния подсветки
bsf INDF,3 ;флаг подсветки=1, включение подсветки
movlw .1 ;передача 1-го байта
movwf tmp_i2c ;
call write_i2c ;вызов подпрограммы записи по интерфейсу i2c
return ;выход из подпрограммы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Подпрограмма передачи команды или данных на дисплей (1 байт)
lcd_adr movwf lcd_tmp ;Команда записи адреса
bsf lcd_tmp,7 ;установка 7-го бита,
bcf flag,3 ;сброс флага, передача команды
goto lcd_met_1 ;
lcd_cgram movwf lcd_tmp ;Команда установки адреса CGRAM памяти
bcf lcd_tmp,7 ;сброс 7-го бита, установка 6-го бита
bsf lcd_tmp,6 ;
bcf flag,3 ;сброс флага, передача команды
goto lcd_met_1 ;
lcd_dat movwf lcd_tmp ;Подпрограмма записи данных в дисплей
bsf flag,3 ;установка флага, передача данных
goto lcd_met_1 ;
lcd_comm movwf lcd_tmp ;Подпрограмма передачи команды на дисплей
bcf flag,3 ;сброс флага, передача команды
lcd_met_1 movlw b'01111110' ;
movwf slave_adr ;запись адреса микросхемы PCF8574AT в регистр slave_adr
movlw b'11110000' ;Передача старшего полубайта, бит E=1
andwf lcd_tmp,W ;если передается команда бит RS=0
movwf adr_i2c ;если передаются данные бит RS=1
btfsc flag,3 ;
movlw b'00000101' ;
btfss flag,3 ;
movlw b'00000100' ;
iorwf adr_i2c,F ;
btfsc flag,2 ;опрос флага состояния подсветки
bsf adr_i2c,3 ;флаг подсветки=1, включение подсветки
movlw data_i2c ;установка первого регистра приема/передачи
movwf FSR ;
movlw b'11110000' ;Передача старшего полубайта, бит E=0
andwf lcd_tmp,W ;если передается команда бит RS=0
movwf INDF ;если передаются данные бит RS=1
btfss flag,3 ;
goto lcd_met_2 ;
movlw b'00000001' ;
iorwf INDF,F ;
lcd_met_2 incf FSR,F ;инкремент регистра FSR
swapf lcd_tmp,F ;меняем местами полубайты
movlw b'11110000' ;Передача младшего полубайта, бит E=1
andwf lcd_tmp,W ;если передается команда бит RS=0
movwf INDF ;если передаются данные бит RS=1
btfsc flag,3 ;
movlw b'00000101' ;
btfss flag,3 ;
movlw b'00000100' ;
iorwf INDF,F ;
incf FSR,F ;инкремент регистра FSR
movlw b'11110000' ;Передача младшего полубайта, бит E=0
andwf lcd_tmp,W ;если передается команда бит RS=0
movwf INDF ;если передаются данные бит RS=1
btfss flag,3 ;
goto lcd_met_3 ;
movlw b'00000001' ;
iorwf INDF,F ;
lcd_met_3 btfss flag,2 ;опрос флага состояния подсветки
goto lcd_met_4 ;флаг подсветки=0, подсветка выключена, биты не меняем
movlw data_i2c ;установка первого регистра приема/передачи
movwf FSR ;
bsf INDF,3 ;флаг подсветки=1, включение подсветки
incf FSR,F ;
bsf INDF,3 ;
incf FSR,F ;
bsf INDF,3 ;
lcd_met_4 movlw .3 ;передача 3-х байта
movwf tmp_i2c ;
call write_i2c ;вызов подпрограммы записи по интерфейсу i2c
btfsc flag,3 ;проверка команда или данные
return ;выход из подпрограммы передачи данных на дисплей
swapf lcd_tmp,F ;меняем местами полубайты
movlw .1 ;проверка крманды очистка дисплея
xorwf lcd_tmp,W ;
btfsc STATUS,Z ;
goto lcd_met_5 ;команда соответствует очистке дисплея переход на lcd_met_5
movlw b'11111110' ;проверка крманды возврата курсора
andwf lcd_tmp,W ;
xorlw .2 ;
btfss STATUS,Z ;
return ;выход из подпрограммы передачи данных на дисплей
lcd_met_5 movlw .2 ;команда соответствует возврату курсора
call paus_lcd ;вызов подпрограммы паузы 2 мс
return ;выход из подпрограммы передачи данных на дисплей
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Подключение текстового LCD дисплея к Arduino
Существует множество модификаций подобных текстовых дисплеев, все они базирующихся на контроллере HD44780 или совместимым с ним, самые популярные двухстрочные дисплеи с 16 символами в строке. Хотя бывают и другие, но все они подключаются и работают по одному принципу.
Подключение к Arduino:
Распиновка:
Колодка на дисплее может быть двух типов, линейная, обычно встречается на экранах 1602 или 2004.
или шахматная, обычно встречается на экранах 0802, но это зависит от модели дисплея, такое можно встретить и на 1602.
Пин | Обозначение | Описание |
1 | VSS | Масса |
2 | VDD | Питание 5 вольт |
3 | VO | Питание LCD экрана (установка контрастности) |
4 | RS | Выбор регистра, команды или данные, (подключается на любой свободный выход arduino) |
5 | R\W | Выбор чтение или запись, (подключается к массе, ибо читать с экрана не нужно) |
6 | E | Сигнал разрешения, (подключается на любой свободный выход arduino) |
7 — 10 | DB0 — DB3 | Младшие биты параллельного интерфейса, (в нашем случаи не используются) |
11 — 14 | DB4 — DB7 | Старшие биты интерфейса, (подключается на любые свободные выход arduino) |
15 | A | Анод светодиода подсветки (подключается к питанию 5 вольт) |
16 | K | Катод светодиода подсветки (подключается к массе) |
Схема подключения:
Стоит отдельно сказать про настройку контрастности, контрастность зависит от напряжения на 3 ноге экрана (VO). Выход подключается к переменному резистору, который включается между питанием и массой, по схеме делителя напряжения.
Если подать на дисплей питание, дисплей отображает строку инициализации. Так ведет себя любой дисплей на контроллере HD44780, но чтобы её увидеть нужно настроить контрастность. Перед тем как начать работать с дисплеем, нужно добиться видимости этой строки.
В случаи недостатка контрастности, отображаемый текст не видим на дисплее.
Избыток контраста, тоже мешает отображению текста.
Софт:
Всё для работы текстовым дисплеем есть в комплекте со средой разработки, дополнительно устанавливать библиотеку не нужно.
Открываем пример HelloWorld.ino из библиотеки LiquidCrystal и загружаем его в arduino.
На LCD видим текст HelloWorld и счетчик к которому прибавляется единица каждую секунду.
Пример HelloWorld.ino с русскими комментариями.
/* LiquidCrystal Library - Hello World Demonstrates the use a 16x2 LCD display. The LiquidCrystal library works with all LCD displays that are compatible with the Hitachi HD44780 driver. There are many of them out there, and you can usually tell them by the 16-pin interface. This sketch prints "Hello World!" to the LCD and shows the time. The circuit: * LCD RS pin to digital pin 12 * LCD Enable pin to digital pin 11 * LCD D4 pin to digital pin 5 * LCD D5 pin to digital pin 4 * LCD D6 pin to digital pin 3 * LCD D7 pin to digital pin 2 * LCD R/W pin to ground * LCD VSS pin to ground * LCD VCC pin to 5V * 10K resistor: * ends to +5V and ground * wiper to LCD VO pin (pin 3) Library originally added 18 Apr 2008 by David A. Mellis library modified 5 Jul 2009 by Limor Fried (http://www.ladyada.net) example added 9 Jul 2009 by Tom Igoe modified 22 Nov 2010 by Tom Igoe This example code is in the public domain. http://www.arduino.cc/en/Tutorial/LiquidCrystal */ // include the library code: #include <LiquidCrystal.h> // инициализация библиотеки и указание к каким пинам подключен LCD // RS, E, DB4, DB5, DB6, DB7 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // настройка количества строк и столбцов LCD, в данном случаи 1602 lcd.begin(16, 2); // Отправляем на LCD, hello, world! lcd.print("hello, world!"); } void loop() { // Устанавливаем курсор на 1 линию и 0 символ // отсчет начинается от 0 lcd.setCursor(0, 1); // Отправляем количество секунд работы arduino lcd.print(millis() / 1000); }
Видео:
Как подключить lcd дисплей
Текстовый экран 16×2 пригодится для вывода показаний датчиков, отображения простых меню, подсказок и приветствий.
Видеообзор
Подключение и настройка
Дисплей MT-16S2H предназначен для вывода текста на латинице и кириллице.
Экран имеет 16 контактов для питания логики, взаимодействия с управляющей электроникой и подсветки.
Вывод | Обозначение | Описание |
---|---|---|
1 | GND | Общий вывод (земля) |
2 | Vcc | Напряжение питания (3,3—5 В) |
3 | Vo | Управление контрастностью |
4 | RS | Выбор регистра |
5 | R/W | Выбор режима записи или чтения |
6 | E | Разрешение обращений к индикатору (а также строб данных) |
7 | DB0 | Шина данных (8-ми битный режим)(младший бит в 8-ми битном режиме) |
8 | DB1 | Шина данных (8-ми битный режим) |
9 | DB2 | Шина данных (8-ми битный режим) |
10 | DB3 | Шина данных (8-ми и 4-х битные режимы)(младший бит в 4-х битном режиме) |
11 | DB4 | Шина данных (8-ми и 4-х битные режимы) |
12 | DB5 | Шина данных (8-ми и 4-х битные режимы) |
13 | DB6 | Шина данных (8-ми и 4-х битные режимы) |
14 | DB7 | Шина данных (8-ми и 4-х битные режимы) |
15 | +LED | + питания подсветки |
16 | –LED | – питания подсветки |
Дисплей может работать в двух режимах:
Использовать восьмибитный режим не целесообразно. Для его работы требуется на 4 дополнительные ноги, а выигрыша по скорости практически нет.
Подключение дисплея к управляющей плате
В качестве примера подключим дисплей к управляющей плате Arduino Uno. Для подключения понадобится Breadboard Half и соединительные провода «папа-папа».
Вывод | Обозначение | Пин Arduino Uno |
---|---|---|
1 | GND | GND |
2 | Vcc | 5V |
3 | Vo | GND |
4 | RS | 12 |
5 | R/W | GND |
6 | E | 11 |
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 |
Аналогично можно подключить дисплей к платформе Iskra JS.
Вывод | Обозначение | Пин Iskra JS |
---|---|---|
1 | GND | GND |
2 | Vcc | 5V |
3 | Vo | GND |
4 | RS | P12 |
5 | R/W | GND |
6 | E | P11 |
7 | DB0 | — |
8 | DB1 | — |
9 | DB2 | — |
10 | DB3 | — |
11 | DB4 | P5 |
12 | DB5 | P4 |
13 | DB6 | P3 |
14 | DB7 | P2 |
15 | Vcc | 5V |
16 | GND | GND |
Примеры работы для Arduino
Для упрощения работы с LCD-дисплеем используйте встроенную библиотеку Liquid Crystal. В ней вы найдёте примеры кода с подробными комментариями.
Библиотека подходит как для работы с контроллерами на AVR-платформе, так и с ARM-контроллерами.
Вывод текста
Для вывода первой программы приветствия, воспользуйтесь кодом вроде этого:
Кириллица
Существует два способа вывода кириллицы на текстовые дисплеи:
Рассмотрим оба способа более подробно.
Таблица знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв. Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.
Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности x## встроить в строку код символа:
Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0-9 и A-F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две записанные рядом строки склеиваются.
Сравните две строки кода для вывода надписи «Яeee»:
Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:
Переключение страниц знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:
Дисплей не может одновременно отображать символы разных страниц.
Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.
Полную таблицу символов с кодами можно найти в документации к экрану.
Использование библиотеки Liqu >
Совсем не обязательно мучатся со знакогенератором, чтобы вывести русский символ. Для решения проблемы скачайте и установите библиотеку LiquidCrystalRus.
Это копия оригинальной библиотеки LiquidCrystal с добавлением русского языка. Добавленный в библиотеку код трансформирует русские символы UTF8 в правильные коды для текстового экрана.
В качестве примера выведем фразу «Привет, Амперка» на дисплей.
Примеры работы для Iskra JS
Для работы с LCD-дисплеем из среды Espruino существует библиотека HD44780.
Вывод текста
Для вывода программы приветствия, воспользуйтесь скриптом:
Кирилица
Вывод кирилицы на дисплей с помощью платформы Iskra JS доступен через встроенную в дисплей таблицу знакогенератора.
Таблица знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв. Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.
Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности x## встроить в строку код символа:
Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0–9 и A–F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются.
Сравните две строки кода для вывода надписи «Яeee»:
Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:
Переключение страниц знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:
Дисплей не может одновременно отображать символы разных страниц.
Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.
Полную таблицу символов с кодами можно найти в документации к экрану.
Комнатный термометр
Дисплей удобен для отображения показаний модулей и сенсоров. Сделаем задатки «Умного Дома», а именно «комнатный термометр».
LCD дисплей – частый гость в проектах ардуино. Но в сложных схемах у нас может возникнуть проблема недостатка портов Arduino из-за необходимости подключить экран, у которого очень очень много контактов. Выходом в этой ситуации может стать I2C /IIC переходник, который подключает практически стандартный для Arduino экран 1602 к платам Uno, Nano или Mega всего лишь при помощи 4 пинов. В этой статье мы посмотрим, как можно подключить LCD экран с интерфейсом I2C, какие можно использовать библиотеки, напишем короткий скетч-пример и разберем типовые ошибки.
ЖК дисплей Arduino LCD 1602
Жидкокристаллический дисплей (Liquid Crystal Display) LCD 1602 является хорошим выбором для вывода строк символов в различных проектах. Он стоит недорого, есть различные модификации с разными цветами подсветки, вы можете легко скачать готовые библиотеки для скетчей Ардуино. Но самым главным недостатком этого экрана является тот факт, что дисплей имеет 16 цифровых выводов, из которых обязательными являются минимум 6. Поэтому использование этого LCD экрана без i2c добавляет серьезные ограничения для плат Arduino Uno или Nano. Если контактов не хватает, то вам придется покупать плату Arduino Mega или же сэкономить контакты, в том числе за счет подключения дисплея через i2c.
Краткое описание пинов LCD 1602
Давайте посмотрим на выводы LCD1602 повнимательней:
Каждый из выводов имеет свое назначение:
- Земля GND;
- Питание 5 В;
- Установка контрастности монитора;
- Команда, данные;
- Записывание и чтение данных;
- Enable;
7-14. Линии данных;
Технические характеристики дисплея:
- Символьный тип отображения, есть возможность загрузки символов;
- Светодиодная подсветка;
- Контроллер HD44780;
- Напряжение питания 5В;
- Формат 16х2 символов;
- Диапазон рабочих температур от -20С до +70С, диапазон температур хранения от -30С до +80 С;
- Угол обзора 180 градусов.
Схема подключения LCD к плате Ардуино без i2C
Стандартная схема присоединения монитора напрямую к микроконтроллеру Ардуино без I2C выглядит следующим образом.
Из-за большого количества подключаемых контактов может не хватить места для присоединения нужных элементов. Использование I2C уменьшает количество проводов до 4, а занятых пинов до 2.
Где купить LCD экраны и шилды для ардуино
LCD экран 1602 (и вариант 2004) довольно популярен, поэтому вы без проблем сможете найти его как в отечественных интернет-магазинах, так и на зарубежных площадках. Приведем несколько ссылок на наиболее доступные варианты:
Описание протокола I2C
Прежде чем обсуждать подключение дисплея к ардуино через i2c-переходник, давайте вкратце поговорим о самом протоколе i2C.
I2C / IIC(Inter-Integrated Circuit) – это протокол, изначально создававшийся для связи интегральных микросхем внутри электронного устройства. Разработка принадлежит фирме Philips. В основе i2c протокола является использование 8-битной шины, которая нужна для связи блоков в управляющей электронике, и системе адресации, благодаря которой можно общаться по одним и тем же проводам с несколькими устройствами. Мы просто передаем данные то одному, то другому устройству, добавляя к пакетам данных идентификатор нужного элемента.
Самая простая схема I2C может содержать одно ведущее устройство (чаще всего это микроконтроллер Ардуино) и несколько ведомых (например, дисплей LCD). Каждое устройство имеет адрес в диапазоне от 7 до 127. Двух устройств с одинаковым адресом в одной схеме быть не должно.
Плата Arduino поддерживает i2c на аппаратном уровне. Вы можете использовать пины A4 и A5 для подключения устройств по данному протоколу.
В работе I2C можно выделить несколько преимуществ:
- Для работы требуется всего 2 линии – SDA (линия данных) и SCL (линия синхронизации).
- Подключение большого количества ведущих приборов.
- Уменьшение времени разработки.
- Для управления всем набором устройств требуется только один микроконтроллер.
- Возможное число подключаемых микросхем к одной шине ограничивается только предельной емкостью.
- Высокая степень сохранности данных из-за специального фильтра подавляющего всплески, встроенного в схемы.
- Простая процедура диагностики возникающих сбоев, быстрая отладка неисправностей.
- Шина уже интегрирована в саму Arduino, поэтому не нужно разрабатывать дополнительно шинный интерфейс.
- Существует емкостное ограничение на линии – 400 пФ.
- Трудное программирование контроллера I2C, если на шине имеется несколько различных устройств.
- При большом количестве устройств возникает трудности локализации сбоя, если одно из них ошибочно устанавливает состояние низкого уровня.
Модуль i2c для LCD 1602 Arduino
Самый быстрый и удобный способ использования i2c дисплея в ардуино – это покупка готового экрана со встроенной поддержкой протокола. Но таких экранов не очень много истоят они не дешево. А вот разнообразных стандартных экранов выпущено уже огромное количество. Поэтому самым доступным и популярным сегодня вариантом является покупка и использование отдельного I2C модуля – переходника, который выглядит вот так:
С одной стороны модуля мы видим выводы i2c – земля, питание и 2 для передачи данных. С другой переходника видим разъемы внешнего питания. И, естественно, на плате есть множество ножек, с помощью которых модуль припаивается к стандартным выводам экрана.
Для подключения к плате ардуино используются i2c выходы. Если нужно, подключаем внешнее питание для подстветки. С помощью встроенного подстроечного резистора мы можем настроить настраиваемые значения контрастности J
На рынке можно встретить LCD 1602 модули с уже припаянными переходниками, их использование максимально упощено. Если вы купили отдельный переходник, нужно будет предварительно припаять его к модулю.
Подключение ЖК экрана к Ардуино по I2C
Для подключения необходимы сама плата Ардуино, дисплей, макетная плата, соединительные провода и потенциометр.
Если вы используете специальный отдельный i2c переходник, то нужно сначала припаять его к модулю экрана. Ошибиться там трудно, можете руководствоваться такой схемой.
Жидкокристаллический монитор с поддержкой i2c подключается к плате при помощи четырех проводов – два провода для данных, два провода для питания.
- Вывод GND подключается к GND на плате.
- Вывод VCC – на 5V.
- SCL подключается к пину A5.
- SDA подключается к пину A.
И это все! Никаких паутин проводов, в которых очень легко запутаться. При этом всю сложность реализации i2C протокола мы можем просто доверить библиотекам.
Библиотеки для работы с i2c LCD дисплеем
Для взаимодействие Arduino c LCD 1602 по шине I2C вам потребуются как минимум две библиотеки:
- Библиотека Wire.h для работы с I2C уже имеется в стандартной программе Arduino IDE.
- Библиотека LiquidCrystal_I2C.h, которая включает в себя большое разнообразие команд для управления монитором по шине I2C и позволяет сделать скетч проще и короче. Нужно дополнительно установить библиотеку После подключения дисплея нужно дополнительно установить библиотеку LiquidCrystal_I2C.h
После подключения к скетчу всех необходимых библиотек мы создаем объект и можем использовать все его функции. Для тестирования давайте загрузим следующий стандартный скетч из примера.
Описание функций и методов библиотеки LiquidCrystal_I2C:
- home() и clear() – первая функция позволяет вернуть курсор в начало экрана, вторая тоже, но при этом удаляет все, что было на мониторе до этого.
- write(ch) – позволяет вывести одиночный символ ch на экран.
- cursor() и noCursor() – показывает/скрывает курсор на экране.
- blink() и noBlink() – курсор мигает/не мигает (если до этого было включено его отображение).
- display() и noDisplay() – позволяет подключить/отключить дисплей.
- scrollDisplayLeft() и scrollDisplayRight() – прокручивает экран на один знак влево/вправо.
- autoscroll() и noAutoscroll() – позволяет включить/выключить режим автопрокручивания. В этом режиме каждый новый символ записывается в одном и том же месте, вытесняя ранее написанное на экране.
- leftToRight() и rightToLeft() – Установка направление выводимого текста – слева направо или справа налево.
- createChar(ch, bitmap) – создает символ с кодом ch (0 – 7), используя массив битовых масок bitmap для создания черных и белых точек.
Альтернативная библиотека для работы с i2c дисплеем
В некоторых случаях при использовании указанной библиотеки с устройствами, оснащенными контроллерами PCF8574 могут возникать ошибки. В этом случае в качестве альтернативы можно предложить библиотеку LiquidCrystal_PCF8574.h. Она расширяет LiquidCrystal_I2C, поэтому проблем с ее использованием быть не должно.
Скачать библиотеку можно на нашем сайте. Библиотека также встроена в последние версии Arduino IDE.
Проблемы подключения i2c lcd дисплея
Если после загрузки скетча у вас не появилось никакой надписи на дисплее, попробуйте выполнить следующие действия.
Во-первых, можно увеличить или уменьшить контрастность монитора. Часто символы просто не видны из-за режима контрастности и подсветки.
Если это не помогло, то проверьте правильность подключения контактов, подключено ли питание подсветки. Если вы использовали отдельный i2c переходник, то проверьте еще раз качество пайки контактов.
Другой часто встречающейся причиной отсутствия текста на экране может стать неправильный i2c адрес. Попробуйте сперва поменять в скетче адрес устройства с 0x27 0x20 или на 0x3F. У разных производителей могут быть зашиты разные адреса по умолчанию. Если и это не помогло, можете запустить скетч i2c сканера, который просматривает все подключенные устройства и определяет их адрес методом перебора. Пример скетча i2c сканера.
Если экран все еще останется нерабочим, попробуйте отпаять переходник и подключить LCD обычным образом.
Заключение
В этой статье мы рассмотрели основные вопросы использования LCD экрана в сложных проектах ардуино, когда нам нужно экономить свободные пины на плате. Простой и недорогой переходник i2c позволит подключить LCD экран 1602, занимая всего 2 аналоговых пина. Во многих ситуациях это может быть очень важным. Плата за удобство – необходимость в использовании дополнительного модуля – конвертера и библиотеки. На наш взгляд, совсем не высокая цена за удобство и мы крайне рекомендуем использовать эту возможность в проектах.
Статья рассказывает о том, как правильно подключить LCD к Arduino, рассмотрено всё необходимое про подключение LCD 1602 и LCD i2c.
Шаг 1. О проекте
Дисплеи LCD 1602 размера, созданные на базе HD44780 контроллера, в наши дни всё ещё остаются одними из самых доступных, простых и востребованных, чтобы разрабатывать какие бы то ни было электронные устройства.
Неудивительно, что их можно увидеть как в простых, собранных буквально на коленке агрегатах, так и в более серьезных промышленных, например автоматах для приготовления кофе. Именно с таким дисплеем и собираются наиболее популярные модули и шилды по тематике Arduino, например LCD I2C модуль и LCD Keypad Shield.
В следующих шагах подробно с изображениями рассказываем как подключить LCD к Arduino и отобразить на дисплее нужную информацию.
Шаг 2. LCD-дисплей 1602 для Ардуино
Дисплеи 1602 имеют два различных исполнения:
- жёлтая подсветка с чёрными буквами
- либо (это бывает гораздо чаще) синяя подсветка с белыми.
Размерность дисплеев на HD44780 контроллере бывает самой разной, а управляются они одинаково. Наиболее распространённые из размерностей – 16 на 02 (то есть по 16 символов в двух строках) или 20 на 04. Сами же символы имеют разрешение в 5 на 8 точек.
Большая часть дисплеев не поддерживает кириллицу (за исключением дисплеев CTK-маркировки). Но такая проблема частично решаема, и далее статья подробно рассказывает, как это сделать.
На дисплее есть 16-PIN разъём для подключения. Выводы имеют маркировку с тыльной стороны платы, она следующая:
- 1 (VSS) – питание на минус для контроллера.
- 2 (VDD) – питание на плюс для контроллера.
- 3 (VO) – настройки управления контрастом.
- 4 (RS) – выбор для регистра.
- 5 (R/W) – чтение и запись, в частности, запись при соединении с землёй.
- 6 (E) – активация (enable).
- 7–10 (DB0-DB3) – младшие биты от восьмибитного интерфейса.
- 11–14 (DB4-DB7) – старшие биты от интерфейса
- 15 (A) – положительный анод на питание подсветки.
- 16 (K) – отрицательный катод на питание подсветки.
Шаг 3. Подключаем ЖК-дисплей
Перед тем как подключать дисплей и передавать на него информацию, стоит проверить его работоспособность. Сперва подайте напряжение на VSS и VDD контроллер, запитайте подсветку (A, K), далее настройте контрастность.
Для таких настроек подойдёт потенциометр с 10 кОм, форма его не важна. На крайние ноги подают +5V и GND, а ножку по центру соединяют с VO выводом.
Когда на схему подаётся питание, нужно добиться необходимого контраста, если он настраивается неправильно, то и изображение на экране видно не будет. Чтобы настроить контраст, нужно «поиграть» с потенциометром. Когда схема будет собрана правильно и контраст настроен верно, верхняя строка на экране должна заполниться прямоугольниками.
Чтобы дисплей работал, применяется встроенная в Arduino IDE среду специальная библиотека LiquidCrystal.h, о которой я напишу ниже. Он может действовать в 8-битном и в 4-битном режиме. В первом варианте применяют лишь младшие и старшие биты (BB0-DB7), во втором – только младшие (BB4-DB7).
Но применение 8-битного режима в этом дисплее – неправильное решение, преимущества в скорости почти нет, поскольку частота обновления у него всегда меньше 10 раз за секунду. Чтобы выводился текст, надо присоединить выводы DB7, DB6, DB5, DB4, E и RS к выводам контроллера. Присоединять их допустимо к любым пинам Arduino, главное – задание верной последовательности в коде.
Если необходимого символа пока что нет в памяти контроллера, то можно его определить вручную (всего до семи символов). Ячейка в рассматриваемых дисплеях имеет расширение в пять на восемь точек. Задача создания символа в том, чтобы написать битовую маску и расставить единички в местах, где точки должны гореть, а нолики – где не должны. Рассмотренная выше схема подключения не всегда хороша, т. к. на Arduino занимается минимум шесть цифровых выходов.
Шаг 4. Схема обхода
Изучим вариант, как обойти это и обойтись только двумя. Нужен добавочный модуль-конвертор для LCD в IIC/I2C. Как он припаивается к дисплею и присоединяется к Arduino, можно увидеть на изображениях ниже.
Но такой вариант подключения действует лишь со специальной библиотекой LiquidCrystal_I2C1602V1, которую, впрочем, нетрудно найти в Сети и установить, после чего можно без проблем им пользоваться.
Шаг 4: Библиотека LiquidCrystal.h
Библиотеку LiquidCrystal.h можно скачать в разделе Библиотек нашего сайта на этой странице или с официального ресурса arduino.cc. Но также вы можете скачать ниже по ссылкам:
Шаг 5. Скетч (код программы)
После того, как вы скачали архив замените папку LiquidCrystal в папке с библиотеками вашего каталога установки Arduino.
Вы можете увидеть примерный скетч по адресу:
Файл -> Примеры -> LiquidCrystal -> HelloWorld_SPI
Либо, если у вас меню на английском:
File -> Examples -> LiquidCrystal -> HelloWorld_SPI
На этом наш очередной урок завершен. Желаем вам качественных проектов!
Дисплей LCD 1602 I2C Arduino
Arduino LCD 1602 I2C дисплей - это жидкокристаллический, текстовый, двух строчный, 16 знакомест в каждой строке, цифровой I2C индикатор с подсветкой. Представляющий из себя модуль Arduino. Каждое знакоместо имеет разрешение 8 x 5 точек. Общее количество точек экрана 1280 пикселей. Подсветка дисплея белая, светодиодная. Цвет жидких кристаллов тёмно-синий. Получается красивый белый текст на синем фоне. Дисплей основан на контроллере HD44780 и предназначен для отображения любой текстовой информации, в совокупности с Ардуино или другим контроллерами. Благодаря дополнительно установленному I2C модулю расширения портов на микросхеме PCF85741, дисплей стало очень просто подключить к любому микроконтроллеру. Схему подключения смотрите на изображении выше.
При первом включении нужно с обратной стороны устройства, потенциометром отрегулировать контрастность. Иначе Вы будете долго думать почему дисплей ничего не отображает. Если Вы не хотите использовать подсветку, то нужно удалить перемычку на плате интерфейса I2C. Для быстрого старта скачайте библиотеку LiquidCrystal I2C и загрузите пример "demo" в Ваш микроконтроллер. Если все подключено без ошибок, то дисплей сразу начнет демонстрирровать свои возможности. Для русификации шрифтов дисплея, Вам потребуется библиотека LCD 1602 RUS. Установите эту библиотеку и после чего Вы сможете выводить на экран дисплея, слова русскими буквами. Если Вы захотите создать свой скетч для Ардуино, то Вам понадобится описание функций библиотеки LiquidCrystal.
Характеристики Ардуино lcd 1602 дисплея:
I2C интерфейс на микросхеме | PCF85741 |
Контролер дисплея | HD44780 |
Регулировка контрастности | Есть |
Количество строк | 2 |
Количество символов в строке | 16 |
Общее количество символов | 32 |
Размер пикселя | 0,5 x 0,5 мм |
Размеры платы индикатора | 80 х 36 х 15 мм |
Видимая область экрана | 64,5 х 14 мм |
Количество пикселей в знаке | 40 |
Цвет фона | синий |
Цвет подсветки | белый |
Напряжение питания | 5 В |
Диапазон рабочих температур | 0 - 60º C |
Видео подключение Arduino к I2C LCD 1602 дисплею:
Подключение LCD (ЖК дисплея) к микроконтроллеру Arduino
Статья рассказывает о том, как правильно подключить LCD к Arduino, рассмотрено всё необходимое про подключение LCD 1602 и LCD i2c.
Шаг 1. О проекте
Дисплеи LCD 1602 размера, созданные на базе HD44780 контроллера, в наши дни всё ещё остаются одними из самых доступных, простых и востребованных, чтобы разрабатывать какие бы то ни было электронные устройства.
Неудивительно, что их можно увидеть как в простых, собранных буквально на коленке агрегатах, так и в более серьезных промышленных, например автоматах для приготовления кофе. Именно с таким дисплеем и собираются наиболее популярные модули и шилды по тематике Arduino, например LCD I2C модуль и LCD Keypad Shield.
В следующих шагах подробно с изображениями рассказываем как подключить LCD к Arduino и отобразить на дисплее нужную информацию.
Шаг 2. LCD-дисплей 1602 для Ардуино
Дисплеи 1602 имеют два различных исполнения:
- жёлтая подсветка с чёрными буквами
- либо (это бывает гораздо чаще) синяя подсветка с белыми.
Размерность дисплеев на HD44780 контроллере бывает самой разной, а управляются они одинаково. Наиболее распространённые из размерностей – 16 на 02 (то есть по 16 символов в двух строках) или 20 на 04. Сами же символы имеют разрешение в 5 на 8 точек.
Большая часть дисплеев не поддерживает кириллицу (за исключением дисплеев CTK-маркировки). Но такая проблема частично решаема, и далее статья подробно рассказывает, как это сделать.
На дисплее есть 16-PIN разъём для подключения. Выводы имеют маркировку с тыльной стороны платы, она следующая:
- 1 (VSS) – питание на минус для контроллера.
- 2 (VDD) – питание на плюс для контроллера.
- 3 (VO) – настройки управления контрастом.
- 4 (RS) – выбор для регистра.
- 5 (R/W) – чтение и запись, в частности, запись при соединении с землёй.
- 6 (E) – активация (enable).
- 7–10 (DB0-DB3) – младшие биты от восьмибитного интерфейса.
- 11–14 (DB4-DB7) – старшие биты от интерфейса
- 15 (A) – положительный анод на питание подсветки.
- 16 (K) – отрицательный катод на питание подсветки.
Шаг 3. Подключаем ЖК-дисплей
Перед тем как подключать дисплей и передавать на него информацию, стоит проверить его работоспособность. Сперва подайте напряжение на VSS и VDD контроллер, запитайте подсветку (A, K), далее настройте контрастность.
Для таких настроек подойдёт потенциометр с 10 кОм, форма его не важна. На крайние ноги подают +5V и GND, а ножку по центру соединяют с VO выводом.
Когда на схему подаётся питание, нужно добиться необходимого контраста, если он настраивается неправильно, то и изображение на экране видно не будет. Чтобы настроить контраст, нужно «поиграть» с потенциометром. Когда схема будет собрана правильно и контраст настроен верно, верхняя строка на экране должна заполниться прямоугольниками.
Чтобы дисплей работал, применяется встроенная в Arduino IDE среду специальная библиотека LiquidCrystal.h, о которой я напишу ниже. Он может действовать в 8-битном и в 4-битном режиме. В первом варианте применяют лишь младшие и старшие биты (BB0-DB7), во втором – только младшие (BB4-DB7).
Но применение 8-битного режима в этом дисплее – неправильное решение, преимущества в скорости почти нет, поскольку частота обновления у него всегда меньше 10 раз за секунду. Чтобы выводился текст, надо присоединить выводы DB7, DB6, DB5, DB4, E и RS к выводам контроллера. Присоединять их допустимо к любым пинам Arduino, главное – задание верной последовательности в коде.
Если необходимого символа пока что нет в памяти контроллера, то можно его определить вручную (всего до семи символов). Ячейка в рассматриваемых дисплеях имеет расширение в пять на восемь точек. Задача создания символа в том, чтобы написать битовую маску и расставить единички в местах, где точки должны гореть, а нолики – где не должны. Рассмотренная выше схема подключения не всегда хороша, т. к. на Arduino занимается минимум шесть цифровых выходов.
Шаг 4. Схема обхода
Изучим вариант, как обойти это и обойтись только двумя. Нужен добавочный модуль-конвертор для LCD в IIC/I2C. Как он припаивается к дисплею и присоединяется к Arduino, можно увидеть на изображениях ниже.
Но такой вариант подключения действует лишь со специальной библиотекой LiquidCrystal_I2C1602V1, которую, впрочем, нетрудно найти в Сети и установить, после чего можно без проблем им пользоваться.
Шаг 4: Библиотека LiquidCrystal.h
Библиотеку LiquidCrystal.h можно скачать в разделе Библиотек нашего сайта на этой странице или с официального ресурса arduino.cc. Но также вы можете скачать ниже по ссылкам:
Шаг 5. Скетч (код программы)
После того, как вы скачали архив замените папку LiquidCrystal в папке с библиотеками вашего каталога установки Arduino.
Вы можете увидеть примерный скетч по адресу:
Файл -> Примеры -> LiquidCrystal -> HelloWorld_SPI
Либо, если у вас меню на английском:
File -> Examples -> LiquidCrystal -> HelloWorld_SPI
На этом наш очередной урок завершен. Желаем вам качественных проектов!
Взаимодействие LCD1602 с Arduino - Arduino Project Hub
ВведениеВ этом руководстве по началу работы с ЖК-модулем мы собираемся изучить взаимодействие ЖК-модуля с популярными платами разработки, такими как Arduino Nano, Uno, Mega и Leonardo.
Используемое оборудование- ЖК-модуль 16x2
- Arduino UNO
- Arduino Nano
- Arduino Leonardo
- Arduino Mega
- Библиотека LiquidCrystal для первого метода - будет доступна в первом методе Arduino IDE .
ЖК-модули бывают разных цветов и размеров с разным количеством отображаемых символов. наиболее часто используется LCD1602, который может отображать 16 символов в каждой строке, то есть всего 32 символа. Некоторые другие размеры:
- LCD1604 - 16 знаков / 4 строки
- LCD2004 - 20 знаков / 4 строки
- LCD1602 - 16 знаков / 2 строки
- LCD1601 - 16 знаков / 1 строка и т. Д.
Мы связываем LCD1602 с Arduino, используя выводы данных ЖК-модуля.Один и тот же код и схема будут работать для всех Arduino и совместимых плат. Подключите схему, как показано на схеме ниже.
Схема- Сначала подключите
землю
Arduino кVSS
ЖК-дисплея. - Затем подключите
V0
ЖК-дисплея к заземлению - Затем подключите
RW
к земле - Затем подключите
K
, которое является заземлением - Затем подключите
5V
Arduino кVDD
ЖК-модуля. - Затем подключите цифровой контакт
12
Arduino кRS
ЖК-модуля. - Затем подключите цифровой контакт
11
Arduino кE
ЖК-модуля. - Затем подключите цифровой контакт 5 Arduino к
D4
ЖК-модуля. - Затем подключите цифровой контакт
4
Arduino кD5
ЖК-модуля. - Затем подключите цифровой контакт
3
Arduino кD6
ЖК-модуля. - Затем подключите цифровой контакт
2
Arduino кD7
ЖК-модуля. - И, наконец, подключите
3.3V
Arduino кA
ЖК-дисплея, который является анодом светодиодной подсветки.
Если вам нравится моя работа, поддержите меня, подписавшись на мой канал здесь
Прочтите этот пост в моем блоге: http: // bit.ly / 2R95CrQ
Распиновка модуля ЖК-дисплея 16x2, характеристики, описание и техническое описание
ЖК-модули16x2 очень часто используются в большинстве встраиваемых проектов, причиной чего является их низкая цена, доступность, удобство для программистов и доступные образовательные ресурсы.
Конфигурация выводов ЖК-дисплея 16x2Контактный номер: | Имя контакта: | Описание |
1 | Vss (Земля) | Контакт заземления подключен к заземлению системы |
2 | Vdd (+5 В) | Запитывает ЖК-дисплей напряжением +5 В (4.7 В - 5,3 В) |
3 | VE (контраст V) | Определяет уровень контрастности дисплея. Заземлен для получения максимального контраста. |
4 | Выбрать регистр | Подключен к микроконтроллеру для переключения между регистром команд / данных |
5 | Чтение / запись | Используется для чтения или записи данных.Обычно заземлен для записи данных на ЖК-дисплей |
6 | Включить | Подключен к выводу микроконтроллера и переключается между 1 и 0 для подтверждения данных |
7 | Контакт данных 0 | Выводы данных с 0 по 7 образуют 8-битную линию данных.Их можно подключить к микроконтроллеру для отправки 8-битных данных. Эти ЖК-дисплеи могут также работать в 4-битном режиме, в этом случае выводы данных 4,5,6 и 7 останутся свободными. |
8 | Вывод данных 1 | |
9 | Контакт данных 2 | |
10 | Контакт данных 3 | |
11 | Контакт данных 4 | |
12 | Вывод данных 5 | |
13 | Контакт данных 6 | |
14 | Вывод данных 7 | |
15 | Светодиод положительный | Подсветка Вывод положительного вывода светодиода |
16 | Светодиод отрицательный | Подсветка Вывод отрицательного вывода светодиода |
- Рабочее напряжение 4.От 7 В до 5,3 В
- Потребление тока 1 мА без подсветки
- Буквенно-цифровой ЖК-дисплей, то есть может отображать буквы и цифры
- Состоит из двух строк, каждая из которых может напечатать 16 символов.
- Каждый персонаж построен из поля 5 × 8 пикселей
- Может работать как в 8-битном, так и в 4-битном режиме
- Он также может отображать любые пользовательские символы
- Доступен с зеленой и синей подсветкой
Точечно-матричный светодиодный дисплей, 7-сегментный светодиодный дисплей, OLED-дисплей, ЖК-экран TFT
Краткое описание ЖК-модулей16 × 2 LCD назван так потому, что; он имеет 16 столбцов и 2 строки.Доступно множество комбинаций, таких как 8 × 1, 8 × 2, 10 × 2, 16 × 1 и т. Д., Но наиболее используемой из них является ЖК-дисплей 16 × 2. Таким образом, в нем будет всего (16 × 2 = 32) 32 символа, и каждый символ будет состоять из 5 × 8 пикселей. Одиночный символ со всеми его пикселями показан на рисунке ниже.
Теперь мы знаем, что каждый символ имеет (5 × 8 = 40) 40 пикселей, а для 32 символов у нас будет (32 × 40) 1280 пикселей. Кроме того, ЖК-дисплей также должен быть проинструктирован о положении пикселей.Следовательно, будет сложно справиться со всем с помощью MCU, поэтому используется интерфейсная ИС , такая как HD44780 , которая устанавливается на задней стороне самого ЖК-модуля. Функция этой ИС - получать команды и данные от MCU и обрабатывать их для отображения значимой информации на нашем ЖК-экране. Вы можете узнать, как подключиться к ЖК-дисплею, используя указанные выше ссылки. Если вы опытный программист и хотите создать свою собственную библиотеку для сопряжения вашего микроконтроллера с этим ЖК-модулем, тогда вы должны понимать работу ИС HD44780 и команды, которые можно найти в ее техническом описании.
2D Модель ЖК-модуля 16 × 2 Модуль ЖК-дисплея16x2 - схема расположения выводов и техническое описание
ЖК-дисплей 16x2 назван так потому, что; он имеет 16 столбцов и 2 строки. Доступно множество комбинаций, таких как 8 × 1, 8 × 2, 10 × 2, 16 × 1 и т. Д. Но наиболее часто используемым является ЖК-дисплей 16 * 2, поэтому мы и используем его здесь.
Все вышеупомянутые ЖК-дисплеи будут иметь 16 контактов, и подход к программированию также тот же, поэтому выбор остается за вами.Ниже приведены распиновка и описание контактов ЖК-модуля 16x2 :
.ст. № | Контактный № | Имя контакта | Тип штифта | Описание контакта | Контактный разъем |
1 | Контакт 1 | Земля | Вывод источника | Это заземляющий контакт ЖК-дисплея . | Подключен к заземлению MCU / источника питания |
2 | Контакт 2 | VCC | Вывод источника | Это вывод напряжения питания ЖК-дисплея . | Подключен к выводу питания источника питания |
3 | Контакт 3 | V0 / VEE | Управляющий штифт | Регулирует контраст ЖК-дисплея. | Подключен к переменному POT, который может подавать 0-5 В |
4 | Контакт 4 | Выбрать регистр | Управляющий штифт | Переключение между регистром команд / данных | Подключен к выводу MCU и получает либо 0, либо 1. 0 -> Командный режим 1-> Режим данных |
5 | Контакт 5 | Чтение / запись | Управляющий штифт | Переключение ЖК-дисплея между операциями чтения / записи | Подключен к выводу MCU и получает либо 0, либо 1. 0 -> Запись 1-> Операция чтения |
6 | Контакт 6 | Включить | Управляющий штифт | Должен удерживаться на высоком уровне для выполнения операции чтения / записи | Подключен к MCU и всегда на высоком уровне. |
7 | Контакт 7-14 | Биты данных (0-7) | Вывод данных / команд | Контакты, используемые для отправки команд или данных на ЖК-дисплей. | в 4-проводном режиме Только 4 контакта (0-3) подключены к MCU в 8-проводном режиме Все 8 контактов (0-7) подключены к MCU |
8 | Контакт 15 | Светодиод положительный | Вывод светодиода | Обычный светодиод, как при работе для подсветки ЖК-дисплея | Подключено к + 5В |
9 | Контакт 16 | Светодиод отрицательный | Вывод светодиода | Нормальный светодиод, подобный работе для подсветки ЖК-дисплея, подключенного к заземлению. | Заземлен |
Ничего страшного, если вы не понимаете функции всех контактов, я подробно объясню ниже. Теперь вернемся к нашему ЖК-дисплею:
Хорошо, а что это за два черных круга, похожие на вещи на обратной стороне нашего ЖК-дисплея?
Эти черные кружки состоят из интерфейсной ИС и связанных с ней компонентов, которые помогают нам использовать этот ЖК-дисплей с микроконтроллером. Потому что наш ЖК-дисплей представляет собой ЖК-дисплей с точечной матрицей 16 * 2, и поэтому он будет иметь (16 * 2 = 32) в общей сложности 32 символа, и каждый символ будет состоять из 5 * 8 пикселей.Одиночный символ со всеми включенными пикселями показан на рисунке ниже.
Итак, теперь мы знаем, что каждый символ имеет (5 * 8 = 40) 40 пикселей, а для 32 символов у нас будет (32 * 40) 1280 пикселей. Кроме того, ЖК-дисплей также должен быть проинструктирован о положении пикселей.
Обработка всего с помощью MCU будет сложной задачей, поэтому используется интерфейсная ИС , такая как HD44780 , которая устанавливается на самом ЖК-модуле. Функция этой ИС - получать команды и данные от MCU и обрабатывать их для отображения значимой информации на нашем ЖК-экране.
Давайте обсудим различные типы режима и параметры, доступные на нашем ЖК-дисплее, которые должны управляться нашими контактами управления.
4-битный и 8-битный режим ЖК-дисплея:
ЖК-дисплей может работать в двух разных режимах, а именно в 4-битном режиме и 8-битном режиме. В 4-битном режиме мы отправляем полубайт за полубайтом, сначала верхний полубайт, а затем нижний полубайт. Для тех из вас, кто не знает, что такое полубайт: полубайт - это группа из четырех битов, поэтому нижние четыре бита (D0-D3) байта образуют нижний полубайт, а верхние четыре бита (D4-D7) байта образуют старший полубайт.Это позволяет нам отправлять 8-битные данные.
В то время как в 8-битном режиме мы можем отправить 8-битные данные непосредственно за один ход, поскольку мы используем все 8 строк данных.
Теперь вы, должно быть, догадались. Да, 8-битный режим быстрее и безупречен, чем 4-битный режим. Но главный недостаток в том, что к микроконтроллеру нужно подключить 8 линий данных. Это приведет к тому, что у нас закончатся контакты ввода / вывода на нашем MCU, поэтому широко используется 4-битный режим. Для установки этих режимов не используются управляющие штифты. Меняется просто способ программирования.
Режим чтения и записи ЖК-дисплея:
Как уже говорилось, сам ЖК-дисплей состоит из интерфейсной ИС. MCU может читать или писать в эту интерфейсную ИС. В большинстве случаев мы будем просто писать в ИС, поскольку чтение усложняет задачу, а такие сценарии очень редки. При необходимости можно прочитать такую информацию, как положение курсора, прерывания завершения статуса и т. Д., Но это выходит за рамки данного руководства.
Интерфейсная ИС, представленная в большинстве ЖК-дисплеев: HD44780U, , чтобы программировать наш ЖК-дисплей, мы должны изучить полное техническое описание ИС.Техническое описание приведено здесь.
ЖК-команды:
На ЖК-дисплее есть несколько предустановленных команд, которые нам нужно отправить на ЖК-дисплей через какой-то микроконтроллер. Некоторые важные командные инструкции приведены ниже:
Шестнадцатеричный код | Команда в регистр инструкций ЖК-дисплея |
0F | ЖК-дисплей включен, курсор включен |
01 | Четкий экран дисплея |
02 | Возвращение домой |
04 | Курсор уменьшения (сдвиг курсора влево) |
06 | Курсор увеличения (сдвиг курсора вправо) |
05 | Сдвинуть дисплей вправо |
07 | Сдвиг дисплея влево |
0E | Дисплей включен, курсор мигает |
80 | Установить курсор в начало первой строки |
C0 | Установить курсор в начало второй строки |
38 | 2 строки и матрица 5 × 7 |
83 | Строка курсора 1 позиция 3 |
3C | Активировать вторую линию |
08 | Дисплей выключен, курсор выключен |
C1 | Перейти на вторую строку, позицию 1 |
OC | Дисплей включен, курсор выключен |
C1 | Перейти на вторую строку, позицию 1 |
C2 | Перейти на вторую строку, позицию 2 |
Ознакомьтесь с нашими статьями о подключении к ЖК-дисплеям с различными микроконтроллерами:
Конфигурация контактов, особенности и работа
В настоящее время мы всегда используем устройства, состоящие из ЖК-дисплеев, такие как проигрыватели компакт-дисков, DVD-плееры, цифровые часы, компьютеры и т. Д.Они обычно используются в производстве экранов для замены ЭЛТ. Электронно-лучевые трубки потребляют огромную мощность по сравнению с ЖК-дисплеями, а ЭЛТ тяжелее и больше. Эти устройства тоньше и потребляют меньше энергии. Принцип работы ЖК-дисплея 16 × 2 заключается в том, что он блокирует свет, а не рассеивает его. В этой статье обсуждается обзор ЖК-дисплея 16X2, конфигурация контактов и его работа.
Что такое ЖК-дисплей 16 × 2?
Термин ЖК-дисплей означает жидкокристаллический дисплей.Это один из видов модуля электронного дисплея, который используется в широком спектре приложений, таких как различные схемы и устройства, такие как мобильные телефоны, калькуляторы, компьютеры, телевизоры и т. Д. Эти дисплеи в основном предпочтительны для многосегментных светодиодов и семи сегментов. Основные преимущества использования этого модуля - низкая стоимость; просто программируется, анимация и нет ограничений на отображение пользовательских символов, специальных и даже анимаций и т. д.
16X2 LCDLCD 16 × 2, схема контактов
Распиновка ЖК-дисплея 16 × 2 показана ниже.
- Вывод 1 (вывод заземления / источника): это вывод GND дисплея, используемый для подключения вывода GND блока микроконтроллера или источника питания.
- Pin2 (VCC / Source Pin): это вывод питания дисплея, используемый для подключения вывода питания источника питания.
- Pin3 (V0 / VEE / Control Pin): этот вывод регулирует разницу на дисплее, используется для подключения изменяемого POT, который может подавать от 0 до 5 В.
- Контакт 4 (выбор регистра / вывод управления): этот вывод переключает регистр команд или данных, используемый для подключения вывода микроконтроллера, и принимает значение 0 или 1 (0 = режим данных и 1 = командный режим).
- Pin5 (вывод чтения / записи / управления): этот вывод переключает дисплей между операциями чтения или записи, и он подключен к выводу микроконтроллера, чтобы получить либо 0, либо 1 (0 = операция записи и 1 = операция чтения) .
- Вывод 6 (вывод включения / управления): этот вывод должен иметь высокий уровень для выполнения процесса чтения / записи, он подключен к блоку микроконтроллера и постоянно удерживается на высоком уровне.
- Контакты 7-14 (выводы данных): эти выводы используются для отправки данных на дисплей. Эти контакты подключаются в двухпроводном режиме, например, в 4-проводном и 8-проводном.В 4-проводном режиме только четыре контакта подключены к блоку микроконтроллера, например, от 0 до 3, тогда как в 8-проводном режиме к блоку микроконтроллера подключены 8 контактов, например, от 0 до 7.
- Pin15 (контакт + ve светодиода): этот контакт подключен к + 5V
- Контакт 16 (-ve контакт светодиода): этот контакт подключен к GND.
Характеристики LCD16x2
К основным характеристикам этого ЖК-дисплея относятся следующие.
- Рабочее напряжение этого ЖК-дисплея равно 4.7В-5,3В
- Он включает две строки, каждая из которых может содержать 16 символов.
- Потребляемый ток составляет 1 мА без подсветки
- Каждый персонаж может быть построен с помощью блока 5 × 8 пикселей
- Буквенно-цифровые ЖК-дисплеи, буквы и цифры
- Дисплей может работать в двух режимах, таких как 4-битный и 8-битный
- Доступны с синей и зеленой подсветкой
- Отображает несколько пользовательских символов
Регистры ЖК-дисплея
ЖК-дисплей 16 × 2 имеет два регистра, например регистр данных и регистр команд.RS (выбор регистра) в основном используется для перехода от одного регистра к другому. Когда установлен регистр «0», он известен как регистр команд. Точно так же, когда установлен регистр «1», он известен как регистр данных.
Регистр команд
Основная функция регистра команд - хранить инструкции команд, которые подаются на дисплей. Таким образом, можно выполнять предопределенные задачи, такие как очистка дисплея, инициализация, установка места курсора и управление отображением.Здесь обработка команд может происходить внутри регистра.
Регистр данных
Основная функция регистра данных - хранить информацию, которая должна отображаться на ЖК-экране. Здесь значение ASCII символа - это информация, которая должна отображаться на экране ЖК-дисплея. Всякий раз, когда мы отправляем информацию на ЖК-дисплей, она передается в регистр данных, и там процесс запускается. Если регистр установлен = 1, то будет выбран регистр данных.
ЖК-команды 16 × 2
Команды LCD 16X2 включают следующее.
- Для шестнадцатеричного кода-01 команда ЖК-дисплея будет четким ЖК-экраном
- Для шестнадцатеричного кода 02 команда ЖК-дисплея будет возвращать домой
- Для шестнадцатеричного кода-04 команда ЖК-дисплея будет уменьшать курсор
- Для шестнадцатеричного кода 06 команда ЖК-дисплея будет иметь вид курсора увеличения
- Для шестнадцатеричного кода 05 команда ЖК-дисплея будет иметь вид Сдвиг дисплея вправо
- Для шестнадцатеричного кода 07 команда ЖК-дисплея будет иметь вид Сдвиг дисплея влево
- Для шестнадцатеричного кода 08 команда ЖК-дисплея будет выключена, курсор выключен.
- Для шестнадцатеричного кода-0A команда ЖК-дисплея будет включать курсор, а дисплей выключен.
- Для шестнадцатеричного кода-0C команда ЖК-дисплея будет отключена, а отобразится
- Для шестнадцатеричного кода-0E на ЖК-дисплее будет мигать курсор, отображается
- Для шестнадцатеричного кода-0F команда на ЖК-дисплее будет мигать курсором, отображать на
- Для шестнадцатеричного кода-10 команда ЖК-дисплея будет иметь вид Сдвинуть курсор влево
- Для шестнадцатеричного кода-14 команда ЖК-дисплея будет иметь вид Сдвинуть положение курсора вправо
- Для шестнадцатеричного кода-18 команда ЖК-дисплея будет сдвигать весь дисплей влево
- Для шестнадцатеричного кода-1C команда ЖК-дисплея будет сдвигать весь дисплей вправо
- Для шестнадцатеричного кода 80 команда на ЖК-дисплее будет переводить курсор в начало (1-я строка)
- Для шестнадцатеричного кода-C0 команда на ЖК-дисплее будет переводить курсор в начало (2-я строка)
- Для Hex Code-38 команда ЖК-дисплея будет иметь 2 строки и матрицу 5 × 7
ЖК-дисплей 16 × 2 Arduino
Пожалуйста, перейдите по этой ссылке, чтобы узнать больше о интерфейсе жидкокристаллического дисплея с помощью Arduino.
Таким образом, речь идет о техническом описании ЖК-дисплея 16x2, которое включает в себя ЖК-дисплей 16x2, конфигурацию контактов, принцип работы и его приложения. К основным преимуществам этого ЖК-устройства можно отнести меньшее энергопотребление и невысокую стоимость. К основным недостаткам этого жидкокристаллического дисплея можно отнести то, что он занимает большую площадь, медленные устройства, а также срок службы этих устройств будет сокращаться из-за постоянного тока. Таким образом, эти ЖК-дисплеи используют источник переменного тока с частотой менее 500 Гц. Вот вам вопрос, каково применение ЖК-дисплеев?
Как подключить ЖК-дисплей к ESP8266 NodeMCU
ЖК-дисплеи - это быстрый и недорогой способ отображения простой информации.В этом руководстве будет показано, как подключить ЖК-дисплей 16x2 с помощью I2C к набору разработчика ESP8266 NodeMCU.
ЖК-дисплей, который я собираюсь использовать, довольно распространен, и его можно купить на Amazon за пару долларов. Он использует I2C для связи с NodeMCU. I2C хорош тем, что для связи требуется всего два провода.
Электропроводка
Подключить ЖК-дисплей к комплекту разработчика NodeMCU довольно просто. Ниже приведена электрическая схема, и каждое подключение указано ниже.
- Подключите контакт GND на ЖК-дисплее к одному из контактов GND на NodeMCU.
- Подключите вывод VCC на ЖК-дисплее к выводу VIN на NodeMCU. Вывод VIN на NodeMCU напрямую связан с выводом 5V входящего USB-порта. Если вы планируете питать NodeMCU от чего-то другого, кроме USB, вам придется найти другой способ подать 5В на дисплей.
- Подключите вывод SDA на ЖК-дисплее к выводу D2 на NodeMCU.
- Подключите вывод SDL на ЖК-дисплее к выводу D1 на NodeMCU.
Код
Благодаря библиотеке LiquidCrystal_I2C связь с этими дисплеями проста. Сначала используйте диспетчер библиотек Arduino для установки библиотеки LiquidCrystal_I2C, если вы еще этого не сделали.
Ниже приведен весь набросок, необходимый для вывода на дисплей «Hello World». Я объясню подробности позже.
Первым делом мы создаем объект LiquidCrystal_I2C и передаем ему адрес I2C, ширину в символах и высоту в символах.Адрес для NodeMCU, скорее всего, всегда равен 0x3F. Если применить эти инструкции к другим типам плат, адрес может быть другим. Arduino предоставляет пример скетча, который сканирует адреса I2C, если вам сложно его найти.
ЖК-дисплей сначала перемещает курсор туда, где вы хотите начать, а затем печатает несколько символов. В моем примере я хотел, чтобы HELLO и WORLD были сосредоточены на каждой строке. Для «HELLO» курсор должен быть на 5 символов справа и ноль символов вниз, поэтому я переместил его (5, 0).Для "МИРА" мне нужно было, чтобы он был на 5 символов вправо и на один символ вниз, поэтому я переместил его (5, 1).
Теперь, когда у вас есть основы, вы можете начать использовать свой ЖК-экран для отображения любой нужной информации. Например, вы можете отобразить прогноз погоды. Если у вас есть какие-либо вопросы или комментарии, не стесняйтесь оставлять их ниже или на нашем форуме.
Хотите узнать больше? Ознакомьтесь с другими руководствами по ESP8266:
EFTON - Уголок любопытства
EFTON - Уголок любопытства - ЖК-дисплей с точечной матрицей 16x2 символовЭтот вышедший из строя стандартный матричный модуль LCD1602 послужит нам прекрасным примером относительно передовых технологий, которые нас окружают. который так хорошо служит годами, что мы уже перестали замечать, насколько сложными могут быть эти мелочи.Модуль состоит в основном из самого «стекла» ЖК-дисплея, подсветки и электроники драйвера. Теперь давайте также посмотрим на детали.
Все знают, как выглядит такой модуль спереди, где он «показывает» две строки символов, поэтому давайте сначала посмотрим на обратную сторону. Есть печатная плата служащая там базой, с двумя микросхемами под черными эпоксидными «каплями» (одна из «капель» на картинке имеет следы от царапины ножом, в тщетной попытке обнажить сам кремниевый чип).Это довольно стандартный способ сделать это, чипы прикрепляются непосредственно к печатной плате, а затем покрываются стандартной эпоксидной смолой, а не используя обычные ИС в упаковке - производители этих модулей делают все возможное, чтобы сэкономить каждую копейку. Фишки здесь - «клоны» де-факто отраслевой стандарт Hitachi HD44780 и сопутствующий ему чип. Их выпускает довольно много производителей на Дальнем Востоке. «Основная» микросхема - это фактически контроллер, получение команд и данных через системный разъем CON1, их сохранение и периодическая генерация последовательности сигналов для обновления «изображения» на дисплее с мультиплексированием по времени.Поскольку у него недостаточно "контактов" для управления всеми строками и столбцами 2-строчного 16-символьного дисплея (т. Е. 2x8 = 16 строк и 16x5 = 80 столбцов), сопутствующий чип, «увеличивающий» количество выходных «контактов», находится под вторым «blob», фактически являясь просто последовательно-параллельный сдвиговый регистр, периодически «заполняемый» с «главного» контроллера.
«Системный» разъем - CON1 - тоже подключается по стандарту де-факто. Есть два стиля этого разъема: либо один 14-контактный ряд вдоль длинного края модуля - как в этом случае, или ряд выводов 2x7 вдоль более короткого края модуля.Учитывая стандартную нумерацию двухстрочных заголовков, распиновка обоих стилей идентична; но будьте осторожны, есть несколько "нестандартных" модулей, у которых GND и VCC (контакты 1 и 2) поменяны местами, по сравнению с "более распространенным стандартом". Всегда сначала проверяйте таблицу.
Читатель наверняка заметил, что модуль на картинке имеет 16-контактный разъем, хотя 14-контактный разъем упоминается выше как стандарт. Дополнительные 2 контакта предназначены для питания подсветки.Это довольно распространенная схема, но будьте осторожны: нет никаких гарантий относительно полярности, напряжение, необходимость в токоограничивающем резисторе и т. д. - хотя многие модули имеют просто два последовательно соединенных светодиода, опять же, в целях безопасности, сверьтесь с таблицей данных. Контакты подсветки также могут располагаться по-разному: на «другой стороне» перед выводом 1, с зазором от «системного» разъема, или совсем в другом месте. (или у модуля, конечно, может вообще не быть подсветки ;-))
Традиционно при компоновке печатной платы учитывается несколько вариантов.Один из основных параметров - напряжение питания. В то время как интегральные схемы выполнены по КМОП-технологии и могут работать как с питающим напряжением 5В, так и 3В (с незначительным изменением схемы генератора, где резистор с обозначением RC рекомендуется заменить на немного другое значение - см. техническое описание микросхемы), для самого ЖК-дисплея требуется напряжение смещения около 4,0-4,5 В относительно шины положительного напряжения. При работе от 5 В это напряжение (около 0.5-1 В относительно GND) обычно генерируется делителем напряжения (потенциометром или триммером) от VCC и подается на контакт 3 разъема. Но при работе от 3 В это напряжение должно быть отрицательным по отношению к земле. Его можно произвести вне платы, а затем подключить к контакту 3, как обычно; но со стороны производителя модуля было бы непослушным подталкивать пользователя к этому ;-). На правой стороне печатной платы есть область, где установлен инвертор. на почтенном топливном насосе Intersil ICL7660, или некоторые из его, может быть, более десятка клонов, произведенных по всему миру, могут быть установлены ( U3 ).Делитель напряжения (R8 | RM + R10, по сравнению с R7) и транзистор (Q1) могут быть предоставлены для регулировки отрицательного напряжения до точного значения, необходимого для оптимального контраста; затем он подключается к «лестнице» смещения ЖК-дисплея (резисторы R1-R5) через резистор R9 (без резистора R6). В качестве альтернативы отрицательное напряжение от инвертор можно направить за пределы модуля, закоротив перемычку JV через контакт 15 (который, очевидно, не используется для питания подсветки). Намерение состоит в том, чтобы разместить делитель напряжения (потенциометр) между этим напряжением и землей, а затем вернуть отрегулированное напряжение через контакт 3.
ЖК-контроллер, совместимый с HD44780, позволяет работать в другом режиме с 11 строками на символ вместо 8. Это включает другой, 11-ступенчатый мультиплексор и требует немного другого подключения «лестницы» делителя напряжения, при этом резистор R3 не является перемычкой 0 Ом. Чтобы разрешить оба режима с одинаковыми значениями всех резисторов, R3 можно перемкнуть, закоротив J3 . Однако, поскольку 11-строчные ЖК-дисплеи встречаются редко, этот параметр вряд ли будет использоваться.Также имеется перемычка JD для замыкания металлической рамки (точнее, контактных площадок, на которых рамка удерживает печатную плату), на логическое заземление. Это хорошая вещь, чтобы избежать электрического заряда от прикосновения кого-то к раме и случайного прохождения его через других, возможно более чувствительные пути. Как уже упоминалось, есть несколько возможных методов включения подсветки, а также есть несколько вариантов внешнего вида самой подсветки.На левой стороне печатной платы есть три пары отверстий с маркировкой A и K , и две пары на другой стороне, все соединенные вместе, что указывает на пять возможных вариантов расположения выводов системы подсветки. Также есть варианты для питания подсветки: перемычки JA и JK , здесь обе закорочены каплей припоя, соединяют соответствующие электроды с контактами 15 и 16 разъема CON1. В качестве альтернативы закорачивая J1 и J2 , соответствующие электроды подсветки будут подключены к контактам 1 и 2, т.е.е. к выводам питания логики дисплея, устраняя необходимость в двух дополнительных контактах в разъеме (или двух проводниках в кабеле, ведущем к модулю). Ток подсветки ограничивается резистором RL, который в данном случае представляет собой перемычку на 0 Ом; это означает, что ограничение тока должно обеспечиваться внешней цепью.Сама подсветка расположена между «стеклом» ЖК-дисплея (B) и платой (G). Он состоит из светодиодов, установленных на миниатюрной печатной плате (D), излучающих на край световода; световод (Е) - кусок акриловой пластины; отражатель под световодом (F) - кусок белой глянцевой бумаги; и рассеиватель (C) - кусок молочно-белой пластиковой пленки прямо над световодом.Затем вся эта сборка прижимается металлической рамой (A) к печатной плате (G).
Световод сам по себе является замечательным инженером, обеспечивающим равномерно освещенную поверхность от двух в основном точечных источников света. И все же это гениально просто - это просто кусок акриловой пластины, на одной из коротких сторон которой светятся светодиоды. Одна из его поверхностей покрыта неровностями. Они сконструированы так, что отражают световые лучи, падающие под довольно малым углом изнутри волновода. резко на другую поверхность, где они больше не отражаются, а выходят прямо наружу.Те лучи, которые проходят через неровности, отражаются обратно нижний отражатель (глянцевый белый лист бумаги). Три кромки, за исключением той, через которую свет светодиодов проникает внутрь, покрыты тонкой металлической (предположительно алюминиевой) фольгой, чтобы предотвратить утечку света.
Наконец, самая важная составляющая - собственно «стекло» ЖК-дисплея. Опять же, простая на первый взгляд вещь. Но это снова сложная сборка: два стекла ((B) и (E)), разделенные лишь долей миллиметра, разделенные прокладкой по краям (тень от которой показана как (C)), обеспечение также «контейнера» для самого жидкого кристалла (который заполняется в этот зазор через отверстие в прокладке, запечатанное позицией (D))."Оптический" Функция ЖК-дисплея также требует добавления двух поляризаторов внизу и вверху стека ((A) и (F)).
На каждом «стакане» расположен набор полупрозрачных электродов в виде линий, перпендикулярных друг другу, образующих «сетку». На пересечении линий электрическое поле от напряжения, приложенного между электродами, заставляет «кристаллы» жидкого кристалла скручиваться, Поворачивая поляризацию проходящего света, который затем поглощается на соответствующем поляризаторе, квадратное пятно кажется темным.Однако электроды должны пропускать большую часть света и в то же время быть проводящими. Выбранный материал для таких электродов: так называемый ITO (оксид индия-олова) в тонком слое вакуумного напыления на стекле; а затем, после фотолитографического шага, выборочно вытравливаются, чтобы сформировать «линии», так же как следы на печатных платах. Они прозрачны при "обычном просмотре", но становятся видимыми, если смотреть под углом.
Электроды выведены на край стекла, где они образуют контакты на нижней стороне верхнего стекла.Электроды из (верхней части) нижнего стекла, которые образуют «ряды», «соединены перемычкой» через разделитель с аналогичными «глухими». контакты на верхнем стекле, поэтому контакты строк и столбцов могут лежать в одной плоскости.
Наконец, контакты подключаются к соответствующим контактным площадкам на печатной плате. Для этого - и оставить пространство между печатной платой и стеклом. там, где подойдет сборка подсветки, контакты подключаются к колодкам через пару резиновых полосок.Это еще один пример простого но эффективная технология: они состоят из множества очень тонких проводящих полос, уложенных друг за другом, но не соприкасающихся друг с другом, встроен внутрь непроводящей резины. Обратите внимание, что полосы намного тоньше, чем ширина контактов - и, что более важно, меньше ширины зазора между контактами. Таким образом, учитывая, что контактные площадки на печатной плате имеют такую же форму и длину, что и контакты на стекле, нет необходимости в каком-либо специальном выравнивании, за исключением того, что стекло должно быть расположено непосредственно над печатной платой с погрешностью, возможно, миллиметра - и металлический каркас, удерживающий всю сборку вместе, легко обеспечивает это.
Разве не удивительно, сколько замечательной технологии скрыто даже в такой простой, дешевой и вездесущей электронной части, как буквенно-цифровой ЖК-модуль ...
24/11/2009, ср на efton dot sk
НАЗАД
ГЛАВНАЯ
Инициализация ЖК-дисплея
Символьные ЖК-модули
Информация в этом разделе относится к символьным ЖК-модулям, в частности, управляемым HD44780 или аналогичным.
Инициализация внутренней схемой сброса
Это информация из таблицы данных, касающаяся инициализации ЖК-контроллера.
Описанный выше метод «внутреннего сброса» используется многими программистами, но, на мой взгляд, это не так. мудрый выбор. & nbsp Возможно, их соблазняет первое предложение с обещанием «автоматической» инициализации. & nbsp Если вы посмотрите на результат этой автоматической инициализации, вы увидите, что контроллер настроен для однострочный дисплей, хотя на самом деле большинство ЖК-модулей должны быть настроены на двухстрочный дисплей.& nbsp Это также оставляет дисплей выключенным. & nbsp Это означает, что два из четырех шагов, которые были выполнены автоматически, будут должны быть переделаны.
Но это НЕ основная причина, по которой следует избегать этого метода. & nbsp Примечание внизу четко заявляет, что этот метод выйдет из строя, если источник питания не соответствует определенным спецификациям, спецификациям, которые похоронены в другом месте таблицы. & nbsp В случаях, когда невозможно гарантировать соответствие источника питания указанным В спецификации рекомендуется использовать «Инициализация по инструкции».
Вот эти характеристики блока питания. Как вы думаете, их встречает ваша стенная бородавка?
Использование этого внутреннего сброса может быть удовлетворительным для ЖК-модуля, который является частью системы, которая также включает источник питания, такой как дисплей на принтере. & nbsp Это неудовлетворительно для ЖК-модуля, который будет питание от случайного источника питания.
Большинство людей, читающих это, вероятно, возятся с ЖК-модулем, который подключен к микроконтроллеру и питается от того же источника питания, что и микроконтроллер.& nbsp Предположим лучший случай, когда источник питания удовлетворяет требованиям для внутреннего сброса ЖК-контроллера, и где программа в микроконтроллере не пытается отправить какую-либо информацию на ЖК-модуль, пока не будет завершен внутренний сброс. & nbsp Что происходит при нажатии кнопки сброса на микроконтроллере? & nbsp Ответ: Программный код запустится снова, но ЖК-модуль не будет повторно инициализирован, поскольку его питание никогда не прерывалось.& nbsp Вот проблема: Программный код содержит команду Function Set , и эта команда должна выполняться только один раз, сразу после ЖК-модуль инициализирован. & nbsp Ну он уже запускался один раз, когда было подано питание, а вот он его запускает опять же, после нажатия кнопки сброса и перезапуска кода микрокомпьютера. & nbsp Когда эта инструкция выполняется второй время, когда состояние ЖК-контроллера может быть неопределенным, или, говоря простым языком, ЖК-контроллер может перестать отвечать.
Инициализация по инструкции
На самом деле не так уж и сложно использовать эту технику, если вы расшифровываете блок-схемы, описывающие процедуру. & nbsp Все Блок-схемы в различных таблицах данных, кажется, взяты из одного и того же источника, и все они одинаково неоднозначны в определенных областях. & nbsp Любые различия, вероятно, вызваны типографскими ошибками или ошибками редактирования, и их легко обнаружить, если вы сравните несколько разных таблиц.
Существуют отдельные блок-схемы инициализации для 8-битного интерфейса и 4-битного интерфейса, но фактическая последовательность инструкции, отправляемые контроллеру ЖК-дисплея, по существу одинаковы в каждом случае. & nbsp Во-первых, есть серия того, что технически Функциональный набор инструкций, целью которых является эффективный «сброс» ЖК-контроллера. & nbsp Далее, если желателен 4-битный интерфейс, имеется дополнительная инструкция Function Set для изменения интерфейса с 8-битная конфигурация по умолчанию.И наконец, есть еще четыре инструкции: «настоящий» Функциональный набор , включение / выключение дисплея . Управление , Clear Display и Entry Mode Set .
При подаче питания на ЖК-модуль контроллер ЖК-дисплея всегда работает в режиме 8-битного интерфейса. & nbsp Это означает, что ЖК-контроллер считывает все восемь своих выводов данных каждый раз, когда вывод включения находится в импульсе. & nbsp Это нормально, если 8-битные данные интерфейс действительно используется, но как насчет другой возможности, когда подключен 4-битный интерфейс данных? & nbsp В во втором случае в младших четырех битах могут быть неопределенные данные, особенно если эти контакты не были заземлены как рекомендуемые.& nbsp Ответ заключается в том, что контроллер был настроен так, чтобы игнорировать эти младшие четыре бита на протяжении всего раннего часть процесса инициализации, пока фактический интерфейс не будет установлен тем, что я назвал «реальным» набором функций инструкция в предыдущем абзаце.
Важно убедиться, что ЖК-контроллер завершил выполнение инструкции, прежде чем отправлять ему другую, в противном случае вторая инструкция будет проигнорирована.& nbsp В технических данных указано конкретное время задержек в начале то, что я называю «перезагрузкой». & nbsp Таблицы данных амбициозны, когда речь идет о временной задержке, связанной с концом этой последовательности и с изменением режима в 4-битной инициализации. & nbsp Для окончательной последовательности инструкций во всех таблицах данных указано, что вы должны либо проверить флаг занятости, чтобы увидеть, завершил ли ЖК-контроллер, либо подождать достаточного количества времени. количество времени, время, превышающее время выполнения инструкции.& nbsp Подробнее об этом ближе к концу страница.
Ниже вы найдете подробное объяснение 8-битной последовательности инициализации, за которым следует подробное объяснение 4-битной последовательности инициализации. последовательность инициализации. & nbsp В каждом случае я представляю версию блок-схемы из таблицы данных, свою версию блок-схемы и, наконец, некоторые примечания по каждому из шагов.
8-битный интерфейс, инициализация инструкцией
Вот блок-схема, представленная в техническом описании Hitachi.
Моя версия блок-схемы.
Скачать 8-битную блок-схему & nbsp (документ PDF)
Банкноты
Информации о том, что на самом деле происходит внутри ЖК-контроллера, очень мало. & nbsp я сделал некоторые предположения о том, что происходит, и есть ли у кого-либо фактическая информация, которая либо подтверждает, либо опровергает мои Думаю, я был бы признателен, если бы услышал от вас.& nbsp Контактная информация находится внизу страницы.
Шаг 1. Включение, затем задержка> 100 мс
В блок-схеме таблицы данных для этой начальной задержки указаны два разных значения (с двумя разными ссылками).
но ни одна из ссылок не относится к тому моменту, когда питание было впервые применено. Очевидно, что задержка, необходимая для включения питания, должна быть больше.
чем 40 мс, и я произвольно выбрал 100 мс. Поскольку эта задержка возникает только тогда, когда нет смысла пытаться
чтобы ускорить выполнение программы за счет экономии на этой задержке.
Шаг 2. & nbsp Инструкция 00110000b (30 часов), затем задержка> 4,1 мс
Это частный случай инструкции Function Se t, где младшие четыре бита не имеют значения. & nbsp Эти четыре
биты показаны звездочками на блок-схемах, потому что контроллер их игнорирует. & nbsp Они
показаны в этих примечаниях как «0», потому что именно так большинство программистов имеют дело с нерелевантными битами. & nbsp Это первое
Обучение по какой-то необъяснимой причине занимает значительно больше времени, чем последующие.
Шаг 3. & nbsp Инструкция 00110000b (30 часов), затем задержка> 100 мкс
Это второй случай особого случая инструкции Function Set . & nbsp Контроллер нормально не работает
ожидайте получения более одной инструкции «Набор функций», поэтому это может составлять более длительное, чем обычно, время выполнения.
Шаг 4. & nbsp Инструкция 00110000b (30 часов), затем задержка> 100 мкс
Это третий случай особого случая команды Function Set .& nbsp К настоящему времени контроллер LCD понимает
что на самом деле подразумевается «сброс», и теперь он готов для реальной команды набора функций , за которой следует
остальные инструкции по инициализации. & nbsp На блок-схемах не указывается, какая задержка здесь принадлежит. & nbsp у меня есть
выбрали 100 нас, чтобы согласиться с предыдущей инструкцией. & nbsp Здесь можно проверить флаг занятости.
Шаг 5. & nbsp Инструкция 00111000b (38h), затем задержите> 53 мкс или проверьте BF
Это настоящая инструкция набора функций .Здесь указываются интерфейс, количество строк и шрифт.
& nbsp Поскольку мы реализуем 8-битный интерфейс, мы делаем D = 1. & nbsp Количество указываемых здесь строк является числом
«логических» строк, воспринимаемых ЖК-контроллером, это НЕ количество «физических» строк (или строк), которые появляются на фактическом
отображать. & nbsp Это почти всегда должно быть две строки, поэтому мы устанавливаем N = 1 (см. рисунок). & nbsp Очень мало дисплеев, способных
отображение шрифта 5x10, поэтому выбор 5x7 почти всегда правильный, и мы устанавливаем F = 0.
Шаг 6. & nbsp Инструкция 00001000b (08h), затем задержите> 53 нас или проверьте BF
Это инструкция включения / выключения дисплея Control . & nbsp Эта инструкция используется для управления несколькими аспектами отображения.
но сейчас НЕ время настраивать дисплей так, как мы этого хотим. & nbsp Блок-схема показывает инструкцию как 00001000, а не
00001DCB, который указывает, что дисплей (D), курсор (C) и мигание (B) должны быть выключены путем выполнения
соответствующие биты = 0.
Шаг 7. & nbsp Инструкция 00000001b (01h), затем задержите> 3 мс или проверьте BF
Это команда Clear Display , которая, поскольку она должна записывать информацию по всем 80 адресам DDRAM, занимает больше времени.
выполнить, чем большинство других инструкций. & nbsp На некоторых блок-схемах комментарий неправильно помечен как "Отображать включен", но
сама инструкция правильная.
Шаг 8. & nbsp Инструкция 00000110b (06h), затем задержите> 53 мкс или проверьте BF
Это инструкция Entry Mode Set .& nbsp Эта инструкция определяет, в какую сторону перемещается курсор и / или дисплей.
когда мы вводим строку символов. & nbsp Обычно мы хотим, чтобы курсор увеличивался (перемещался слева направо), а отображение
чтобы не сдвигать, поэтому мы устанавливаем I / D = 1 и S = 0. & nbsp Если вашему приложению требуется другая конфигурация, вы можете изменить эту инструкцию,
но я рекомендую оставить эту инструкцию в покое и просто добавить еще одну инструкцию Entry Mode Set , где это необходимо.
в вашей программе.
Шаг 9. Инициализация завершена
Это конец фактической последовательности инициализации, но обратите внимание, что на шаге 6 дисплей отключен.
Шаг 10. Инструкция 00001100b (0Ch), затем задержите> 53 мкс или проверьте BF
Это еще одна инструкция по включению / выключению дисплея Control , в которой включен дисплей и где можно сделать видимым курсор.
и / или положение курсора можно заставить мигать.& nbsp В этом примере показано, что дисплей включен, а две другие опции выключены, D = 1,
C = 0 и B = 0.
4-битный интерфейс, инициализация инструкцией
Вот блок-схема, представленная в техническом описании Hitachi.
Моя версия блок-схемы.
Скачать 4-битную блок-схему & nbsp (документ PDF)
Банкноты
Эти примечания очень похожи на примечания для 8-битного интерфейса, потому что процедура инициализации очень похожа.& nbsp Первые четыре шага идентичны, потому что, как упоминалось ранее, ЖК-контроллер запускается в 8-битном режиме независимо от сколько строк данных фактически используется. & nbsp Так как это последовательность инициализации для 4-битного режима, есть только четыре линии данных подключены между микроконтроллером и ЖК-модулем, однако ЖК-контроллер в настоящее время в 8-битном режиме и ожидает данные на всех восьми выводах данных. & nbsp К счастью, для этого особого случая функции Установите команду , младшие четыре бита не имеют значения, поэтому тот факт, что они не подключены к микроконтроллеру, не имеет значения. тоже не имеет значения.& nbsp Здесь есть один дополнительный шаг, чтобы перейти на 4-битный интерфейс, который сбрасывает номера шагов после шага 4. Остальные шаги выглядят иначе, потому что они реализованы как две группы по 4 бита, но фактические инструкции такие же.
Шаг 1. Включение, затем задержка> 100 мс
В блок-схеме таблицы данных для этой начальной задержки указаны два разных значения (с двумя разными ссылками).
но ни одна из ссылок не относится к тому моменту, когда питание было впервые применено.Очевидно, что задержка, необходимая для включения питания, должна быть больше.
чем 40 мс, и я произвольно выбрал 100 мс. Поскольку эта задержка возникает только тогда, когда нет смысла пытаться
чтобы ускорить выполнение программы за счет экономии на этой задержке.
Шаг 2. & nbsp Инструкция 0011b (3h), затем задержка> 4,1 мс
Это частный случай команды Function Set , где младшие четыре бита не имеют значения. & nbsp Эти четыре
биты не показаны на блок-схемах, потому что микроконтроллер хоста обычно не реализует их вообще (в отличие от
8-битный режим, в котором они реализованы как «0»).& nbsp Эта первая инструкция по какой-то необъяснимой причине требует значительного
дольше, чем те, которые приходят позже.
Шаг 3. & nbsp Инструкция 0011b (3h), затем задержка> 100 мкс
Это второй случай особого случая инструкции Function Set . & nbsp Контроллер нормально не работает
ожидайте получения более одной инструкции «Набор функций», поэтому это может составлять более длительное, чем обычно, время выполнения.
Шаг 4. & nbsp Инструкция 0011b (3h), затем задержка> 100 мкс
Это третий случай особого случая команды Function Set . & nbsp К настоящему времени контроллер LCD понимает
что на самом деле подразумевается «сброс», и теперь он готов для реальной команды набора функций , за которой следует
остальные инструкции по инициализации. & nbsp На блок-схемах не указывается, какая задержка здесь принадлежит.& nbsp у меня есть
выбрали 100 нас, чтобы согласиться с предыдущей инструкцией. & nbsp Здесь можно проверить флаг занятости.
Шаг 5. & nbsp Инструкция 0010b (2h), затем задержка> 100 мкс
Здесь ЖК-контроллер ожидает «настоящую» команду Function Set , которая в 8-битном режиме запустится.
с 0011. & nbsp Вместо этого он получает команду Function Set , начинающуюся с 0010. & nbsp Это сигнал снова игнорировать
младшие четыре бита переключаются в четырехбитный режим и ожидают еще одну «настоящую» команду Function Set .& nbsp Еще раз
требуемая временная задержка - предположение.
Теперь ЖК-контроллер работает в 4-битном режиме. & nbsp Это означает, что ЖК-контроллер считывает только четыре вывода данных высокого порядка. каждый раз, когда на выводе Enable появляется импульс. & nbsp Для этого микроконтроллер хоста должен поместить в данные четыре старших бита. линии и подать импульс на вывод разрешения, затем он должен установить четыре младших бита на линии данных и снова подать импульс на вывод разрешения. & nbsp Там Нет необходимости в задержке между этими двумя последовательностями, потому что контроллер ЖК-дисплея еще не обрабатывает инструкцию.& nbsp После вторая группа битов данных получена, контроллер LCD восстанавливает и выполняет инструкцию, и это когда требуется задержка.
Шаг 6. & nbsp Инструкция 0010b (2h), затем 1000b (8h), затем задержка> 53 us или проверьте BF
Это настоящая инструкция набора функций . Здесь указываются интерфейс, количество строк и шрифт.
& nbsp Поскольку мы реализуем 4-битный интерфейс, мы делаем D = 0.& nbsp Здесь указывается количество строк.
«логических» строк, воспринимаемых ЖК-контроллером, это НЕ количество «физических» строк (или строк), которые появляются на фактическом
отображать. & nbsp Это почти всегда должно быть две строки, поэтому мы устанавливаем N = 1 (см. рисунок). & nbsp Очень мало дисплеев, способных
отображение шрифта 5x10, поэтому выбор 5x7 почти всегда правильный, и мы устанавливаем F = 0.
Шаг 7. & nbsp Инструкция 0000b (0h), затем 1000b (8h), затем задержка> 53 мкс или проверьте BF
Это инструкция включения / выключения дисплея Control .& nbsp Эта инструкция используется для управления несколькими аспектами отображения.
но сейчас НЕ время настраивать дисплей так, как мы этого хотим. & nbsp Блок-схема показывает инструкцию как 00001000, а не
00001DCB, который указывает, что дисплей (D), курсор (C) и мигание (B) должны быть выключены путем выполнения
соответствующие биты = 0.
Шаг 8. & nbsp Инструкция 0000b (0h), затем 0001b (1h), затем задержка> 3 мс, или проверьте BF
Это команда Clear Display , которая, поскольку она должна записывать информацию по всем 80 адресам DDRAM, занимает больше времени.
выполнить, чем большинство других инструкций.& nbsp На некоторых блок-схемах комментарий неправильно помечен как "Отображать включен", но
сама инструкция правильная.
Шаг 9. & nbsp Инструкция 0000b (0h), затем 0110b (6h), затем задержка> 53 мкс или проверьте BF
Это инструкция Entry Mode Set . & nbsp Эта инструкция определяет, в какую сторону перемещается курсор и / или дисплей.
когда мы вводим строку символов. & nbsp Обычно мы хотим, чтобы курсор увеличивался (перемещался слева направо), а отображение
чтобы не сдвигать, поэтому мы устанавливаем I / D = 1 и S = 0.& nbsp Если вашему приложению требуется другая конфигурация, вы можете изменить эту инструкцию,
но я рекомендую оставить эту инструкцию в покое и просто добавить еще одну инструкцию Entry Mode Set , где это необходимо.
в вашей программе.
Шаг 10. Инициализация завершена
Это конец фактической последовательности инициализации, но обратите внимание, что на шаге 6 дисплей отключен.
Шаг 11. & nbsp Инструкция 0000b (0h), затем 1100b (0Ch), затем задержка> 53 мкс или проверьте BF
Это еще одна инструкция по включению / выключению дисплея Control , в которой включен дисплей и где можно сделать видимым курсор.
и / или положение курсора можно заставить мигать.& nbsp В этом примере показано, что дисплей включен, а две другие опции выключены, D = 1,
C = 0 и B = 0.
О задержках
Важно убедиться, что ЖК-контроллер завершил выполнение инструкции, прежде чем отправлять ему другую, в противном случае вторая инструкция будет проигнорирована. & nbsp В технических данных указано время задержки включения и для первых нескольких инструкций. & nbsp После этого он указывает, что вы должны либо проверить флаг занятости, чтобы увидеть, контроллер завершает работу или ожидает достаточное количество времени, время, превышающее время выполнения инструкции.& nbsp В наборе команд есть столбец, в котором указано «типичное» время выполнения команд, и внизу этого столбца. в большинстве таблиц данных указана тактовая частота (часы ЖК-контроллера), для которой это время действительно. & nbsp Один лист данных, Я указал, что вы должны добавить 10% к значению при использовании программных временных задержек, но я был немного больше консервативный. & nbsp В таблице данных, из которой я получил приведенные выше блок-схемы, указано, что большинство инструкций выполняется за 37 мкс. с тактовой частотой 270 кГц.& nbsp В другом месте той же таблицы характеристики часов указывают, что они могут работать до 190 кГц, что увеличит время выполнения инструкции более чем на 40%. & nbsp Это "наихудший случай" которые я основал на рекомендуемых мною задержках.
.