Как подключить LCD дисплей для Nokia 5110 к Arduino
Инструкция по подключению ЖК экрана Nokia 5110 к Arduino
Нам понадобится:
- Arduino (или совместимая плата);
- ЖК дисплей для Nokia 5110/3310;
- соединительные провода;
- макетная плата;
- Arduino IDE и компьютер.
1Схема подключения ЖК экрана Nokia 5110 к Arduino
Подключим ЖК экран от Nokia 5110 к Arduino по приведённой схеме.
Пин Arduino | Пин экрана Nokia 5110 | Название | Функция |
---|---|---|---|
3,3 V | 1 | Vcc | Питание экрана, от 2,7 до 3,3 В |
GND | 2 | GND | Земля |
3 | 3 | SCE | Enable, активный LOW |
4 | 4 | Reset | Reset, активный LOW |
5 | 5 | D/C | Выбор «Данные/команда»: "0" – данные, "1" – команда |
6 | 6 | SDN | Вход данных |
7 | 7 | SCLK | Вход тактовых импульсов |
3,3 V | 8 | LED | Светодиодная подсветка экрана |
Будьте внимательны, некоторые модификации экрана имеют другую нумерацию выводов. Также на некоторых модификациях экрана вывод подсветки подключается к GND, а не Vcc.
Заказать недорого экран Nokia 5110 можно, например, в Китае.
2Библиотека для работы с LCD дисплеем Nokia 5110
Для работы с этим LCD экраном написано много библиотек. Предлагаю воспользоваться вот этой библиотекой. Скачаем и разархивируем скачанный файл в директорию Arduino IDE/libraries/.
Библиотека поддерживает следующие возможности.
Функция | Назначение |
---|---|
LCD5110(SCK, MOSI, DC, RST, CS) | объявление ЖК экрана с указанием соответствия пинам Arduino; |
InitLCD([contrast]) | инициализация дисплея 5110 с опциональным указанием контрастности (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) | выводит строку символов с заданными координатами; вместо x-координаты можно использовать LEFT, CENTER и RIGHT; высота стандартного шрифта 8 точек, поэтому строки должны идти с интервалами через 8; |
printNumI(num, x, y, [length], [filler]) | вывести целое число на экран на заданной позиции (x, y); length – желаемая длина числа; filler – символ для заполнения «пустот», если число меньше желаемой длины; по умолчанию это пустой пробел " "; |
printNumF(num, dec, x, y, [divider], [length], [filler]) | вывести число с плавающей запятой; dec – число знаков после запятой; divider – знак десятичного разделителя, по умолчанию точка "."; |
setFont(name) | выбрать шрифт; встроенные шрифты называются SmallFont и TinyFont; вы можете определить свои шрифты в скетче; |
invertText(true), invertText(false) | инверсия текста вкл./выкл.; |
drawBitmap(x, y, data, sx, sy) | вывести картинку на экран по координатам x и y; data – массив, содержащий картинку; sx и sy – ширина и высота рисунка. |
3Скетч для вывода текста на ЖК экран Nokia 5110
Напишем такой скетч.
#include <LCD5110_Basic.h> // подключаем библиотеку LCD5110 myGLCD(7,6,5,4,3); // объявляем номера пинов LCD extern uint8_t SmallFont[]; // малый шрифт (из библиотеки) extern uint8_t MediumNumbers[]; // средний шрифт для цифр (из библиотеки) int seconds = 0; // счётчик секунд void setup() { myGLCD.InitLCD(); // инициализация LCD дисплея } void loop() { myGLCD.clrScr(); // очистка экрана myGLCD.setFont(SmallFont); // задаём размер шрифта myGLCD.print("Hello,", LEFT, 0); // выводим на строке 0, равнение по левому краю myGLCD.print("SolTau.ru :-)", CENTER, 16); // выводим в строке 16 myGLCD.setFont(MediumNumbers); // задаём размер шрифта myGLCD.print(String(seconds), CENTER, 34); // выводим в строке 34 seconds += 1; // инкрементируем счётчик delay (1000); // задержка 1 сек }
Сначала подключаем библиотеку, затем объявляем экземпляр класса LCD5110 с назначением выводов. В процедуре setup() инициализируем ЖК экран. В процедуре loop() очищаем экран и пишем маленьким шрифтом произвольный текст, под ним – средним шрифтом выводим счётчик секунд.
4Скетч для вывода изображения на ЖК экран Nokia 5110
Давайте к тексту на экране добавим картинку. Для этого подготовим монохромное изображение, которое хотим вывести на экран Nokia 5110. Помните, что разрешение экрана Nokia 5110 составляет 48 на 84 точек, и картинка должна быть не больше. Воспользуемся онлайн-инструментом для преобразования изображения в массив битов. Скачаем полученный файл с расширением "*.c" и добавим его к проекту через меню: Эскиз Добавить файл… или просто поместим файл в директорию скетча, а затем перезагрузим среду разработки Arduino IDE.
Дополним наш скетч работой с изображением.
#include <LCD5110_Basic.h> LCD5110 myGLCD(7,6,5,4,3); extern uint8_t SmallFont[]; extern uint8_t MediumNumbers[]; extern uint8_t mysymb[]; // массив из точек изображения int seconds = 0; void setup() { myGLCD.InitLCD(); } void loop() { myGLCD.clrScr(); // очистка экрана myGLCD.drawBitmap(CENTER, 0, mysymb, 48, 48); // выводим изображение delay (1000); // задержка 1 сек myGLCD.clrScr(); myGLCD.setFont(SmallFont); myGLCD.print("Hello,", LEFT, 0); myGLCD.print("SolTau.ru :-)", CENTER, 16); myGLCD.setFont(MediumNumbers); myGLCD.print(String(seconds), CENTER, 34); delay (1000); seconds += 1; }
Теперь нужно в коде программы объявить массив с данными изображения (у меня в коде это строка extern uint8_t mysymb[];, а в файле изображения массив называется mysymb[]), а затем используем функцию drawBitmap() для вывода изображения в нужном месте экрана.
Загрузим скетч в Arduino. Теперь текст сменяется картинкой, и счётчик каждый раз увеличивает своё значение.