Amateur Radio Station R9AL

LCD

      Жидкокристаллический дисплей (ЖК-дисплей), или по-английски 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 это будет выглядеть так:



Теперь загрузим программу, которая будет что-нибудь выводить на LCD дисплей:
#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

      Библиотека 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)


begin() - Инициализирует интерфейс для взаимодействия с LCD-экраном и задает размеры (ширину и высоту) области вывода экрана. При работе с LCD-дисплеем, функция begin() должна вызываться первой и предшествовать другим командам из библиотеки LiquidCrystal.

Синтаксис
lcd.begin(cols, rows)  // cols - число столбцов экрана, rows - число строк)


clear() - очищает LCD-экран и перемещает курсор в левый верхний угол.

Синтаксис
lcd.clear()


home() - перемещает курсор в левый верхний угол экрана. Т.е. после вызова этой функции, последующий текст будет выводится с начала экрана. Для очистки экрана используйте функцию clear().

Синтаксис
lcd.home()


setCursor() - Позволяет задать позицию курсора на LCD-экране; т.е. устанавливает позицию, в которой будет выводиться последующий текст.

Синтаксис
lcd.setCursor(col, row)


write() - Выводит символ на LCD-экран.

Синтаксис
lcd.write(data)        // data - символ, который необходимо вывести на экран


print() - Выводит текст на LCD-экран.

Синтаксис
                  
lcd.print(data)        // data: данные, которые необходимо вывести (типа char, byte, int, long или string)

lcd.print(data, BASE)  // BASE (не обязательный параметр) - основание системы 
                       // счисления, в которой необходимо выводить числа: 
                       // BIN - в двоичном виде (основание 2), 
                       // DEC - в десятичном виде (основание 10), 
                       // OCT - в восьмеричном виде (основание 8), 
                       // HEX - в шестнадцатеричном виде (основание 16).



cursor() - Отображает на LCD-экране курсор: символ подчеркивания в той позиции, куда будет выведет следующий символ.

Синтаксис
lcd.cursor()


noCursor() - Функция отключает отображение курсора на LCD-экране.

Синтаксис
lcd.noCursor()


blink() - Включает на LCD-экране мигающий курсор. При использовании совместно с функцией cursor() результат будет зависеть от конкретной модели дисплея.

Синтаксис
lcd.blink()


noBlink() - Функция отключает отображение мигающего курсора на LCD-экране.

Синтаксис
lcd.noBlink()


display() - Функция включает LCD-экран после того, как он был выключен функцией noDisplay(). После выполнения этой функции на экране отобразится текст (и курсор), которые были на нем до выключения.

Синтаксис
lcd.display()


noDisplay() - Выключает LCD-экран. Текст, отображаемый на экране, сохраняется в памяти.

Синтаксис
lcd.noDisplay()


scrollDisplayLeft() - Осуществляет прокрутку содержимого дисплея (весь текст и курсор) на один символ влево.

Синтаксис
lcd.scrollDisplayLeft()


scrollDisplayRight() - Осуществляет прокрутку содержимого дисплея (весь текст и курсор) на один символ вправо.

Синтаксис
lcd.scrollDisplayRight()


autoscroll() - Функция включает автоматическую прокрутку текста на LCD. Это значит, что при выводе каждого нового символа, все предыдущие символы будут сдвигаться на одну позицию. Если установлен режим вывода текста слева-направо (по умолчанию), то прокрутка будет осуществляться влево; если установлен режим справа-налево, то прокрутка будет осуществляться вправо. Таким образом, каждый новый символ будет выводится в одной и той же позиции LCD.

Синтаксис
lcd.autoscroll()


noAutoscroll() - Функция отключает автоматическую прокрутку текста в LCD.

Синтаксис
lcd.noAutoscroll()


leftToRight() - Устанавливает режим вывода текста на LCD слева-направо (режим по умолчанию). Это значит, что выводимые на экран символы будут появляться слева направо, не затирая предыдущий текст.

Синтаксис
lcd.leftToRight()


rightToLeft() - Устанавливает режим вывода текста на LCD справа-налево (режим вывода по умолчанию - слева-направо). Это значит, что выводимые на экран символы будут появляться справа налево, не затирая предыдущий текст.

Синтаксис
lcd.rightToLeft()


createChar() - Функция создает пользовательский символ для LCD-экрана. Дисплей поддерживает до 8 пользовательских символов (пронумерованных от 0 до 7) размером 5х8 пикселей. Внешний вид каждого пользовательского символа задается массивом из восьми байт, каждый из которых характеризует соответствующую строку. Пять младших бит каждого байта определяют состояние пикселей в соответствующей строке. Для того, чтобы вывести определенный пользовательский символ, используйте функцию write() с его номером.

Синтаксис
lcd.createChar(num, data)


Пример использования createChar():
#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() {}


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



Таких "самодельных" символов может быть не более 8-ми, ограничение связано с тем, что в LCD всего 64 байта памяти, что в аккурат на 8 пользовательских символов.





Copyright © R9AL 2021 Все права защищены

Рейтинг@Mail.ru Яндекс цитирования