Жидкокристаллический дисплей (ЖК-дисплей), или по-английски Liquid Crystal
Display (LCD) построен на технологии жидких кристаллов. Из всех доступных
LCD дисплеев на рынке, наиболее популярным является LCD 1602, который может
отображать ASCII символы в 2 строки по 16 знаков в каждой. Управляет работой
дисплея специальный контроллер HD44780, который находится на плате индикатора.
Назначение выводов:
GND - минус питания (общий вывод).
VCC - питание для ЖК-дисплея, +5В.
V0 (LCD Contrast) - вывод для регулировки контрастности ЖК-дисплея.
RS (Register Select) - вывод, который позволяет сообщать ЖК-дисплею,
отправляются команды или данные. Например, когда на выводе RS установлено
значение LOW, мы отправляем команды на ЖК-дисплей (например, установить курсор
в определенном месте, очистить дисплей, сдвинуть дисплей вправо и т. д.).
Когда вывод RS установлено значение HIGH, мы отправляем данные/символы на
ЖК-дисплей.
R/W (Read/Write) - для контроля того, что необходимо сделать - считать
данные или передать их на ЖК-дисплей. Если R/W=1 считываем, если R/W=0 -
записывать.
EN (Enable) - для включения дисплея. Это означает, что когда на этом
выводе установлено значение LOW ЖК-дисплей не реагирует на то, что происходит
с R/W, RS и линиями шины данных. Когда же на этом выводе HIGH ЖК-дисплей
обрабатывает входящие данные.
D0-D7 (Data Bus) - это выводы, по которым передаются 8-битные данные на
дисплей.
AK (Anode & Cathode) используются для управления подсветкой LCD дисплея.
Для передачи данных у дисплея есть 8 выводов (D0-D7). Но, ЖК-дисплеи на HD44780
разработаны таким образом, что позволяют общаться с ЖК-дисплеем, используя
только 4 вывода данных (4-разрядный режим) вместо 8 (8-разрядный режим).
8-битный режим быстрее, чем 4-битный. Это связано с тем, что в 8-битном
режиме мы передаем данные за один раз, а в 4-битном режиме мы должны разделить
байт на 2 части, сдвинуть один из них на 4 бита вправо и выполнить 2 операции
записи. Поэтому, 4-битный режим часто используется для экономии выводов
микроконтроллера, а 8-битный режим лучше всего использовать, когда требуется
высокая скорость и при этом есть как минимум 10 свободных выводов ввода/вывода
микроконтроллера.
В Tinkercad это будет выглядеть так:
#include < LiquidCrystal.h> // подключаем библиотеку LiquidCrystal LiquidCrystal lcd(3, 5, 10, 11, 12, 13); // Создаем LCD объект. Выводы: (rs, enable, d4, d5, d6, d7) void setup() { lcd.begin(16, 2); // устанавливаем количество столбцов и строк на дисплея: lcd.clear(); // Очищаем LCD дисплей lcd.setCursor(2, 0); // устанавливаем курсор на столбец 2, строка 1 (но для дисплея она имеет номер 0) lcd.print("Hello world!"); // Печатаем сообщение на LCD, которое будет на первой строке lcd.setCursor(4, 1); // устанавливаем курсор на столбец 4, строка 2 (но для дисплея она имеет номер 1) lcd.print("LCD-1602"); // Печатаем сообщение на LCD, которое будет на второй строке } void loop() {}
Библиотека LiquidCrystal облегчает использование LCD дисплеев. Библиотека
поддерживает следующие функции:
LiquidCrystal() - Создает объект LiquidCrystal, с параметрами,
в зависимости от схемы подключения
дисплея.
Синтаксис
LiquidCrystal(rs, enable, d4, d5, d6, d7) LiquidCrystal(rs, rw, enable, d4, d5, d6, d7) LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7) LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)
lcd.begin(cols, rows) // cols - число столбцов экрана, rows - число строк)
lcd.clear()
lcd.home()
lcd.setCursor(col, row)
lcd.write(data) // data - символ, который необходимо вывести на экран
lcd.print(data) // data: данные, которые необходимо вывести (типа char, byte, int, long или string) lcd.print(data, BASE) // BASE (не обязательный параметр) - основание системы // счисления, в которой необходимо выводить числа: // BIN - в двоичном виде (основание 2), // DEC - в десятичном виде (основание 10), // OCT - в восьмеричном виде (основание 8), // HEX - в шестнадцатеричном виде (основание 16).
lcd.cursor()
lcd.noCursor()
lcd.blink()
lcd.noBlink()
lcd.display()
lcd.noDisplay()
lcd.scrollDisplayLeft()
lcd.scrollDisplayRight()
lcd.autoscroll()
lcd.noAutoscroll()
lcd.leftToRight()
lcd.rightToLeft()
lcd.createChar(num, data)
#include < LiquidCrystal.h> LiquidCrystal lcd(3, 5, 10, 11, 12, 13); byte man[8] = { B01110, B01110, B00100, B11111, B00100, B01110, B01010, B11011, }; void setup() { lcd.createChar(0, man); lcd.begin(16, 2); lcd.write(byte(0)); } void loop() {}