Лабораторная работа 14. LCD дисплей
Цель работы:
Знакомство с работой LCD дисплея, а также применение полученных знаний и навыков для создания программы по выводу данных на LCD дисплей.
Теоретическая часть
LCD дисплей – это самый распространенный вид экранов телевизоров и мониторов, а также дисплеев телефонов и других устройств. Такое распространение данный вид экрана получил благодаря целому ряду неоспоримых преимуществ.
LCD дисплей означает жидкокристаллический экран (Liquid crystal display; ЖК экран). Данная технология получила такое название благо- даря применению уникального вещества, которое всегда находится в жидком состоянии и обладает оптическими свойствами, присущими кристаллам.
Практически все существующие сегодня LCD дисплеи имеют идентичное устройство. Если говорить о конструкции, то любой LCD монитор или телевизор состоит из следующих компонентов (Рисунок 14.1):
- ЖК матрица;
- Источник света;
- Контактный жгут;
- Обрамление (корпус).
Рисунок 14.1. Устройство LCD монитора
Принцип работы LCD дисплея заключается в том, что при условии отсутствия молекул жидких кристаллов, свет пропускается первым поляризационным фильтром и полностью блокируется вторым.
Сами жидкие кристаллы расположены между этими фильтрами таким образом, чтобы преломлять свет, проходящий через первый фильтр так, чтобы он беспрепятственно проходил через второй. Такой принцип лежит в основе устройства матрицы TN (Twisted Nematic). Жидкокристаллические дисплеи с другими типами матриц могут действовать наоборот, однако принцип работы при этом не меняется. То есть в спокойном состоянии излучение блокируется и не проходит через матрицу, а при возбуждении электромагнитного поля плоскость излучения меняется так, чтобы свет проходил без препятствий.
Для того, чтобы молекулы жидких кристаллов располагались в нужном порядке без воздействия электричеством, на контактирующую поверхность электродов нанесены специальные микроскопические бороздки, выстраивающие молекулы в нужном порядке. Таким образом, если воздействовать на определенные области матрицы получается изображение.
Каждый современный жидкокристаллический экран имеет высокое разрешение. Это означает, что матрица состоит из огромного количества пикселей, при этом управлять ими можно каждым в отдельности. Другими словами, если увеличить какую-либо область экрана, можно заметить мелкие ячейки. Меняя напряжение каждой из этих ячеек, можно изменить угол преломления света именно в данной точке. Путем создания необходимого напряжения в каждой из ячеек и создается определенное изображение.
Практическая часть.
В данной лабораторной работе необходимо разработать управляющую программу микроконтроллера, которая будет выводить данные на LCD дисплей. Для этого необходимо рассмотреть некоторые сторонние библиотеки и их подключение, а также познакомиться с интерфейсом I2C.
Подключение сторонних библиотек.
Описание:
Многие скетчи (программы) работают с библиотеками. Библиотека в программировании – это сборник подпрограмм или объектов, используемых для разработки управляющих программ. Обычно, при разработке различных программ применяется много стандартных элементов и алгоритмов. Нет необходимости каждый раз писать их с нуля – можно воспользоваться уже готовой библиотекой. Другими словами, библиотеки представляют собой уже написанные ранее наборы проверенного кода. Это готовые решения, которые программисты могут присоединять к своим разрабатываемым программам, вставлять их в свой код по специальным алгоритмам.
Библиотека облегчает работу с определённым модулем или одним из типов модулей. Например, если необходимо вывести текст на LCD дисплей без подключения библиотеки, то нужно передать ему несколько байт команд и данных, что займет несколько строк кода. А также необходимо знать тип микроконтроллера, под управлением которого работает LCD дисплей, назначение команд, которыми он управляется и многое другое. В то время как при написании кода с использованием библиотеки LiquidCrystal_I2C.h, возможно вывести текст на дисплей, вызвав всего одну функцию библиотеки: lcd.print(«my text»);
Чтобы использовать стороннюю библиотеку в вашей управляющей программе, ее нужно скачать и переместить в папку с библиотеками Ардуино (libraries). После этого, в своей программе в начале кода необходимо добавить текст «#include <файл.h>» как это уже делалось с библиотекой «math.h».
### Интерфейс I2C
Описание:
Последовательный протокол обмена данными IIC (также называемый I2C – Inter-Integrated Circuits, межмикросхемное соединение) использует для передачи данных две двунаправленные линии связи, которые называются шина последовательных данных SDA (Serial Data) и шина тактирования SCL (Serial Clock). Также имеются две линии для питания. Шины SDA и SCL подтягиваются к шине питания через резисторы.
В сети есть хотя бы одно ведущее устройство (Master), которое инициализирует передачу данных и генерирует сигналы синхронизации. Также в сети присутствуют ведомые устройства (Slave), которые передают данные по запросу ведущего. У каждого ведомого устройства есть уникальный адрес, по которому ведущий и обращается к нему. Адрес устройства указывается в его паспорте (datasheet). К одной шине I2C может быть подключено до 127 устройств, в том числе и несколько ведущих. К шине можно подключать устройства в процессе работы, другими словами, она поддерживает «горячее подключение».
Микроконтроллер Arduino использует для работы по интерфейсу I2C два порта (таблица ниже). Например, в Arduino UNO и Arduino Nano аналоговый порт A4 соответствует SDA, а аналоговый порт A5 соответствует SCL.
Плата | Пин SDA | Пин SCL |
---|---|---|
Arduino Uno, Nano, Pro и Pro Mini | A4 | A5 |
Arduino Mega | 20 | 21 |
Arduino Leonardo | 2 | 3 |
Arduino Due | 20, SDA1 | 21, SCL1 |
Для работы с Arduino по шине I2C предусмотрена стандартная библиотека Wire. Она имеет следующие функции:
Функция | Назначение |
---|---|
begin(address) | Инициализация библиотеки и подключе- ние к шине I2C; если не указан адрес, то присоединённое устройство считается ведущим; используется 7-битная адреса- ция; |
requestFrom() | Используется ведущим устройством для запроса определённого количества бай- тов от ведомого; |
beginTransmission(address) | Начало передачи данных к ведомому устройству по определённому адресу; |
endTransmission() | Прекращение передачи данных ведомо- му; |
write() | Запись данных от ведомого в ответ на за- прос; |
available() | Возвращает количество байт информа- ции, доступных для приёма от ведомого; |
read() | Чтение байта, переданного от ведомого ведущему или от ведущего ведомому; |
onReceive() | Указывает на функцию, которая должна быть вызвана, когда ведомое устройство получит передачу от ведущего; |
onRequest() | Указывает на функцию, которая должна быть вызвана, когда ведущее устройство получит передачу от ведомого. |
## Схема подключения: |
Рисунок 14.2. Схема подключения
После сборки схема имеет следующий вид (Рисунок 14.3):
Рисунок 14.3. Внешний вид схемы после сборки
Рисунок 14.4. LCD дисплей с установленным на нем драйвером I2C интерфейса
В таком случае для работы с дисплеем необходимо выполнить подключение напрямую к I2C шине контроллера КПМИС и установить библиотеку LiquidCrystal_I2C. Данный способ подключения позволяет существенно упростить схему подключения. На драйвере интерфейса так же располагается потенциометр, с помощью которого возможно регулировать контрастность дисплея.
Рабочая программа:
// Подключение библиотек для работы с ЖК экраном.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // задать адрес дисплея как 0х27 и определить в нем 2 строки и 16 символов на строку
void setup(){
lcd.init();
// initialize the lcd
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(3,0);
lcd.print(«message»);
lcd.setCursor(2,1);
lcd.print(«world!»);
}
void loop(){
}
Список контрольных вопросов:
- Как расшифровывается LCD? Дайте определение.
- Из каких компонентов состоят ЖК дисплеи?
- Какой у них принцип работы?
- Каким образом получается изображение на экране?
- На что влияет разрешение экрана?
- Для чего нужны библиотеки?
- Как они работают?
- Как использовать библиотеку?
- Что такое I2C? Для чего его используют?
- Какие шины он использует?
- Как работает I2C?
- Сколько устройств может быть подключено к одной шине I2C?
- Для чего нужна библиотека Wire?
Список дополнительных задач:
- Изменить программу так, чтобы она работала как калькулятор, считы- вая данные с клавиатуры, выводила их на дисплей.
- Изменить программу так, чтобы она работала как секундомер.
Center-nav