Как подружить плату Ардуино с символьным дисплеем? Довольно просто! Все ниже по порядку и с подробностями.
Если есть желание получать информацию от Ардуино без подключения к компьютеру и вывода на серийный порт, можно использовать символьный дисплей. Сделать это не так сложно. Полученное удобство от общения неоценимо.
Для работы я использовал символьный LCD-дисплей J204A на базе чипа HD44780, на eBay часто встречается как LCD2004. 4 строки по 20 символов, инвертированный. Куплен с кучей других на eBay, за сущие копейки, от 60 до 100 рублей за штуку. Русский язык не поддерживается по-умолчанию, но это решаемая проблема, об этом как нибудь в следующий раз. И еще коннекторы на схеме не распаяны, придется поработать паяльником.
Для работы с дисплеями используется библиотека LiquidCrystal.h входящая в дефолтную постаку Arduino IDE.
Сам экран.
А результат мы получим вот такой!
На снимке ниже вся работа с паяльником уже выполнена. Гребенка припаяна так специально, с ориентацией подключения с верхней стороны, там же где и экран. Тут видно насколько удобно в таком случае подключать дисплей. Хотя, возможно, кому-то будет удобнее сразу втыкать дисплей в макетную плату, тогда лучше припаять контакты наоборот.
И с другой стороны.
Подключение контактов и использование устройства подробно описано в даташите.
Информация по микроконтроллеру дисплея HD44780-datasheet .
А вот даташита по дисплею LCD2004 я не нашел, но зато в интернетах полным полно таблиц по дисплею LCD1602. Но они практически не отличаются друг от друга. По управлению и подключению полностью идентичны. Отличие только в количестве строк/символов на дисплее. Но это абсолютно не повлияет если у вас 1602.
Читать PDF с техническими данными не обязательно. Ниже я все объясню в деталях, но если нужны подробности, то все можно найти в даташите.
В таблице определены все контакты. Если взять дисплей и повернуть его к себе, то контакты будут расположены слева направо, соответственно в таблице идут по увеличению номера. В колонке контакты в скобках указано обозначение в даташите.
# | Контакты | Для чего используется | Примечание |
1 | VSS (VSS) | GND. Земля. Питание микроконтроллера дисплея. | 0V |
2 | VDD (VCC) | Питающее напряжение для микроконтроллера дисплея. | +5V |
3 | V0 (VEE) | Контраст символов на дисплее. Подключать лучше через потенциометр. | от 0v до +5V |
4 | RS (RS) | Выбор регистра. | |
5 | RW (R/W) | Переключение режима чтения/записи. Утянем на землю, нам нужно только передавать информацию на дисплей. | 0-запись +5V-чтение |
6 | E | Тактирование | |
7 | D0 (DB0) | Передача данных. (Не будем использовать) | Данные |
8 | D1 (DB1) | Передача данных. (Не будем использовать) | Данные |
9 | D2 (DB2) | Передача данных. (Не будем использовать) | Данные |
10 | D3 (DB3) | Передача данных. (Не будем использовать) | Данные |
11 | D4 (DB4) | Передача данных. (Задействуется) | Данные |
12 | D5 (DB5) | Передача данных. (Задействуется) | Данные |
13 | D6 (DB6) | Передача данных. (Задействуется) | Данные |
14 | D7 (DB7) | Передача данных. (Задействуется) | Данные |
15 | A (LED+) | +5V Напряжение, подсветка дисплея, через потенциометр можно регулировать яркость дисплея. | +5V |
16 | K (LED-) | GND Земля, подсветка дисплея | 0V |

