LCD1602 — это электронный дисплей, используемый в различных электронных устройствах с микроконтроллерным управлением. Он состоит из 16 символов в 2 линии и имеет подсветку, что позволяет использовать его в условиях недостаточного освещения.
Описание подключения:
Дисплей LCD1602 подключается к микроконтроллеру с помощью 16-ти контактного шлейфа.
Описание контактов:
1. VSS — земля
2. VDD — питание (обычно 5 В)
3. V0 — контрастность
4. RS — выбор режима: 0 — команда, 1 — данные
5. RW — выбор направления передачи данных: 0 — запись, 1 — чтение
6. E — сигнал строба (синхронизации)
7-14. D0-D7 — 8-битная шина данных
15. A — подсветка (+)
16. K — подсветка (-)
Обратите внимание, что в некоторых дисплеях выводы VSS и VDD могут быть поменяны местами.
Описание работы:
Дисплей LCD1602 работает на основе жидкокристаллической технологии (LCD), которая заключается в том, что вещество, называемое жидкий кристалл, используется для создания изображения на экране.
Дисплей LCD1602 состоит из двух стеклянных пластин, которые имеют микроскопические ячейки, заполненные жидким кристаллом. Каждая ячейка содержит транзистор и электроды, которые управляют положением жидкого кристалла.
Жидкий кристалл может менять свою ориентацию в зависимости от направления электрического поля, которое создается при подаче напряжения на электроды. Когда электрическое поле направлено в определенном направлении, жидкий кристалл выравнивается вдоль этого поля, что приводит к изменению пропускания света через ячейку.
Таким образом, при подаче напряжения на определенные электроды, жидкие кристаллы в определенных ячейках меняют свою ориентацию и создают изображение на экране. В дисплее LCD1602 каждая ячейка представляет собой один символ, который можно отобразить на экране.
Для управления дисплеем LCD1602 используется контроллер HD44780, который управляет подачей напряжения на электроды и контролирует отображение символов на экране. Контроллер принимает команды и данные через шину данных и выбранные контакты, и использует их для управления отображением информации на экране.
Контроллер HD44780 имеет два режима работы: командный и режим передачи данных. В командном режиме контроллер принимает команды для управления экраном, такие как выбор режима отображения (символьный или графический), выбор строки и столбца, настройка контрастности и т.д. В режиме передачи данных контроллер принимает данные для отображения на экране.
Дисплей LCD1602 может отображать символы, цифры, знаки препинания и специальные символы и т.д. Он также может отображать символы созданные пользователем.
В целом, дисплей LCD1602 — это удобный и недорогой способ отображения информации в электронных устройствах. Он легко подключается и управляется, и может использоваться для различных задач, от отображения текста до отображения графики.
Дисплей LCD1602 может работать в двух режимах передачи данных: 4-х и 8-и битном. Режим передачи данных определяет количество бит, передаваемых на шину данных за один раз.
В 8-и битном режиме передачи данных контроллер HD44780 отправляет на дисплей 8 бит информации за один раз. Это позволяет передавать данные быстрее, чем в 4-х битном режиме, но требует большего количества контактов для подключения дисплея.
В 4-х битном режиме передачи данных контроллер HD44780 отправляет на дисплей только половину данных — 4 бита — за один раз. Это требует меньшего количества контактов для подключения дисплея, но передача данных занимает больше времени.
Для выбора режима передачи данных на дисплее LCD1602 используется команда функции. В команде функции можно выбрать 4-х или 8-и битный режим передачи данных, а также установить другие параметры, такие как количество строк и размер символа.
В этой статье будет рассмотрен 8-и битный режим работы дисплея, сравнение скорости работы в 8-битной и 4-битном подключении.
При 8-и битном подключении соберите схему показанную на рисунке:
Далее загрузите скетч:
#include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 2, 3, 4, 5, 6, 7, 8, 9); // RS E D0 D1 D2 D3 D4 D5 D6 D7 int i; unsigned long times; void setup(){ Serial.begin(9600); lcd.begin(16, 2); lcd.clear(); } void loop(){ times=millis(); for(int i1=0;i1<10000;i1++){ lcd.setCursor(0, 0); lcd.print("LCD1602"); lcd.setCursor(0, 1); lcd.print(i++); } lcd.clear(); i=0; Serial.print("8-bit ");Serial.println(millis()-times); delay(1000); }
Скетч в цикле выводит надпись «LCD1602» в первой строчке дисплея, и число от 0 до 10000 во второй строчке. Далее по завершению работы цикла выводится время выполнения цикла.
В итоге 10000 обновлений информации на экране дисплея занимает 25948 мс при 8-и битном подключении.
Для сравнения скорости работы соберем схему с 4-х битным подключением:
Далее загрузите скетч:
#include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 6, 7, 8, 9); // RS E D4 D5 D6 D7 int i; unsigned long times; void setup(){ Serial.begin(9600); lcd.begin(16, 2); lcd.clear(); } void loop(){ times=millis(); for(int i1=0;i1<10000;i1++){ lcd.setCursor(0, 0); lcd.print("LCD1602"); lcd.setCursor(0, 1); lcd.print(i++); } lcd.clear(); i=0; Serial.print("4-bit ");Serial.println(millis()-times); delay(1000); }
В итоге 10000 обновлений информации на экране дисплея занимает 41429 мс при 4-х битном подключении.
Как видно 8-и битном режиме подключения скорость работы дисплея выросла на 62 %.
Использование библиотеки LiquidCrystal заметно упрощает использование дисплея на платформе Arduino, но все же было бы интересно измерить скорость работы дисплея без использования библиотеки.
Для тестирования дисплея без использования библиотеки загрузите скетч:
// Подключаем пины Arduino к пинам LCD1602 const int rs = 12, en = 11, d0 = 2, d1 = 3, d2 = 4, d3 = 5, d4 = 6, d5 = 7, d6 = 8, d7 = 9; int int_out; unsigned long times; void setup() { Serial.begin(9600); // Устанавливаем пины в режим вывода pinMode(rs, OUTPUT); pinMode(en, OUTPUT); pinMode(d0, OUTPUT); pinMode(d1, OUTPUT); pinMode(d2, OUTPUT); pinMode(d3, OUTPUT); pinMode(d4, OUTPUT); pinMode(d5, OUTPUT); pinMode(d6, OUTPUT); pinMode(d7, OUTPUT); // Инициализируем экран lcd_init(); } void loop() { times=millis(); for(int i1=0;i1<10000;i1++){ lcd_command(0x80); lcd_print("LCD1602"); lcd_command(0xC0); lcd_print(String(int_out++)); } lcd_command(0x01); int_out=0; Serial.print("8-bit ");Serial.println(millis()-times); delay(1000); } void lcd_init() { // Инициализация экрана delay(100); lcd_command(0x03);delayMicroseconds(4500); lcd_command(0x03);delayMicroseconds(4500); lcd_command(0x03);delayMicroseconds(200); lcd_command(0x02); lcd_command(0x38); lcd_command(0x0C); lcd_command(0x01); } void lcd_command(byte cmd) { // Отправляем команду на экран digitalWrite(rs, LOW);delayMicroseconds(100); lcd_write(cmd); } void lcd_print(String str) { // Выводим строку на экран digitalWrite(rs, HIGH); for (int i = 0; i < str.length(); i++) { lcd_write(str[i]); } } void lcd_write(byte data) { // Отправляем данные на экран digitalWrite(d7, (data >> 7) & 0x01); digitalWrite(d6, (data >> 6) & 0x01); digitalWrite(d5, (data >> 5) & 0x01); digitalWrite(d4, (data >> 4) & 0x01); digitalWrite(d3, (data >> 3) & 0x01); digitalWrite(d2, (data >> 2) & 0x01); digitalWrite(d1, (data >> 1) & 0x01); digitalWrite(d0, (data >> 0) & 0x01); digitalWrite(en, HIGH); delayMicroseconds(1); digitalWrite(en, LOW); delayMicroseconds(50); }
Скетч показанные выше выводит информацию на дисплей аналогично предыдущим скетчам, при этом время работы цикла значительно меньше:
Как видно при 8-и битном режиме подключения скорость работы дисплея выросла более чем в два раза по сравнению с 4-х битным подключении при использовании библиотеки LiquidCrystal.
В целом, использование 4-х или 8-и зависит от конкретных требований и ограничений проекта. Если в проекте необходимо передавать большой объем данных на дисплей, то 8-и битный режим может быть более эффективным выбором, поскольку он позволяет передавать больше информации за один раз. Однако, если количество доступных контактов ограничено или нужно минимизировать занимаемое пространство, то 4-х битный режим может быть предпочтительнее.
Также следует учитывать, что использование 8-и битного режима требует более мощного контроллера, чем 4-х битный режим, поэтому для некоторых проектов 4-х битный режим может быть более оптимальным выбором.
В любом случае, выбор режима передачи данных должен основываться на требованиях проекта и возможностях доступных компонентов и контроллеров.