Как подключить 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. Теперь текст сменяется картинкой, и счётчик каждый раз увеличивает своё значение.





