Подключение LCD2004A к Arduino UNO R3

Arduino

В данной публикации речь пойдет о подключении жидкокристаллического дисплея LCD2004A без интерфейса I2C. Это обычный жидкокристаллический дисплей с четырьмя строками по 20 символов в каждой, подключается он так же как и двухстрочный аналогичный дисплей, поэтому инструкция будет полезна и для дисплея с двумя строками LCD2002.

Выглядит дисплей вот так:

LCD2004A

Данный дисплей имеет 16 выводов:

  1. 1 Vss — Земля (общий провод)
  2. 2 Vdd — Питание + 5 В
  3. 3 Vo — Управление контрастностью дисплея. Вход для подключения среднего вывода делителя напряжения + 5 В. Можно использовать подстроечный резистор сопротивлением 10-20 кОм.
  4. 4 RS — Выбор регистра: 0 – регистр команд; 1 – регистр данных. Низкий уровень сигнала означает, что на шине данных сформирована команда, высокий уровень – на шине данные.
  5. 5 R/W — Направление передачи данных: 0 – запись; 1 – чтение. Во многих приложениях функция чтения не используется, поэтому сигнал часто подключается к земле.
  6. 6 E — Строб операции шины (по отрицательному фронту).
  7. 7 DB0 — Младшие биты восьми битного режима. При четырех битном интерфейсе не используются.
  8. 8 DB1 — Младшие биты восьми битного режима. При четырех битном интерфейсе не используются.
  9. 9 DB2 — Младшие биты восьми битного режима. При четырех битном интерфейсе не используются.
  10. 10 DB3 — Младшие биты восьми битного режима. При четырех битном интерфейсе не используются.
  11. 11 DB4 — Старшие биты восьми битного режима или биты данных четырех битного интерфейса.
  12. 12 DB5 — Старшие биты восьми битного режима или биты данных четырех битного интерфейса.
  13. 13 DB6 — Старшие биты восьми битного режима или биты данных четырех битного интерфейса.
  14. 14 DB7 — Старшие биты восьми битного режима или биты данных четырех битного интерфейса.
  15. 15 A — Анод питания подсветки (+).
  16. 16 K — Катод питания подсветки (-). Ток должен быть ограничен.

Для нашей сборки мы будем использовать четырех битный интерфейс.

Схема сборки на макетной плате:

Схема подключения LCD2004A к Arduino UNO

Принципиальная схема:

Принципиальная схема подключения LCD2004A к Arduino UNO

После сборки схемы, нам понадобится скетч, для теста.
Вначале лучше запустить скетч который выведет все символы ASCII на дисплей, это позволит нам понять, есть ли у дисплея русские символы, ниже приведён именно такой скетч.

/*
* Подключение LCD к Arduino
*
* babakov.net
*
*/

#include <LiquidCrystal.h> // Подключаем библиотеку LiquidCrystal
LiquidCrystal lcd(11, 12, 4, 5, 6, 7); // Создаем объект с параметрами: (rs, enable, d4, d5, d6, d7) 
void setup() {
  // укажем для LCD число колонок и строк:
  lcd.begin(20, 4);
  // Напечатаем на LCD все символы ASCII по порядку
  for (int i=0; i <= 255; i++){
      lcd.print(char(i));
      delay(10);
   }
}

void loop() {
  // Здесь ничего не делаем пока
}


Дело в том, что многие дисплеи привезённые из Китая, не обладают русским набором символов, и если после заливки и выполнении скетча на устройстве вы видите это:

Китайские буквы на LCD2004A

Это означает, что дисплей не имеет русских символов в прошивке, а если вы видите русские буквы, то вам повезло. :)

Теперь попробуем другую прошивку, которая отобразит тестовую информацию, при этом в данной прошивке мы создадим свой символ в виде человечка (Правда таких символов можно создать всего 8).

Скетч примера:
/*
* Подключение LCD к Arduino
*
* babakov.net
*
*/

#include <LiquidCrystal.h> // Подключаем библиотеку LiquidCrystal
LiquidCrystal lcd(11, 12, 4, 5, 6, 7); // Создаем объект с параметрами: (rs, enable, d4, d5, d6, d7) 
void setup() {
  // указываем для LCD число колонок и строк:
  lcd.begin(20, 4);
   
  // Задаем свой символ
  byte human[8] = {
  B00000100,
  B00001110,
  B00010101,
  B00010101,
  B00000100,
  B00001010,
  B00001010,
  B00011011
};
  // загружаем свой символ в 0 ячейку (всего их 8 от 0 до 7)
  lcd.createChar(0, human);   
  lcd.begin(20, 4);
  // выводим свой символ
  lcd.write(byte(0));
  lcd.print(" - It's a human.");
  // переходим ниже
  lcd.setCursor(0, 1);
  // напечатаем название сайта
  lcd.print("www.babakov.net");
  // переходим ещё ниже
  lcd.setCursor(0, 2);
  // напечатаем строку разделитель
  lcd.print("--------------------");
  
}

void loop() {
  // переводим курсор на позицию колонка 0 строка 3
  lcd.setCursor(0, 3);
  // печатаем секунды с начала работы скетча:
  lcd.print(millis() / 1000);
}


Вот что должно получиться после загрузки и выполнения данного скетча:

LCD2004A - Пример работы

Вот и всё.

Надеюсь публикация кому-то окажется полезной.

Вот как вся сборка на макетной плате в итоге выглядела у меня:

LCD2004A - Пример

Всем удачи.

Вопросы и комментарии приветствуются.

Arduino LCD LCD2004A

Оставить первый комментарий: