Ардуино + LCD

28.07.2021 14:22, автор DiEitch

Всем привет. 

Сегодня я покажу, как за несколько минут подключить и запрограммировать серию широко распространённых LCD-дисплеев (с контроллером типа HD44780/KS0066) на Arduino. Дисплей подключим самым простым и экономичным способом (без переходной платы I2C на микросхеме PCF8574 и по 4-битной шине). Для проверки применим Proteus.

Для симуляции нужно скачать и добавить в Proteus библиотеку Arduino-Nano, подходящий индикатор LCD1602 типа LM016L присутствует.

Следует обратить внимание, что вывод Vee индикатора в Proteus подключен к корпусу, в реальной же схеме он подключен к движку потенциометра и называется Vo.

Также для упрощения не используется режим чтения из индикатора (он вообще редко используется), в результате вывод R/W тоже "на земле". Таким образом при подключении индикатора к микроконтроллеру минимум потребуется 8 проводов:

  • 4 - данные D4..D7;
  • 2 - управление строб данных E и режим RS (команда/данные);
  • 2 - питание.

Вроде по аппаратной части всё. Теперь программа.

Для начала надо подключить библиотеку LCD. Для этого либо просто добавляем заголовочный файл LiquidCrystal.h, либо через меню:

Далее нужно настроить библиотеку (иначе как она узнает, куда вы подключили свой индикатор?):

Инициализируем свой индикатор в строке: lcd.begin(16(символов в строке), 2(строки)); (здесь возможны варианты 8,1; 8,2; 16,1; 16,2; 16,4; 20,1; 20,2; 20,4). Устанавливаем курсор в нужную позицию: lcd.setCursor(0(позиция сиивола в строке),0(строка)); Примечание: курсор автоматически сдвигается вправо при вводе символа/символов, а также автоматически происходит перевод строки. Выводим строку или число с помощью lcd.print(). Также можно использовать sprintf для форматированного вывода строки.

Для запуска в Proteus нам потребуется файл прошивки,

который загружаем через свойства компонента (двойной клик по Ардуине):

Теперь можно проверить нашу программу:

Файлы проекта содержатся в архиве.

PS: если вы вдруг не увидели изображение на экране реального дисплея, то сначала покрутите движок подстроечного резистора (он настраивает контрастность).

=====================================================================================

UPD: отдельные читатели в письмах заметили, что в некоторых случаях требуется присоединить несколько дисплеев, а в Ардуино ограниченное количество выводов, и всё равно в итоге потребуется плата-адаптер I2C.

А вот и нет! Сейчас я покажу, что к Ардуино можно присоединить много дисплеев типа 1602 (теоретически их число ограничено только количеством свободных ножек после присоединения всех необходимых устройств) безо всяких дополнительных плат и микросхем!

На примере присоединения 4-х дисплеев видно, что они могут присоединяться параллельно, за исключением строба E - он сопровождает загружаемые данные в дисплей, который имеет внутреннюю память GRAM. Загруженные символы будут сохраняться там (т.е. высвечиваться на экране) сколь угодно долго, до следующего обращения или выключения питания. Таким образом, выбирая нужный строб, мы загрузим данные в нужный дисплей, а остальные просто проигнорируют передачу и не поменяют своего состояния. Пользуясь этим свойством (конечно, конструкторы добавили его не случайно), можно "адресовать" дисплеи очень простым и удобным способом.

Теперь перейдём к программе. Она, естественно, немного "потяжелеет". Для адресации нам понадобится создать 4 объекта дисплея, которые будут различаться лишь номерами вывода строба E. Затем надо не забыть определить и проинициализировать все 4 дисплея.

Далее можно работать с каждым дисплеем в отдельности. 

Я не прилагаю здесь архив проекта, вы и сами можете легко "набить" этот код. Ведь главное - идея! Теперь остаётся только один вопрос: где может потребоваться одновременно столько дисплеев? У меня есть идеи на этот счёт, а вам предлагаю подумать на досуге.