Ардуино подключение дисплея 0802

ЖКИ дисплей WH0802 подключение к Ардуино [Много проводов]

Друзья, если Вы хотите купить жидко кристаллический индикатор и подключить его к Ардуино, не вздумайте покупать жки дисплей с параллельным интерфейсом. Это ужасно неудобно.
На планете 21-й век. Параллельный интерфейс обходится дешевле чем последовательный. Но последний очень экономит время, место и нервы.
Далее подключим ЖКИ дисплей используя не 8 битную, а 4х битную передачу, но все равно замучаемся паять и «прислонять» провода в ардуину.

Сам дисплей выглядит просто. В моем случае без подсветки.

Ниже на рисунке предоставлена распиновка индикатора.

Сказать про WH0802 можно то что он может выводить на экран всего 2 строки по 8 символов.
Дисплей WH0802 может работать как регистр, а это значит что на дисплей можно выводить информацию и считывать. В примере ниже мы будем только выводить данные на экран.
Дисплей требует подстроечный резистор 10 кОм для регулировки контраста. Без резистора можете просто ничего не увидеть.

В общем не буду предоставлять датащит на дисплей WH0802A, он есть по первой ссылке в Google. Повторюсь, прежде чем покупать дисплей, поднакопите и купите SerialLcd который позволит всего по 4м проводам подключить его к ардуино.
На первом фото изображена ардуино НАНО, и давайте посчитаем. Что бы подключить дисплей WH0802A к ардуино необходимо 4 провода для передачи данных (для 4х битной передачи), 2 провода для питания дисплея, и еще 2 управляющих провода. 3 провода для подключения подстроечного резистора (в моем случае понадобилось 3) я не учитываю.
В итоге получилось 8 проводов минимум которые будут подключены к Arduino NANO которая и без того маленькая.

Ниже приведен удивительно маленький рабочий код программы для вывода текста на дисплей WH0802.

Источник

Текстовый экран 8×2: инструкция по подключению и примеры использования

Текстовый дисплей 8×2 пригодится для вывода показаний датчиков, отображения простых меню, подсказок и приветствий.

Видеообзор

Примеры работы для Arduino

В качестве примера подключим дисплей к управляющей плате Arduino Uno.

Подключение к Arduino

Вывод Обозначение Пин 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

Для упрощения работы с LCD-дисплеем используйте встроенную библиотеку Liquid Crystal. В ней вы найдёте примеры кода с подробными комментариями.

Вывод текста

Для вывода первой программы приветствия, воспользуйтесь кодом вроде этого:

Кирилица

Существует два способа вывода кирилицы на текстовые дисплеи:

Рассмотрим оба способа более подробно.

Таблица знакогенератора

Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв.

Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.

Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности \x## встроить в строку код символа:

Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0-9 и A-F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются.

Сравните две строки кода для вывода надписи «Яeee»:

Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:

Переключение страниц знакогенератора

Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:

Дисплей не может одновременно отображать символы разных страниц.

Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.

Полную таблицу символов с кодами можно найти в документации к экрану.

Использование библиотеки LiquidCrystalRus

Совсем не обязательно мучатся со знакогенератором, чтобы вывести русский символ. Для решения проблемы скачайте и установите библиотеку LiquidCrystalRus.

Это копия оригинальной библиотеки LiquidCrystal с добавлением русского языка. Добавленный в библиотеку код трансформирует русские символы UTF8 в правильные коды для текстового экрана.

В качестве примера выведем фразу «Привет, Амперка» на дисплей.

Примеры работы для Espruino

В качестве примера подключим дисплей к управляющей плате Iskra JS.

Подключение к 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

Для работы с LCD-дисплеем из среды Espruino существует библиотека HD44780.

Вывод текста

Для вывода программы приветствия, воспользуйтесь скриптом:

Кирилица

Вывод кирилицы на дисплей с помощью платформы Iskra JS доступен через встроенную в дисплей таблицу знакогенератора.

Таблица знакогенератора

Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв.

Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.

Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности \x## встроить в строку код символа:

Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0–9 и A–F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются.

Сравните две строки кода для вывода надписи «Яeee»:

Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:

Переключение страниц знакогенератора

Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:

Дисплей не может одновременно отображать символы разных страниц.

Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.

Полную таблицу символов с кодами можно найти в документации к экрану.

Комнатный термометр

Дисплей удобен для отображения показаний модулей и сенсоров. Сделаем задатки «Умного Дома», а именно «комнатный термометр».

Источник

ОБОРУДОВАНИЕ
ТЕХНОЛОГИИ
РАЗРАБОТКИ

Блог технической поддержки моих разработок

Урок 23. Подключение ЖК (LCD) индикаторов к Ардуино. Библиотека LiquidCrystal.

В уроке поговорим о знакосинтезирующих жидкокристаллических индикаторах, о подключении их к плате Ардуино и управлении индикаторами с помощью библиотек LiquidCrystal и LiquidCrystalRus.

Светодиодные семисегментные индикаторы хотя и являются самым дешевым вариантом индикации для электронных устройств, но их применение ограничено двумя существенными недостатками.

  • Практически сложно подключить к микроконтроллеру более 8ми разрядов светодиодных индикаторов. Требуется большое число выводов, значительные токи индикаторов, сложные ключи, низкая частота регенерации и т.п.
  • Невозможно отображать на семисегментных индикаторах символьную информацию.

Для вывода текстовой информации или чисел размером более 4 разряда гораздо практичнее использовать жидкокристаллические знакосинтезирующие индикаторы (дисплеи). К их достоинствам следует отнести:

  • удобный для подключения к микроконтроллерам интерфейс;
  • малая потребляемая мощность;
  • низкое напряжение питания;
  • долговечность.

На рынке существует большое число разнообразных жидкокристаллических (LCD) индикаторов разных производителей. Практически все они аналогичны по параметрам, сигналам интерфейсов, командам управления. В данный момент наиболее распространенными ЖК индикаторами на российском рынке являются устройства производства компании Winstar, Тайвань. Я буду ссылаться на индикаторы этой фирмы. Но информация вполне применима и для символьных LCD дисплеев других производителей.

Общие сведения.

Знакосинтезирующие или символьные индикаторы отображают информацию в виде знакомест определенной разрядности. Одно знакоместо отображает один символ. Количество знакомест определяет разрядность индикатора. Информация на индикаторах может выводиться на нескольких строках, поэтому для индикаторов такого типа всегда указывается число символов в строке и число строк.

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

Для управления жидкокристаллической матрицей и организации интерфейса индикатора используется встроенный контроллер HD44780 или его полные аналоги. Этот контроллер определяет сигналы интерфейса индикатора и команды управления.

HD44780 стал де-факто стандартом для символьных жидкокристаллических (LCD) дисплеев. Техническую документацию по контроллеру HD44780 в формате PDF можно посмотреть по этой ссылке — HD44780.pdf. Может кому-то больше понравится документация одного из аналогов этого контроллера – SPLC780D. Ссылка в формате PDF – SPLC780.pdf.

Символьные LCD индикаторы фирмы Winstar.

Мне известны следующие варианты ЖК индикаторов этой фирмы.

Тип индикатора Формат отображения, символов x строк Габариты, мм Размеры видимой области, мм Ссылка на документацию, формат PDF
WH0802A1 8 x 2 58 x 32 38 x 16
WH1202A 12 x 2 55,7 x 32 46 x 14,5
WH1601A 16 x 1 80 x 36 66 x 16
WH1601B 16 x 1 85 x 28 66 x 16
WH1601L 16 x 1 122 x 33 99 x 13
WH1602A 16 x 2 84 x 44 66 x 16
WH1602B 16 x 2 80 x 36 66 x 16
WH1602C 16 x 2 80 x 36 66 x 16
WH1602D 16 x 2 85 x 30 66 x 16
WH1602J 16 x 2 80 x 36 66 x 16
WH1602L1 16 x 2 122 x 44 99 x 24
WH1602M 16 x 2 85 x 32,6 66 x 16
WH1602O 16 x 2 85 x 25,2 66 x 16
WH1602P 16 x 2 85 x 25,2 66 x 16
WH1602S 16 x 2 59 x 29,3 52 x 15
WH1602T 16 x 2 65,4 x 28,2 54,8 x 19
WH1602W 16 x 2 80 x 36 66 x 16
WH1602V2 16 x 2 66,7 x 23,3 61 x 15,9
WH1604A 16 x 4 87 x 60 62 x 26
WH1604B 16 x 4 70,6 x 60 60 x 32,6
WH2002A 20 x 2 116 x 37 85 x 18,6
WH2002D 20 x 2 89 x 21,5 75 x 15
WH2002L 20 x 2 180 x 40 149 x 23
WH2002M 20 x 2 146 x 43 123 x 23
WH2004A 20 x 4 98 x 60 77 x 25,2
WH2004B 20 x 4 98 x 60 77 x 25,2
WH2004D 20 x 4 77 x 47 60 x 22
WH2004G 20 x 4 87 x 58 74,4 x 24,8
WH2004H 20 x 4 87 x 58 74,4 x 24,8
WH2004L 20 x 4 146 x 62,5 123,5 x 43
WH2402A 24 x 2 118 x 36 94,5 x 16
WH4002A 40 x 2 182 x 33,5 154,4 x 16,5
WH4004A 40 x 4 190 x 54 147 x 29,5

Подключение LCD индикатора к микроконтроллеру.

Схемы подключения, временные диаграммы, параметры сигналов, команды управления, коды символов подробно расписаны в документации на контроллер HD44780. Я приведу только самые необходимые данные о подключении индикаторов к микроконтроллерам.

Как правило, LCD индикаторы имеют 16 выводов.

Номер вывода Сигнал I — вход O — выход Назначение сигнала
1 Vss Земля (общий провод)
2 Vdd Питание + 5 В
3 Vo Управление контрастностью дисплея. Вход для подключения среднего вывода делителя напряжения + 5 В. Можно использовать подстроечный резистор сопротивлением 10-20 кОм.
4 RS I Выбор регистра: 0 – регистр команд; 1 – регистр данных. Низкий уровень сигнала означает, что на шине данных сформирована команда, высокий уровень – на шине данные.
5 R/W I Направление передачи данных:

Во многих приложениях функция чтения не используется, поэтому сигнал часто подключается к земле.

6 E I Строб операции шины (по отрицательному фронту).
7 DB0 I/O Младшие биты восьми битного режима. При четырех битном интерфейсе не используются.
8 DB1 I/O
9 DB2 I/O
10 DB3 I/O
11 DB4 I/O Старшие биты восьми битного режима или биты данных четырех битного интерфейса.
12 DB5 I/O
13 DB6 I/O
14 DB7 I/O
15 A Анод питания подсветки (+).
16 K Катод питания подсветки (-). Ток должен быть ограничен.

Номер вывода (первый столбец) приведен для наиболее распространенного варианта. Лучше проверьте, загрузив документацию на Ваш тип индикатора из таблицы предыдущего раздела.

Символьные ЖК дисплеи поддерживают два варианта подключения к микроконтроллеру:

  • С использованием 8ми битной шины данных. Подключаются все сигналы шины DB0-DB7. За один цикл обмена передается байт информации.
  • С применением 4х битной шины данных. Подключаются только 4 старшие разряда DB4-DB7. Информация передается по четыре бита за один такт шины.

Первый вариант обеспечивает передачу данных на дисплей с большей скоростью. Второй – требует для подключения индикатора на 4 вывода меньше. Несомненно, важнее сократить число выводов для подключения, чем увеличить скорость обмена. Тем более, что LCD индикаторы довольно медленные устройства со временем цикла регенерации 10-20 мс.

Подключение символьного ЖК (LCD) дисплея к плате Ардуино.

Я буду подключать индикатор WH2004A (4 строки по 20 символов) в четырех битном режиме обмена к плате Arduino UNO R3. Документацию на LCD дисплей WH2004 можете посмотреть по этой ссылке WH2004.pdf.

Схема выглядит так.

Резисторы R2 и R3 определяют контрастность индикатора. Можете подключить подстроечный резистор и установить необходимую четкость изображения. Я часто использую индикаторы WH2004, и в своих схемах выбираю такие номиналы резисторов.

Светодиоды подсветки индикатора я подключил к источнику питания 5 В через резистор R1 (30 Ом). Этим я задал ток порядка 25 мА. Тускло, но светится. В темноте видно хорошо. Хотя индикаторы WH2004 допускают ток подсветки до 580 мА.

Библиотека для управления LCD индикаторами в системе Ардуино LiquidCrystal.

Существует стандартная библиотека для управления ЖК индикаторами на базе контроллера HD44780. Подробно опишу ее методы.

LiquidCristal(…)

Конструктор класса. Может иметь разное число аргументов.

  • LiquidCristal(rs, en, d4, d5, d6, d7) – четырех битный интерфейс, сигнал RW не используется (подключен к земле).
  • LiquidCristal(rs,rw, en, d4, d5, d6, d7) – четырех битный интерфейс, сигнал RW используется.
  • LiquidCristal(rs, en, d0, d1, d2, d3, d4, d5, d6, d7) – восьми битный интерфейс, сигнал RW не используется (подключен к земле).
  • LiquidCristal(rs, rw, en, d0, d1, d2, d3, d4, d5, d6, d7) – восьми битный интерфейс, сигнал RW используется.
  • rs – номер вывода сигнала RS;
  • rw – номер вывода сигнала RW;
  • en – номер вывода сигнала E;
  • d0, d1, d2, d3, d4, d5, d6, d7 – номера выводов шины данных.