Передача данных к дисплею возможна в двух вариантах: по 8 и по 4 бит за такт. Т.к. Ардуино имеет мало контактов, мы будем использовать 4 — этого с лихвой хватает, чтоб обновлять информацию на дисплее с запредельной для восприятия скоростью.
Вот так все это дело у меня подключено. Возможно кажется что это хаос, но тут есть система. Можно выделить красные, зеленые, желтые и оранжевые провода. Красные всегда идут на +5V, зеленые — GND, а желтые и оранжевые — это провода для подключения к Ардуино, по которым идут данные.
Самая важная часть — физическое подключение дисплея. По клику открывается в большом разрешении, где все хорошо видно.
R1 — Резистор 200OM. Сопротивление ограничивающее ток, проходящий через подсветку дисплея.
R2 — Потенциометр с сопротивлением до 10kOM. Кутим ручку, подбираем контраст символов.
И крайне простой скетч, для вывода на экран пары строк.
Скачать.
/* http://compblog.vlukyanov.com */ #include <LiquidCrystal.h> // Подключаем библиотеку для работы с дисплеем. /* Командой LiquidCrystal lcd(rs, enable, d4, d5, d6, d7); создаем переменную типа LiquidCrystal И определяем через какие контакты Ардуино рабоает с дисплеем. подробнее про эту команду тут http://arduino.cc/en/Reference/LiquidCrystalConstructor */ LiquidCrystal lcd(6, 7, 8, 9, 10, 11); void setup() { lcd.begin(20, 4); // определяем характеристики дисплея (20 Символов в строке, 4 строки) // Для дисплея 1602 надо указывать lcd.begin(16, 2); lcd.setCursor(1, 1); // Указываем с какой позиции начать выводить текст. строки и символы начинаются с 0!!! // 1 уже отодвинет каретку на одно деление от начала экрана и сдвинет текст на одну строку ниже lcd.print("compblog.vlukyanov"); // выводим текст начиная с указанной позиции. lcd.setCursor(7, 2); // выводим с 8го символа на экране в третьей строке. lcd.print(".com"); // текст для вывода. } void loop() { // в цикле ни чего больше не делаем все уже сделано во время инициализации платы. }
Результат. Если знать, как все это подключается и как написать код, то время на все работы 5 минут.
Также дисплей может выполнять некоторые функции самостоятельно, а еще есть возможность задать некоторые параметры.
Например:
- Скролить текст;
- Мигать позицией курсора;
- Включаться/выключаться.
Обо всех функциях дисплея можно подробнее узнать тут: http://arduino.cc/en/Reference/LiquidCrystal
А теперь бонус!
Подсветка дисплея тратит энергию, которую, при питании от батареи, например, хотелось бы экономить. Я сделал для себя такой вариант — при нажатии на кнопку, включается подсветка дисплея на 5 секунд.
Дисплей подключен почти тем же способом. Осталось только добавить кнопку с вызовом прерывания.
Как сделать такую кнопку подробно описано вот тут: http://compblog.vlukyanov.com/?p=435
Кнопка подключена по этой схеме также ко второму контакту.
Нужно внести небольшие изменения в подключение.
1) Все провода дисплея остаются на местах кроме «А», он был подключен к +5V, теперь подключаем к четвертому пину Ардуино.
2) Добавить кнопку как показано на схеме к контакту 2. Если не понятно, как это сделать, еще раз говорю идем сюда и читаем статью: http://compblog.vlukyanov.com/?p=435
Скетч:
Скачать.
/* http://compblog.vlukyanov.com */ #include <LiquidCrystal.h> // Подключаем библиотеку для работы с дисплеем. int buttonInt = 0; // Номер прерывания, которое будет вызыватся. int screenLed = 4; // Номер пина к которому подключен экран. +5V volatile long x = 5000; // переменная для хранения времени LiquidCrystal lcd(6, 7, 8, 9, 10, 11); void setup() { attachInterrupt(buttonInt, screenon, FALLING); // параметры прерывания lcd.begin(20, 4); pinMode(screenLed, OUTPUT); digitalWrite(screenLed,HIGH); // включаем дисплей lcd.setCursor(0, 0); lcd.print("Start screenon test!"); } // Функция которая будет выполнятся при нажатии на кнопку. void screenon() { x = millis()+5000; // Запоминаем время, когда надо выключить подсветку. Текущее время работы +5 секунд. digitalWrite(screenLed,HIGH); // Подаем напряжение на подсветку дисплея. } void loop() { lcd.setCursor(0, 2); // переходим к третей строке lcd.print(x); // и выводим время когда дисплей выключится lcd.setCursor(0, 3); // переходим к четвертой строке lcd.print(millis()); // печатаем текущее время работы if ( x < millis() ) // если время работы выключения наступило > { digitalWrite(screenLed,LOW); // то гасим дисплей } }
И результат:
У меня таких экранчиков очень много, если кому то надо то могу отдать за пол цены.
А че почем?
У меня есть такой дисплей но только на контроллере, кому надо ???? Это от касового апарата, он подключаеться к КОМ-порту ? пишите на cxemotexnikaqq@ukr.net
расскажите пожалуйста
как русифицировать дисплей J204A
очень нужно)
Сейчас очень мало времени заниматься ардуино. Могу пока скинуть пару ссылок, где-то находил как это сделать, если еще актуально.
http://www.iso-energo.ru