Для обеспечения хорошего взаимодействия между миром людей и миром машин необходимы дисплеи различного вида. Также дисплеи являются важной частью различных встраиваемых систем. Дисплеи, маленькие или большие, работают по аналогичным принципам. В радиолюбительской практике наиболее распространены жидкокристаллические (ЖК) дисплеи 16×1 и 16×2. ЖК дисплей 16×1 может отображать 16 символов, расположенных на одной строке. ЖК дисплей 16×2 может в сумме отображать 32 символа на двух строках – 16 символов на первой строке и 16 символов на второй. Здесь необходимо принимать во внимание тот факт, что каждый символ в подобных дисплеях состоит из 5×10=50 пикселов (точек). То есть чтобы отобразить 1 символ все эти 50 пикселов должны работать вместе. Но мы можем об этом не беспокоиться, потому что за их совместную работу отвечает контроллер HD44780 – его визуально можно увидеть на обратной стороне ЖК дисплея.
В данной статье мы будем подключать ЖК дисплей 16×2 к плате Arduino Uno. Как мы увидим далее подключить ЖК дисплей к этой плате значительно проще чем к большинству других аналогичных платформ. Нам не будет нужно беспокоиться о передаче данных и их приеме. Нам необходимо будет только определиться с номерами контактов и мы будем готовы к отображению данных на ЖК дисплее.
Необходимые компоненты
- Плата Arduino UNO (купить на AliExpress).
- ЖК дисплей 16х2 (купить на AliExpress).
- Конденсатор 100 нФ (купить на AliExpress).
- Источник питания 5 В.
Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158
Работа схемы
Схема устройства представлена на следующем рисунке.
На представленной схеме можно увидеть, что мы использовали только 2 управляющих контакта – это обеспечивает гибкость в управлении. Бит контраста и READ/WRITE используются редко, поэтому в нашем случае их можно замкнуть на землю – это обеспечивает ЖК дисплею максимальную контрастность и режим чтения. Таким образом, нам необходимо будет контролировать только контакты ENABLE и RS чтобы передавать на ЖК дисплей символы и данные.
В схеме необходимо будет сделать следующие соединения с ЖК дисплеем:
PIN1 или VSS на землю
PIN2 или VDD или VCC к источнику питания +5В
PIN3 или VEE на землю (обеспечивает максимальную контрастность – хорошо для начинающих)
PIN4 или RS (Register Selection) к контакту PIN0 ARDUINO UNO
PIN5 или RW (Read/Write) на землю (переводит ЖК дисплей в режим чтения, что упрощает взаимодействие с ним для начинающих)
PIN6 или E (Enable) к контакту PIN1 of ARDUINO UNO
PIN11 или D4 к контакту PIN8 of ARDUINO UNO
PIN12 или D5 к контакту PIN9 of ARDUINO UNO
PIN13 или D6 к контакту PIN10 of ARDUINO UNO
PIN14 или D7 к контакту PIN11 of ARDUINO UNO
Программная среда ARDUINO IDE позволяет пользователю использовать ЖК дисплей в 4-битном режиме. Этот тип взаимодействия с ЖК дисплеем позволяет сократить использование контактов ARDUINO, к тому же этот режим взаимодействия (4-битный) по умолчанию заложен в ARDUINO. На представленной схеме мы использовали 4-битный режим взаимодействия (контакты D4-D7).
То есть в сумме мы подсоединили 6 контактов ЖК дисплея к нашей плате Arduino, из которых 4 контакта будут использоваться для передачи данных и 2 контакта для целей управления.
Исходный код программы
Чтобы в программе подключить ЖК дисплей к ARDUINO UNO, необходимо сделать следующие несколько вещей:
1 2 3 4 |
#include <LiquidCrystal.h> lcd.begin(16, 2); LiquidCrystal lcd(0, 1, 8, 9, 10, 11); lcd.print("hello, world!"); |
В первую очередь мы должны подключить заголовочный файл (‘#include <LiquidCrystal.h>’), в котором находятся все необходимые инструкции для взаимодействия с ЖК дисплеем, что значительно упростит взаимодействие с ним в 4 битном режиме. Используя этот заголовочный файл нам не нужно будет передавать в ЖК дисплей бит за битом и нам не нужно будет самим программировать какие-либо функции для взаимодействия с ЖК дисплеем.
Во второй строчке мы должны сказать плате ARDUINO UNO какой тип ЖК дисплея мы собираемся использовать, поскольку существует достаточно большое число типов подобных дисплеев, например, 20×4, 16×2, 16×1 и т.д. В нашем проекте мы собираемся подключать к ARDUINO UNO ЖК дисплей 16х2, поэтому мы и должны записать команду ‘lcd.begin(16, 2);’. А если бы мы подключали ЖК дисплей 16х1, то в этом случае изменилась бы и команда соответствующим образом — ‘lcd.begin(16, 1);’.
В следующей инструкции мы сообщаем плате ARDUINO UNO к каким контактам мы подсоединили ЖК дисплей. В нашем случае мы использовали контакты ЖК дисплея “RS, En, D4, D5, D6, D7”, которые подсоединены к контактам «0, 1, 8, 9, 10, 11» ARDUINO UNO, поэтому и приведенная команда выглядит следующим образом — “LiquidCrystal lcd(0, 1, 8, 9, 10, 11);”.
Для того, чтобы напечатать на экране дисплея строку символов, мы использовали команду lcd.print(«hello, world!»), которая выводит на экран дисплея строку ‘hello, world!’.
Как мы видим из представленного кода, нам не нужно заботиться больше ни о каких аспектах взаимодействия с ЖК дисплеем, нам нужно просто инициализировать ЖК дисплей в программе и тогда плата ARDUINO UNO будет готова к отображению информации на экране дисплея.
Далее представлен исходный код программы (с комментариями) для взаимодействия платы ARDUINO UNO с ЖК дисплеем 16х2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <LiquidCrystal.h> // инициализируем библиотеку для взаимодействия с ЖК дисплеем LiquidCrystal lcd(0, 1, 8, 9, 10, 11); /// сообщаем Arduino номера контактов, к которым подключен ЖК дисплей - REGISTER SELECT PIN,ENABLE PIN,D4 PIN,D5 PIN, D6 PIN, D7 PIN void setup() { // устанавливаем число столбцов и строк для ЖК дисплея lcd.begin(16, 2); } void loop() { // устанавливаем курсор в нулевой столбец первой строки lcd.print(" CIRCUIT DIGEST"); //печатаем строку lcd.setCursor(0, 1); // устанавливаем курсор в нулевой столбец второй строки lcd.print("http://www.circuitdigest.com/");//печатаем строку delay(750); //задержка на 0.75 сек lcd.scrollDisplayLeft();// переключаем данные на ЖК дисплее lcd.setCursor(0, 0);// устанавливаем курсор в нулевой столбец первой строки } |
2 ответа к “Подключение жидкокристаллического (ЖК) дисплея к Arduino”
Здравствуйте, подскажите что мог неправильно сделать подключил по вашей схему, и на верхней строку пишет черную полоску. Правильность подключения проверил.
Добрый вечер. Ну а просто lcd.print(«hello, world!») удается вывести на первую или вторую строку? Или на вторую строку нормально выводится, а на первой строке при этом отображается черная полоска?