LiquidCrystal disp(6, 7, 2, 3, 4, 5);

void begin(cols, rows)

Инициализирует интерфейс индикатора. Задает размерность индикатора. Метод должен быть вызван первым, до использования других функций класса.

  • cols – количество символов в строке;
  • rows – число строк.

disp.begin(20, 4); // используем дисплей – 4 строки по 20 символов

void clear()

Очистка экрана, установка курсора в верхний левый угол.

disp.clear(); // сброс дисплея

void home()

Установка курсора в верхний левый угол.

disp.home(); // в начало экрана

void setCursor(col, row)

Устанавливает курсор в заданную позицию.

  • col – координата X, нумерация с 0;
  • row – координата Y, нумерация с 0.

setCursor(0,1); // курсор в начало второй строки

byte write(data)

Выводит символ на экран. Возвращает количество переданных байтов.

Следующий скетч выводит на экран данные с последовательного порта. Данные можно передать монитором порта Arduino IDE.

// вывод данных последовательного порта на LCD индикатор
#include

LiquidCrystal disp(6, 7, 2, 3, 4, 5); // создаем объект
char data;

void setup()
<
Serial.begin(9600); // инициализируем последовательны порт
disp.begin(20, 4); // инициализируем дисплей 4 строки по 20 символов
>

void loop()
<
if (Serial.available()) < // если есть данные
data= Serial.read(); // читаем символ
if( (data != 0xd) && (data != 0xa) ) < // перевод строки
disp.write(data); // выводим символ на экран
>
>
>

У меня индикатор большой – 4 строки по 20 символов. В нем установлены два контроллера HD44780. Поэтому последовательно передаваемые символы заполняют сначала первую строку, затем третью, дальше вторую и четвертую. Т.е. через строку. Надо учитывать это свойство для определенных типов индикаторов. В документации на каждый LCD индикатор указывается последовательность адресации символов.

byte print(data)

Выводит на экран текст. Возвращает количество переданных байтов.

Функция имеет различные формы вызова для разных форматов и типов данных.

print(char d) Если аргумент типа char выводит код символа

char d= 83;
disp.print(d); // выводит символ S
disp.print(‘S’); // выводит символ S

print(int d) Если аргумент – целый тип, то выводит строку с десятичным представлением числа

int d= 83;
disp.print(d); // выводит строку “83”
disp.print(83); // выводит строку “83”

print(float) Вещественные типы выводятся символами ASCII, два знака после запятой

float d= 7.65432;
disp.print(d); // выводит строку “7.65”
disp.print(7.65432); // выводит строку “7.65”

print(* str) Если аргумент указатель на строку, то выводится текстовая строка.

char letters[3]= <65, 66, 67>;
disp.print(“Letters”); // выводит строку “Letters”
disp.print(letters); // выводит строку из 3 символов с кодами 65, 66, 67

print(int d, DEC) Выводит строку ASCII — десятичное представление числа

int d= 83;
disp.print(d, DEC); // вывод строку “83”

print(int d, HEX) Выводит строку ASCII – шестнадцатиричное представление числа

int d= 83;
disp.print(d, HEX); // вывод строку “53”

print(int d, OCT) Выводит строку ASCII – восьмеричное представление числа

int d= 83;
disp.print(d, OCT); // вывод строку “123”

print(int d, BIN) Выводит строку ASCII – двоичное представление числа

int d= 83;
disp.print(d, BIN); // вывод строку “01010011”

print(float d, N) Для вещественных чисел параметр N задает количество цифр после запятой.

disp.print(7.65432, 0); // выводит строку “7”
disp.print(7.65432, 2); // выводит строку “7.65”
disp.print(7.65432, 4); // выводит строку “7.6543”

Пример программы, печатающей на дисплее текстовую строку.

// вывод текстовой строки на LCD индикатор
#include

LiquidCrystal disp(6, 7, 2, 3, 4, 5); // создаем объект

void setup()
<
disp.begin(20, 4); // инициализируем дисплей 4 строки по 20 символов
disp.print(«Test string»);
>

void loop()

void cursor()

Включает режим отображения курсора. Позиция, куда будет выведен следующий символ, подчеркивается.

disp.cursor(); // разрешаем отображение курсора

void noCursor()

Запрещает отображение курсора.

