Подключение LCD 1602 (HD44780) к Arduino

Опубликовано 18.03.2014 10:17:00


LCD дисплеи размерности 1602, на базе контроллера HD44780, являются одними из самых простых, доступных и востребованных дисплеев для разработки различных электронных устройств. Его можно встретить как и в устройствах собранных на коленке, так и в промышленных устройствах, таких, как например, автоматы для приготовления кофе. На базе данного дисплея собраны самые популярные модули и шилды в тематике Arduino такие как LCD I2C модуль и LCD Keypad Shield.

В данной статье мы расскажем как его подключить к Arduino и вывести информацию.

Подключение дисплея 1602 к Arduino

 

 

Данные дисплеи имеют два исполнения: желтая подсветка с черными буквами либо, что встречается чаще, синюю подсветку с белыми буквами. 

Размерность дисплеев на контроллере HD44780 может быть различной, управляться они будут одинаково. Самые распространенные размерности 16x02 (т.е. по 16 символов в двух строках) либо 20x04. Разрешение же самих символов - 5x8 точек.

Большинство дисплеев не имеют поддержку кириллицы, имеют её лишь дисплеи с маркировкой CTK. Но данную проблему можно попытаться частично решить (продолжение в статье).


 

Выводы дисплея:

На дисплее имеется 16pin разъем для подключения. Выводы промаркированы на тыльной стороне платы.

1 (VSS) - Питание контроллера (-)
2 (VDD) - Питание контроллера (+)
3 (VO) - Вывод управления контрастом
4 (RS) - Выбор регистра 
5 (R/W) - Чтение/запись ( режим записи при соединении с землей)
6 (E) - Еnable (строб по спаду) 
7-10 (DB0-DB3) - Младшие биты 8-битного интерфейса
11-14 (DB4-DB7) - Старшие биты интерфейса
15 (A) - Анод (+) питания подсветки
16 (K) - Катод (-) питания подсветки


 

Режим самотестирования:

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

Для настройки контрастности следует использовать потенциометр на 10 кОм. Каким он будет по форме - не важно. На крайние ноги подается +5V и GND, центральная ножка соединяется с выводом VO

Внешний вид потенциометров

 

После подачи питания на схему необходимо добиться правильного контраста, если он будет настроен не верно, то на экране ничего не будет отображаться. Для настройки контраста следует поиграться с потенциометром.

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


 

Вывод информации:

Для работы дисплея используется встроенная с среду Arduino IDE библиотека LiquidCrystal.h

 
Функционал библиотеки

 

Сам же дисплей может работать в двух режимах :

• 8-битный режим - для этого используются и младшие и старшие биты (BB0- DB7)

• 4-битный режим - для этого используются и только младшие биты (BB4- DB7)

 

Использование 8-битного режима на данном дисплее не целесообразно. Для его работы требуется на 4 ноги больше, а выигрыша в скорости практически нет т.к. частота обновления данного дисплея упирается в предел < 10раз в секунду.

Для вывода текста необходимо подключить выводы RS, E, DB4, DB5, DB6, DB7 к выводам контроллера. Их можно подключать к либым пинам Arduino, главное в коде задать правильную последовательность.

Подключение дисплея 1602 к Arduino

 

 
Пример программного кода:
//Тестировалось на Arduino IDE 1.0.5

#include <LiquidCrystal.h>  // Лобавляем необходимую библиотеку
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7)

void setup(){ 
  lcd.begin(16, 2);                  // Задаем размерность экрана

  lcd.setCursor(0, 0);              // Устанавливаем курсор в начало 1 строки
  lcd.print("Hello, world!");       // Выводим текст
  lcd.setCursor(0, 1);              // Устанавливаем курсор в начало 2 строки
  lcd.print("zelectro.cc");         // Выводим текст
}

void loop(){
}

 

Создание собственных символов

С выводом текста разобрались, буквы английского алфавита зашиты в память контроллера внутри дисплея и с ними проблем нет. А вот что делать если нужного символа в памяти контроллера нет?

Не беда, требуемый символ можно сделать вручную (всего до 7ми символов). Ячейка, в рассматриваемых нами дисплеях, имеет разрешение 5х8 точек. Все, к чему сводится задача создания символа, это написать битовую маску и расставить в ней единички в местах где должны гореть точки и нолики где нет.

В ниже приведенном примере нарисуем смайлик.

битовая маска для ячейки 5х8

 
Пример программного кода
//Тестировалось на Arduino IDE 1.0.5

#include <Wire.h>
#include <LiquidCrystal.h>   // Лобавляем необходимую библиотеку
// Битовая маска символа улыбки
byte smile[8] =
{
  B00010,
  B00001,
  B11001,
  B00001,
  B11001,
  B00001,
  B00010,
};    
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7)

void setup(){ 
  lcd.begin(16, 2);                  // Задаем размерность экрана

  lcd.createChar(1, smile);          // Создаем символ под номером 1

  lcd.setCursor(0, 0);               // Устанавливаем курсор в начало 1 строки
  lcd.print("\1");                   // Выводим смайлик (символ под номером 1) - "\1"
      }

void loop(){
}

 

Бонус

В комментариях участник сообщества скинул ссылку на генератор символов

Аватар


А как же комментарии?