Управление кнопками и вывод информации на ЖК-дисплей 16×2 с Arduino(обучение работе с Proteus)

В данной статье рассматривается пример вывода информации на ЖК-дисплей 16×2 с использованием Arduino и четырёх кнопок.
Проект создан специально для обучения работе с симулятором Proteus и демонстрирует, как реализовать несколько режимов работы без усложнения схемы и без блокирующих задержек.

Arduino LCD 16x2 и кнопки

Скетч реализует управляемый кнопками вывод информации: каждая кнопка активирует свой режим счёта, а текущее состояние системы и значение счётчика отображаются на ЖК-дисплее. Проект хорошо подходит для изучения логики состояний и правильной организации кода.

Назначение проекта

Цель проекта — показать, как с помощью 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 — мигание светодиода

📁 Скачать примеры