disp.noCursor(); // запрещаем отображение курсора

void blink()

Включает режим мигающего курсора. Используется совместно с функцией cursor(). Результат зависит от конкретной модели индикатора.

disp.blink(); // разрешаем мигающий курсор

void noBlink()

Отключает режим мигающего курсора.

disp.noBlink(); // запрещаем мигающий курсор

void display()

Включает экран после того, как он был выключен функцией noDisplay(). На экране отобразится информация, которая была до выключения.

disp.display(); // включаем дисплей

void noDisplay()

Выключает экран. Информация сохраняется в памяти и появляется при включении дисплея.

disp.noDisplay(); // выключаем дисплей

void scrollDisplayLeft()

Прокручивает содержимое дисплея на один символ влево.

disp. scrollDisplayLeft(); // сдвигаем все влево

void scrollDisplayRight()

Прокручивает содержимое дисплея на один символ вправо.

disp. scrollDisplayRight(); // сдвигаем все вправо

void autoscroll()

Включение режима автоматической прокрутки текста. При выводе каждого символа, весь текст на экране будет сдвигаться на один символ. В какую сторону сдвигается информация определяют функции leftToRight() и rightToLeft().

disp. autoscroll()(); // включаем автопрокрутку

void noAutoscroll()

Выключение автоматической прокрутки текста.

disp. noAutoscroll()(); // запрещаем автопрокрутку

void leftToRight()

Задает режим вывода теста слева-направо. Новые символы будут появляться справа от предыдущих.

leftToRight(); // режим слева-направо

void rightToLeft()

Задает режим вывода теста справа-налево. Новые символы будут появляться слева от предыдущих.

rightToLeft(); // режим справа-налево

void createChar(num, data)

Метод для создания пользовательского символа. Контроллер допускает создание до 8 символов (0…7) размером 5×8 пикселей. Изображение символа задается массивом размерностью 8 байт. 5 младших битов каждого байта определяют состояние пикселей строки.

Для вывода пользовательского символа можно использовать функцию write() с номером символа.

// создание пользовательского символа
#include

LiquidCrystal disp(6, 7, 2, 3, 4, 5); // создаем объект

byte smile[8] = <
B00000000,
B00010001,
B00000000,
B00000000,
B00010001,
B00001110,
B00000000,
B00000000
>;

void setup()
<
disp.createChar(0, smile); // создаем символ
disp.begin(20, 4); // инициализируем дисплей 4 строки по 20 символов
disp.print(«Smile «);
disp.write(byte(0)); // выводим символ
>

void loop()

На форуме сайта есть программа для создания кодов символов.

Отображение кириллицы.

Большинство LCD дисплеев на российском рынке поддерживают кириллические символы, но коды этих символов не соответствуют ASCII стандарту. Поэтому выводится полная белиберда.

Первый выход – задавать символы их правильными кодами в явном виде. Коды можно посмотреть в документации на контроллер HD44780.

Например коды символов:

Вот программа, которая выводит кириллические символы “АБВГ” таким способом.

// вывод кириллицы кодами символов
#include

LiquidCrystal disp(6, 7, 2, 3, 4, 5); // создаем объект

void setup()
<
disp.begin(20, 4); // инициализируем дисплей 4 строки по 20 символов
disp.print(«\x41\xa0\x42\xa1»);
>

void loop()

Не очень удобно, но если символов немного, то вполне приемлемо. Есть программы, которые переводят кириллический текст в коды.

Библиотека с поддержкой кириллицы LiquidCrystalRus.

Практичный вариант для вывода текста на русском языке – использовать библиотеку LiquidCrystalRus. Загрузить ее можно по этой ссылке LiquidCrystalRus-1.6.0.zip.

Вот пример программы, выводящей на экран русский алфавит.

// вывод русского алфавита
#include

LiquidCrystalRus disp(6, 7, 2, 3, 4, 5); // создаем объект

void setup()
<
disp.begin(20, 4); // инициализируем дисплей 4 строки по 20 символов
disp.print(«абвгдеёжзийклмнопрст»);
disp.print(«АБВГДЕЁЖЗИЙКЛМНОПРСТ»);
disp.print(«уфхцчшщьыьэюя «);
disp.print(«УФХЦЧШЩЫЬЭЮЯ «);
>

void loop()

В моем индикаторе два контроллера HD44780. Поэтому отображение через строку и мне пришлось в программе нарушить последовательность вывода строк.

Как видите, работать с символьными LCD дисплеями намного проще, чем кажется.

Источник

Adblock
detector