Управление кнопками и вывод информации на ЖК-дисплей 16×2 с Arduino(обучение работе с Proteus)
В данной статье рассматривается пример вывода информации на ЖК-дисплей 16×2 с использованием Arduino и четырёх кнопок.
Проект создан специально для обучения работе с симулятором Proteus и демонстрирует, как реализовать несколько режимов работы без усложнения схемы и без блокирующих задержек.
Скетч реализует управляемый кнопками вывод информации: каждая кнопка активирует свой режим счёта, а текущее состояние системы и значение счётчика отображаются на ЖК-дисплее. Проект хорошо подходит для изучения логики состояний и правильной организации кода.
Назначение проекта
Цель проекта — показать, как с помощью Arduino можно организовать интерактивный вывод информации на LCD-дисплей, используя минимальное количество элементов управления.
- работа с несколькими кнопками через INPUT_PULLUP;
- реализация режимов работы (state machine);
- вывод числовых данных на ЖК-дисплей;
- использование millis() вместо delay;
- корректное обновление экрана без мигания.
Подобный принцип применяется в учебных стендах, простых контроллерах, панелях управления и встроенных устройствах с минимальным интерфейсом.
Используемые компоненты
- Arduino UNO;
- ЖК-дисплей 16×2 (HD44780-совместимый);
- 4 кнопки;
- Proteus 8 или 9 с поддержкой Arduino.
Принцип работы программы
В программе используются четыре кнопки, подключённые к аналоговым входам Arduino и работающие в режиме INPUT_PULLUP. Это позволяет обойтись без внешних резисторов.
Каждая кнопка активирует свой режим счёта:
- кнопка 1 — счёт от 0 до 10;
- кнопка 2 — счёт от 0 до 100;
- кнопка 3 — счёт от 0 до 1000;
- кнопка 4 — счёт от 0 до 10000.
При нажатии кнопки текущий режим сбрасывается, счётчик начинается с нуля, а на дисплее отображается активный режим.
Работа без delay()
Для обновления счётчика используется функция millis(). Это позволяет избежать блокировки программы и обеспечивает корректную обработку нажатий кнопок во время работы счётчика.
Интервал обновления установлен равным 200 мс, что делает процесс счёта наглядным и удобным для наблюдения в Proteus.
Организация вывода информации
Экран ЖК-дисплея логически разделён на две строки:
- верхняя строка — активный режим (какая кнопка выбрана);
- нижняя строка — текущее значение счётчика.
Очистка дисплея выполняется только при смене режима, что предотвращает мигание экрана и повышает читаемость информации.
Arduino-скетч
#include <LiquidCrystal.h>
#define SW1 A0
#define SW2 A1
#define SW3 A2
#define SW4 A3
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
unsigned long lastTick = 0;
unsigned long counter = 0;
int activeMode = 0;
bool screenUpdated = false;
void setup() {
pinMode(SW1, INPUT_PULLUP);
pinMode(SW2, INPUT_PULLUP);
pinMode(SW3, INPUT_PULLUP);
pinMode(SW4, INPUT_PULLUP);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Press Button");
lcd.setCursor(0, 1);
lcd.print("To Start");
}
void loop() {
readButtons();
runCounter();
}
void readButtons() {
if (digitalRead(SW1) == LOW) setMode(1);
else if (digitalRead(SW2) == LOW) setMode(2);
else if (digitalRead(SW3) == LOW) setMode(3);
else if (digitalRead(SW4) == LOW) setMode(4);
}
void setMode(int mode) {
if (activeMode != mode) {
activeMode = mode;
counter = 0;
screenUpdated = false;
lcd.clear();
}
}
void runCounter() {
if (activeMode == 0) return;
if (!screenUpdated) {
lcd.setCursor(0, 0);
lcd.print("Switch ");
lcd.print(activeMode);
lcd.print(" Active");
screenUpdated = true;
}
if (millis() - lastTick >= 200) {
lastTick = millis();
counter++;
unsigned long limit = getLimit();
if (counter > limit) counter = 0;
lcd.setCursor(0, 1);
lcd.print("Count: ");
lcd.setCursor(7, 1);
lcd.print(counter);
}
}
unsigned long getLimit() {
switch (activeMode) {
case 1: return 10;
case 2: return 100;
case 3: return 1000;
case 4: return 10000;
default: return 0;
}
}
Работа проекта в Proteus
В симуляции Proteus нажатие кнопок приводит к немедленному переключению режимов. ЖК-дисплей отображает активную кнопку и текущее значение счётчика. Проект не требует подключения Arduino к компьютеру.
Запуск проекта в Proteus
- распакуйте архив с проектом;
- откройте файл .pdsprj;
- проверьте путь к файлу .hex в свойствах Arduino;
- нажмите Run Simulation;
- нажимайте кнопки и наблюдайте вывод информации на ЖК-дисплее.
Если что-то не работает
Если возникают проблемы с запуском проекта или непонятен принцип работы, рекомендуется пройти базовый урок по Proteus.
Подробно разобран первый проект в Proteus:
Первый проект в Proteus — мигание светодиода