В данной статье мы научимся работать с графическими LCD дисплеями на примере экрана Nokia 5110. Это довольно популярный дисплей, выделяющийся низкой стоимостью и возможностью выводить в удобном виде не только текстовые, но и графические данные (графики, изображения и т.д.). Разрешение экрана Nokia 5110 – 48×84 точки. Мы узнаем, как подключать дисплей Нокиа к Ардуино и приведем пример скетча для работы с ним.
Подключение дисплея 5110 к Ардуино
Для начала давайте рассмотрим подключение данного дисплея к Arduino и разберемся с интерфейсом передачи данных. На плате дисплея имеются 8 выводов:
- RST — Reset (сброс);
- CE — Chip Select (выбор устройства);
- DC — Data/Command select (выбор режима);
- DIn — Data In (данные);
- Clk — Clock (тактирующий сигнал);
- Vcc — питание 3.3В;
- BL — Backlight (подсветка) 3.3В;
- GND — земля.
Как вы уже могли заметить, питание дисплея (Vcc) должно осуществляться напряжением не выше 3.3В, то же напряжение является максимальным и для подсветки дисплея (BL). Тем не менее, логические выводы толерантны к 5В логике, используемой Arduino. Но все же рекомендуется подключать логические выводы через резисторы 10 кОм, тем самым вы сможете продлить срок службы дисплея.

Пин RST (активный LOW) отвечает за перезагрузку дисплея, а с помощью пина CE (активный LOW) контроллеру дисплея сообщается что обмен данными происходит именно с ним. Вход DC отвечает за режим ввода – ввод данных, либо ввод команд (LOW – данные, HIGH – команды). Вход Clk позволяет контроллеру дисплея определять скорость передачи данных, а через пин DIn происходит непосредственно передача данных в контроллер дисплея.
Скетч и библиотека для работы с дисплеем
Для работы с данным дисплеем существует множество библиотек, мы же будем использовать весьма простую и функциональную библиотеку <LCD5110_Basic.h>, доступную по адресу http://www.rinkydinkelectronics.com/library.php?id=44. Данная библиотека позволяет работать с дисплеем с помощью 14 простых функций:
Функция | Назначение |
LCD5110(SCK, MOSI, DC, RST, CS) | Объявление дисплея с указанием пинов подключения. |
InitLCD([contrast]) | Инициализация дисплея с опциональным указанием контрастности (0-127), по умолчанию используется значение 70. |
setContrast(contrast) | Изменение контрастности (0-127). |
enableSleep() | Переводит экран в спящий режим. |
disableSleep() | Выводит экран из спящего режима. |
clrScr() | Очищает экран. |
clrRow(row, [start], [end]) | Очищает выбраную строку (номер row), от позиции start до end (опционально). |
invert(true), invert(false) | Включает и выключает инверсию содержимого LCD экрана. |
print(string, x, y) | Выводит строку символов (string) с заданными координатами (x, y); вместо x-координаты можно использовать LEFT, CENTER и RIGHT; высота стандартного шрифта 8 точек, поэтому строки должны идти с интервалами через 8. |
printNumI(num, x, y, [length], [filler]) | Выводит целое число (num) на экран на заданной позиции (x, y); опционально: length – количество символов, резервируемых для числа; filler – символ для заполнения «пустот», если число меньше желаемой длины length (по умолчанию это пробел ” “). |
printNumF(num, dec, x, y, [divider], [length], [filler]) | Выводит число (num) с плавающей запятой; dec – число знаков после запятой; опционально: divider – знак десятичного разделителя, по умолчанию точка “.”, length и filler – по аналогии с предыдущей функцией. |
setFont(name) | Выбирает шрифт; встроенные шрифты – SmallFont, MediumNumbers и BigNumbers. |
invertText(true), invertText(false) | Инвертирует текст, выведенный с помощью функций print, printNumI и printNumF (вкл./выкл.). |
drawBitmap(x, y, data, sx, sy) | Выводит картинку на экран по необходимым координатам (x, y); data – массив, содержащий картинку; sx и sy – ширина и высота рисунка. |
Рассмотрим работу с дисплеем с помощью данной библиотеки на примере простого скетча:
#include <LCD5110_Basic.h> LCD5110 LCD(7, 6, 5, 4, 3); //обьявляем дисплей с указанием пинов подключения extern uint8_t SmallFont[]; //указываем наличие массива со шрифтом SmallFont в библиотеке extern uint8_t MediumNumbers []; //указываем наличие массива со шрифтом MediumNumbers в библиотеке void setup() { LCD.InitLCD(); //инициализируем дисплей } void loop() { LCD.disableSleep(); //выводим дисплей из режима сна LCD.clrScr(); //очищаем дисплей LCD.setFont(SmallFont); //устанавливаем шрифт SmallFont LCD.print(“Hello World!”, CENTER, 2); //выводим “Hello World!” на второй строчке с равнением по центру LCD.setFont(MediumNumbers); // устанавливаем шрифт MediumNumbers for (int i=0; i<=5; i++) { LCD.clrScr(); //очищаем экран LCD.print(i, CENTER, 20); //выводим значение i по центру 20 строчки delay(1000); } LCD.enableSleep(); //вводим дисплей в режим сна на время длительной паузы delay(5000); }
После того как мы рассмотрели базовые функции библиотеки, остановимся более подробно на функции drawBitmap и рассмотрим особенности вывода изображений на экран.
Для начала нам понадобится интересующее изображение в формате .bmp.
Далее необходимо скачать программу Image Generate от Alex_EXE по адресу https://alex-exe.ru/programm/image-generate/. В окне программы устанавливаем необходимое разрешение нашего изображения на дисплее (должно быть меньше, чем 84 пикселя по горизонтали и 48 по вертикали), нажимаем «установить новый размер».

После этого нажимаем «Картинка», «Открыть», выбираем наш файл, жмем «преобразовать».

Нажимаем «Применить».

Теперь жмем на кнопку «Массив» и копируем появившийся массив в новый скетч.

#include <LCD5110_Basic.h> LCD5110 LCD(7, 6, 5, 4, 3); //обьявляем дисплей с указанием пинов подключения static const char lcd_image_mas[288] = {} //массив с изображением void setup() { LCD.InitLCD(); //инициализируем дисплей } void loop() { LCD.clrScr(); //очищаем дисплей LCD.drawBitmap(18, 0, lcd_image_mas, 48, 48); //выводим изображение из массива размером 48х48 пикселей начиная с точки 18х0 LCD.enableSleep(); //вводим дисплей в режим сна while(1); }
Выводы
Таким образом, мы подробно рассмотрели базовые возможности работы с дисплеем Nokia 5110 с помощью библиотеки LCD5110_Basic, научились быстро и просто выводить собственные изображения на экран и разобрали нюансы, связанные с подключением дисплея к платформе Arduino.
НЕЗАЧЕТ
ДАВАЙТЕ БИЛИОТЕКУ С ЗАЗЕМЛЕННЫМ CS