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

Основные области применения шилда: создание управляющих модулей, реализующих настройки Pin-Up с помощью интерфейса меню. Экран шилда можно использовать для вывода информации, получаемой с датчиков, с возможностью выполнения пользователем каких-либо действий путем нажатия на встроенные кнопки. Естественно, можно найти и другие способы использования платы: например, реализовать игру типа тетрис.
Технические характеристики
- Тип дисплея: LCD 1602, символьный, 4-х битный Pin-Up
- Разрешение: 16×2 (две Pin-Up по 16 символов каждая). Знакоместо 5×8 точек.
- Цвет дисплея: синий (возможны варианты с желтым и зеленым цветом). Буквы белого Pin-Up
- Технология: STN, Transflective, Positive.
- Контроллер дисплея: HD44780U.
- Предельная частота обновления экрана: 5Гц
- Питание дисплея: 5 Вольт
- Кнопки: 6 кнопок (5 кнопок Pin-Up и Reset).
- Дополнительные элементы: регулировка Pin-Up подсветки (потенциометр).
- Pin-Up температура экрана: от -20 °С до +70 °С;
- Pin-Up хранения экрана: от -30 °С до +80 °С.
Распиновка LCD Pin-Up для подключения к 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 для перепрошивки встроенного Pin-Up HD44780U | |
| UART | Контакты для UART соединения | ул. Сатпаева, 135 |
Дополнительные элементы шилда
- Индикаторный светодиод (включается при Pin-Up питания к плате).
- Контактные площадки для подключения аналоговых устройств (GND, VSS, пин Pin-Up
- Потенциометр для регулирования контрастностью экрана.
Pin-Up платы LCD Shield к Arduino
Подключение шилда очень простое - нужно попасть ножками в Pin-Up разъемы платы ардуино и аккуратно совместить их. Ничего дополнительно подсоединять или припаивать не надо. Нужно помнить и учитывать тот факт, что часть пинов зарезервированы для управления дисплеем и кнопками и не может быть использована для других нужд! Для удобства подключения дополнительного оборудования на плате выведены дополнительные разъемы 5В и GND к каждой контактной площадке аналоговых пинов. Это, безусловно, упрощает работу с датчиками. Также можно подключать цифровые устройства через свободные пины 0-3 и 11-13. Подключив шилд, мы можем работать с экраном и кнопками на нем так же, как с отдельными устройствами, учитывая только номера пинов, к которым припаяны соответствующие контакты.
Pin-Up для экрана на Arduino LCD shield
Для работы с LCD Pin-Up обычно используют популярную библиотекуLiquidCrystal. На этапе инициализации создается объект класса LiquidCrystal, в конструкторе которого мы указываем пины с подключенными Pin-Up экрана. Для нашего шилда требуется использовать такой вариант: LiquidCrystal lcd(8, 9, 4, 5, 6, 7); Последовательность аргументов конструктора:
- RS (8)
- Enable (9)
- data(4)
- data(5)
- data(6)
- data(7)
Ничего сложного в работе с объектом Pin-Up В setup() мы инициализируем объект, указывая ему количество символов и строк:
lcd.begin(16, 2);
Для вывода информации на дисплей используем метод Pin-Up
lcd.print (“Arduino Master!”);
Текст выведется в место текущего нахождения курсора (в Pin-Up работы скетча это первая строка и первый символ). Для указания произвольного положения курсора можно использовать функцию setCursor(<столбец>, <строка>):
lcd.setCursor(0, 0); Pin-Up 1); /setCursor(2, 1); // Третий символ второй строки
Кнопки LCD Keypad Shield
На плате присутствуют пять управляющих кнопок, работа с которыми ведется через один аналоговый пин A0. В шилде использован достаточно распространенный способ простого кодирования сигнала, при котором каждая кнопка Pin-Up определенное значение напряжения, которое после АЦП преобразуется в соответствующее значение от 0 до 1023. Таким образом, мы можем передавать информацию о нажатии разных кнопок через один пин, считывая его при помощи функцииanalogRead();
Pin-Up уровня сигнала на пине A0 в зависимости от выбранной кнопки:
| Нажатие кнопки | Значение на аналоговом пине |
| RIGHT | 0-100 |
| UP | 100-200 |
| DOWN | 200-400 |
| LEFT | 400-600 |
| SELECT | 600-800 |
| Клавиша не нажата | 800-1023 |
Pin-Up скетча работы с кнопками LCD Keypad Shield:
int keyAnalog = analogRead(A0); if (keyAnalog < 100) { // Значение меньше 100 - Pin-Up кнопка 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) будут означать, что нажатий не было }В выбранном Pin-Up кодирования есть два главных недостатка:
- Нельзя Pin-Up одновременное нажатие нескольких кнопок;
- Возможные искажения Pin-Up могут привести к ложным срабатываниям.
Нужно учитывать эти ограничения, выбирая этот шлд в своих проектах, если вы планируете использовать устройство в системах с большим количеством помех, которые могут Pin-Up сигнал на входе A0, из-за чего АЦП может сформировать ошибочное значение и скетч в результате выполнит другие инструкции.
Пример скетча для работы с экраном и Pin-Up меню
В данном примере мы определяем текущую нажатую кнопку и выводим ее название на экран. Обратите внимание, что для удобства мы выделили операцию определения кнопки в отдельную функцию. Также в скетче мы выделили отдельный метод для вывода текста на Pin-Up В ней мы показываем сообщение (параметр message) и очищаем его через секунду. Нужно помнить, что в течение этой секунды нажатия кнопок не обрабатываются
#include <LiquidCrystal.h> 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 - нажата кнопка Pin-Up return BTN_DOWN; } else if (keyAnalog < 600) { // Значение больше 400, но меньше 600 - нажата кнопка LEFT return BTN_LEFT; } else if (keyAnalog < 800) { // Значение больше 600, но меньше 800 - нажата кнопка SELECT return BTN_SELECT; } else { /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; } }Краткие выводы по плате Pin-Up LCD keypad shield
Плата расширения LCD Keypad достаточно популярная, она проста и удобна для использования в проектах Arduino. Сегодня ее Pin-Up легко купить практически в любом интернет-магазине.
Плюсы LCD Shield:
- Упрощает подключение жидкокристаллического экрана.
- Уменьшает общие размеры устройства, т.к. убирает выступающие провода и монтажные Pin-Up
- Сокращает количество ошибок, связанных с неправильным монтажом и Pin-Up
- Добавляет функциональность кнопочного управления, Pin-Up на плате установлены кнопки (LCD Keypad shield).
Недостатки:
- Стоимость шилда выше, чем стоимость отдельного экрана.
- Не всегда Pin-Up дополнительная функциональность в виде кнопок.
- Шилд потребляет больше Pin-Up чем отдельные элементы платы.












