LCD Keypad Shield – одна из самых популярных плат расширения для ардуино. Она может существенно упростить работу с жидкокристаллическими экранами, позволяя разработчику сосредоточиться на других задачах. В этой статье мы рассмотрим шилд LCD Keypad Shield для дисплея TC 1602 со встроенными 5 управляющими кнопками. Узнаем, как работает эта плата, как ее можно подключить к ардуино, рассмотрим несколько примеров скетчей в реальных проектах. Если вы не знаете, что такое шилд, то можете предварительно прочитать статью о платах расширениях и шилдах ардуино.
Описание шилда LCD Keypad Shield


Технические характеристики
- Тип дисплея: LCD 1602, символьный, 4-х битный режим.
- Разрешение: 16×2 (две строки по 16 символов каждая). Знакоместо 5×8 точек.
- Цвет дисплея: синий (возможны варианты с желтым и зеленым цветом). Буквы белого цвета.
- Технология: STN, Transflective, Positive.
- Контроллер дисплея: HD44780U.
- Предельная частота обновления экрана: 5Гц
- Питание дисплея: 5 Вольт
- Кнопки: 6 кнопок (5 кнопок управления и Reset).
- Дополнительные элементы: регулировка яркости подсветки (потенциометр).
- Рабочая температура экрана: от -20 °С до +70 °С;
- Температура хранения экрана: от -30 °С до +80 °С.
Распиновка LCD shield для подключения к Arduino
| Контакт дисплея LCD 1602 | Описание | Контакт на LCD Shield |
| Пины LCD экрана | ||
| GND | Земля | |
| VDD | Питание 5В | |
| Contrast | Управление контрастом | Потенциометр |
| RS | Команды/Данные | 8 |
| R/W | Чтение/Запись | |
| Enable | Включение (активирование) | 9 |
| DB0 | Не используется | |
| DB1 | Не используется | |
| DB2 | Не используется | |
| DB3 | Не используется | |
| DB4 | Дата 1 | 4 |
| DB5 | Дата 2 | 5 |
| DB6 | Дата 3 | 6 |
| DB7 | Дата 4 | 7 |
| Back LED + | Включение подсветки | 10 |
| Back LED – | Питание подсветки | |
| Пины для кнопок | ||
| Кнопка UP | Управляющая кнопка | A0 |
| Кнопка DOWN | Управляющая кнопка | A0 |
| Кнопка LEFT | Управляющая кнопка | A0 |
| Кнопка RIGHT | Управляющая кнопка | A0 |
| Кнопка SELECT | Управляющая кнопка | A0 |
| Reset | Перезагрузка платы | Reset |
| ICSP | ICSP для перепрошивки встроенного микроконтроллера HD44780U | |
| UART | Контакты для UART соединения | 0, 1 |
Дополнительные элементы шилда
- Индикаторный светодиод (включается при подключении питания к плате).
- Контактные площадки для подключения аналоговых устройств (GND, VSS, пин данных).
- Потенциометр для регулирования контрастностью экрана.
Подключение платы LCD Shield к Arduino
Подключение шилда очень простое – нужно попасть ножками в соответствующие разъемы платы ардуино и аккуратно совместить их. Ничего дополнительно подсоединять или припаивать не надо. Нужно помнить и учитывать тот факт, что часть пинов зарезервированы для управления дисплеем и кнопками и не может быть использована для других нужд! Для удобства подключения дополнительного оборудования на плате выведены дополнительные разъемы 5В и GND к каждой контактной площадке аналоговых пинов. Это, безусловно, упрощает работу с датчиками. Также можно подключать цифровые устройства через свободные пины 0-3 и 11-13. Подключив шилд, мы можем работать с экраном и кнопками на нем так же, как с отдельными устройствами, учитывая только номера пинов, к которым припаяны соответствующие контакты.
Скетч для экрана на Arduino LCD shield
Для работы с LCD экранами обычно используют популярную библиотеку LiquidCrystal . На этапе инициализации создается объект класса LiquidCrystal, в конструкторе которого мы указываем пины с подключенными контактами экрана. Для нашего шилда требуется использовать такой вариант: LiquidCrystal lcd(8, 9, 4, 5, 6, 7); Последовательность аргументов конструктора:
- RS (8)
- Enable (9)
- data(4)
- data(5)
- data(6)
- data(7)
Ничего сложного в работе с объектом нет. В setup() мы инициализируем объект, указывая ему количество символов и строк:
lcd.begin(16, 2);
Для вывода информации на дисплей используем метод print():
lcd.print (“Arduino Master!”);
Текст выведется в место текущего нахождения курсора (в начале работы скетча это первая строка и первый символ). Для указания произвольного положения курсора можно использовать функцию setCursor(<столбец>, <строка>):
lcd.setCursor(0, 0); // Первый символ первой строки lcd.setCursor(0, 1); // Первый символ второй строки lcd.setCursor(2, 1); // Третий символ второй строки
Кнопки LCD Keypad Shield
На плате присутствуют пять управляющих кнопок, работа с которыми ведется через один аналоговый пин A0. В шилде использован достаточно распространенный способ простого кодирования сигнала, при котором каждая кнопка формирует определенное значение напряжения, которое после АЦП преобразуется в соответствующее значение от 0 до 1023. Таким образом, мы можем передавать информацию о нажатии разных кнопок через один пин, считывая его при помощи функции analogRead();
Значения уровня сигнала на пине A0 в зависимости от выбранной кнопки:
| Нажатие кнопки | Значение на аналоговом пине |
| RIGHT | 0-100 |
| UP | 100-200 |
| DOWN | 200-400 |
| LEFT | 400-600 |
| SELECT | 600-800 |
| Клавиша не нажата | 800-1023 |
Пример скетча работы с кнопками LCD Keypad Shield:
int keyAnalog = analogRead(A0); if (keyAnalog < 100) { // Значение меньше 100 – нажата кнопка right // Выполняем какое-то действие для кнопки вправо. } else if (keyAnalog < 200) { // Значение больше 100 (иначе мы бы вошли в предыдущий блок результата сравнения, но меньше 200 – нажата кнопка UP // Выполняем какое-то действие для кнопки вверх } else if (keyAnalog < 400) { // Значение больше 200, но меньше 400 – нажата кнопка DOWN // Выполняем действие для кнопки вниз } else if (keyAnalog < 600) { // Значение больше 400, но меньше 600 – нажата кнопка LEFT // Выполняем действие для кнопки влево } else if (keyAnalog < 800) { // Значение больше 600, но меньше 800 – нажата кнопка SELECT // Выполняем действие для кнопки выбора пункта меню } else { // Все остальные значения (до 1023) будут означать, что нажатий не было }
В выбранном методе кодирования есть два главных недостатка:
- Нельзя отслеживать одновременное нажатие нескольких кнопок;
- Возможные искажения сигнала могут привести к ложным срабатываниям.
Нужно учитывать эти ограничения, выбирая этот шлд в своих проектах, если вы планируете использовать устройство в системах с большим количеством помех, которые могут искажать сигнал на входе A0, из-за чего АЦП может сформировать ошибочное значение и скетч в результате выполнит другие инструкции.
Пример скетча для работы с экраном и кнопками меню
В данном примере мы определяем текущую нажатую кнопку и выводим ее название на экран. Обратите внимание, что для удобства мы выделили операцию определения кнопки в отдельную функцию. Также в скетче мы выделили отдельный метод для вывода текста на экран. В ней мы показываем сообщение (параметр message) и очищаем его через секунду. Нужно помнить, что в течение этой секунды нажатия кнопок не обрабатываются
#include LiquidCrystal lcd(8, 9, 4, 5, 6, 7); #define BTN_UP 1 #define BTN_DOWN 2 #define BTN_LEFT 3 #define BTN_RIGHT 4 #define BTN_SELECT 5 #define BTN_NONE 10 int detectButton() { int keyAnalog = analogRead(A0); if (keyAnalog < 100) { // Значение меньше 100 – нажата кнопка right return BTN_RIGHT; } else if (keyAnalog < 200) { // Значение больше 100 (иначе мы бы вошли в предыдущий блок результата сравнения, но меньше 200 – нажата кнопка UP return BTN_UP; } else if (keyAnalog < 400) { // Значение больше 200, но меньше 400 – нажата кнопка DOWN return BTN_DOWN; } else if (keyAnalog < 600) { // Значение больше 400, но меньше 600 – нажата кнопка LEFT return BTN_LEFT; } else if (keyAnalog < 800) { // Значение больше 600, но меньше 800 – нажата кнопка SELECT return BTN_SELECT; } else { // Все остальные значения (до 1023) будут означать, что нажатий не было return BTN_NONE; } } void clearLine(int line){ lcd.setCursor(0, 1); lcd.print(" "); } void printDisplay(String message){ Serial.println(message); lcd.setCursor(0, 1); lcd.print(message); delay(1000); clearLine(1); } void setup() { Serial.begin(9600); lcd.begin(16, 2); lcd.print("Arduino Master"); delay(3000); lcd.setCursor(0, 0); lcd.print("Arduino Master"); } void loop() { int button = detectButton(); switch (button) { case BTN_UP: printDisplay("UP"); break; case BTN_DOWN: printDisplay("DOWN"); break; case BTN_LEFT: printDisplay("LEFT"); break; case BTN_RIGHT: printDisplay("RIGHT"); break; case BTN_SELECT: printDisplay("SELECT"); break; default: //printDisplay("Press any key"); break; } }
Краткие выводы по плате расширения LCD keypad shield
Плата расширения LCD Keypad достаточно популярная, она проста и удобна для использования в проектах Arduino. Сегодня ее можно легко купить практически в любом интернет-магазине.
Плюсы LCD Shield:
- Упрощает подключение жидкокристаллического экрана.
- Уменьшает общие размеры устройства, т.к. убирает выступающие провода и монтажные платы.
- Сокращает количество ошибок, связанных с неправильным монтажом и подключением.
- Добавляет функциональность кнопочного управления, если на плате установлены кнопки (LCD Keypad shield).
Недостатки:
- Стоимость шилда выше, чем стоимость отдельного экрана.
- Не всегда нужна дополнительная функциональность в виде кнопок.
- Шилд потребляет больше энергии, чем отдельные элементы платы.
Подключение LCD Keypad Shield к Arduino
- Подробности
- Создано: 19 августа 2015
Будем подключать LCD Keypad Shield к Arduino UNO R3. На шилде имеются кнопки, вот и попробуем с помощью них манипулировать нашей Ардуиной и результат выводить на дисплей.
Характеристики шилда
- Дисплей синего цвета с белыми буквами. Регулировка яркости подсветки
- Тип дисплея: Символьный
- Разрешение:16×2
- 6 кнопок
- Питание дисплея: 5 Вольт
- Работа дисплея: в 4 битном режиме
Подключение
Как и любой другой шилд подключается элементарно, просто втыкаем туда куда втыкается, ошибиться весьма трудно. При соединении с Arduino UNO R3 обе платы окажутся ровно одна под другой. Шилд совместим с Arduino (Diecimila, Duemilanove, UNO, Mega, Mega2560, Mega ADK).
В состав платы входит LCD дисплей и 6 кнопок. Пины 4, 5, 6, 7, 8, 9 и 10 задействованы для управления LCD. На аналоговый пин 0 считываются сигналы с кнопок. Дисплей в данной сборке работает в четырех битном режиме.
Скетч
В данном примере на дисплей будут выводиться направления (вверх, вниз, влево, вправо) и кнопка выбора, соответствующие нажатым кнопкам. Для работы потребуется библиотека LiquidCrystal.
#include<Wire.h>// добавляем необходимые библиотеки#include<LiquidCrystal.h>LiquidCrystallcd(8,9,4,5,6,7);// Нажатые кнопкиintbutton;constintBUTTON_NONE =;constintBUTTON_RIGHT =1;constintBUTTON_UP =2;constintBUTTON_DOWN =3;constintBUTTON_LEFT =4;constintBUTTON_SELECT=5;intgetPressedButton(){ intbuttonValue=analogRead();// считываем значения с аналогового входа(A0) if(buttonValue<100){ returnBUTTON_RIGHT; } elseif(buttonValue<200){ returnBUTTON_UP; } elseif(buttonValue<400){ returnBUTTON_DOWN; } elseif(buttonValue<600){ returnBUTTON_LEFT; } elseif(buttonValue<800){ returnBUTTON_SELECT; } returnBUTTON_NONE;}voidsetup(){ lcd.begin(16,2); lcd.print("www.2150692.ru");}voidloop(){ button=getPressedButton(); switch(button) { caseBUTTON_RIGHT:// при нажатии кнопки выводим следующий текст lcd.setCursor(,); lcd.print(" "); lcd.setCursor(,); lcd.print("BUTTON: RIGHT"); break; caseBUTTON_LEFT: lcd.setCursor(,); lcd.print(" "); lcd.setCursor(,); lcd.print("BUTTON: LEFT"); break; caseBUTTON_UP: lcd.setCursor(,); lcd.print(" "); lcd.setCursor(,); lcd.print("BUTTON: UP"); break; caseBUTTON_DOWN: lcd.setCursor(,); lcd.print(" "); lcd.setCursor(,); lcd.print("BUTTON: DOWN"); break; caseBUTTON_SELECT: lcd.setCursor(,); lcd.print(" "); lcd.setCursor(,); lcd.print("BUTTON: SELECT"); break; }}
Добавить комментарий
Технические характеристики
- Тип дисплея: LCD 1602, символьный, 4-х битный режим.
- Разрешение: 16×2 (две строки по 16 символов каждая). Знакоместо 5×8 точек.
- Цвет дисплея: синий (возможны варианты с желтым и зеленым цветом). Буквы белого цвета.
- Технология: STN, Transflective, Positive.
- Контроллер дисплея: HD44780U.
- Предельная частота обновления экрана: 5Гц
- Питание дисплея: 5 Вольт
- Кнопки: 6 кнопок (5 кнопок управления и Reset).
- Дополнительные элементы: регулировка яркости подсветки (потенциометр).
- Рабочая температура экрана: от -20 °С до +70 °С;
- Температура хранения экрана: от -30 °С до +80 °С.
Распиновка LCD shield для подключения к Arduino
| Контакт дисплея LCD 1602 | Описание | Контакт на LCD Shield |
| Пины LCD экрана | ||
| GND | Земля | |
| VDD | Питание 5В | |
| Contrast | Управление контрастом | Потенциометр |
| RS | Команды/Данные | 8 |
| R/W | Чтение/Запись | |
| Enable | Включение (активирование) | 9 |
| DB0 | Не используется | |
| DB1 | Не используется | |
| DB2 | Не используется | |
| DB3 | Не используется | |
| DB4 | Дата 1 | 4 |
| DB5 | Дата 2 | 5 |
| DB6 | Дата 3 | 6 |
| DB7 | Дата 4 | 7 |
| Back LED + | Включение подсветки | 10 |
| Back LED — | Питание подсветки | |
| Пины для кнопок | ||
| Кнопка UP | Управляющая кнопка | A0 |
| Кнопка DOWN | Управляющая кнопка | A0 |
| Кнопка LEFT | Управляющая кнопка | A0 |
| Кнопка RIGHT | Управляющая кнопка | A0 |
| Кнопка SELECT | Управляющая кнопка | A0 |
| Reset | Перезагрузка платы | Reset |
| ICSP | ICSP для перепрошивки встроенного микроконтроллера HD44780U | |
| UART | Контакты для UART соединения | 0, 1 |
Дополнительные элементы шилда
- Индикаторный светодиод (включается при подключении питания к плате).
- Контактные площадки для подключения аналоговых устройств (GND, VSS, пин данных).
- Потенциометр для регулирования контрастностью экрана.
Подключение платы LCD Shield к Arduino
Скетч для экрана на Arduino LCD shield
Для работы с LCD экранами обычно используют популярную библиотеку LiquidCrystal. На этапе инициализации создается объект класса LiquidCrystal, в конструкторе которого мы указываем пины с подключенными контактами экрана. Для нашего шилда требуется использовать такой вариант: LiquidCrystal lcd(8, 9, 4, 5, 6, 7).
Последовательность аргументов конструктора:
- RS (8)
- Enable (9)
- data(4)
- data(5)
- data(6)
- data(7)
Ничего сложного в работе с объектом нет. В setup() мы инициализируем объект, указывая ему количество символов и строк:
Для вывода информации на дисплей используем метод print():
Текст выведется в место текущего нахождения курсора (в начале работы скетча это первая строка и первый символ). Для указания произвольного положения курсора можно использовать функцию setCursor(<столбец>, <строка>):
На плате присутствуют пять управляющих кнопок, работа с которыми ведется через один аналоговый пин A0. В шилде использован достаточно распространенный способ простого кодирования сигнала, при котором каждая кнопка формирует определенное значение напряжения, которое после АЦП преобразуется в соответствующее значение от 0 до 1023. Таким образом, мы можем передавать информацию о нажатии разных кнопок через один пин, считывая его при помощи функции analogRead().
Значения уровня сигнала на пине A0 в зависимости от выбранной кнопки:
| Нажатие кнопки | Значение на аналоговом пине |
| RIGHT | 0-100 |
| UP | 100-200 |
| DOWN | 200-400 |
| LEFT | 400-600 |
| SELECT | 600-800 |
| Клавиша не нажата | 800-1023 |
Пример скетча работы с кнопками LCD Keypad Shield:
Оригинал статьи на сайте ArduinoMaster.Ru.
Купить LCD Keypad Shield в интернет-магазине Arduinka.Pro
Похожие статьи
Управление Arduino с помощью джойстикаАдресная светодиодная лента WS2812 и ArduinoУправление сервоприводом на ArduinoИспользуемые источники:
- https://arduinomaster.ru/platy-arduino/arduino-lcd-keypad-shield/
- https://2150692.ru/faq/57-podklyuchenie-lcd-keypad-shield-k-arduino
- https://arduinka.pro/blog/podklyuchenie/podklyuchenie-modul-lcd-keypad-shield-1602-k-arduino/

Умный дом на базе Ардуино: пошаговая инструкция по сборке
Что такое Ардуино? Это свобода для изобретателя
Видео и фото обзор стартового набора Arduino для UNO R3 из посылки на Aliexpress
Датчики давления Arduino bmp280, bmp180, bme280
Метеостанция (Arduino pro mini, BME280, LCD1602)
ЧПУ СТАНОК НА ARDUINO: ДВИГАТЕЛИ И ДРАЙВЕРЫ
ОБОРУДОВАНИЕ
ТЕХНОЛОГИИ
РАЗРАБОТКИ