В большом количестве проектов для arduino и не только, необходимо знать, какое состояние наших датчиков в данный момент. Для этих целей подойдут LCD дисплеи. Сегодня разберем работу LCD Nokia 5110.
Данный дисплей является монохромным или по простому черно-белым. Не смотря на небольшие размеры 84 на 48 пикселей, позволяет выводить простую графику а также текст.
Описание LCD Nokia 5110
На сайте алиэкспрес представлены два вида таких дисплеев: синего и красного цвета. Отличаются они по подключению подсветки.
Характеристики дисплея LCD Nokia 5110 представлены в таблице ниже:
| Характеристика | Значение |
| Напряжение | 3.3 В |
| Размер видимой области | 84х48 pixel |
| Тип | TFT |
| Цвет | монохромный |
| Интерфейс обмена | SPI |
| Потребление | без подсветки 5 мА с подсветкой 20 мА |
| Температура работы | 0..+50 |
| Частота тактировния | до 4Мгц |
| Время сброса | 100 нс |
| Микросхема | PCD8544 |
Схема подключения дисплея к Arduino
Описание контактов дисплея NOKIA 5110
| VCC | Питание 3,3 В |
| GND | Общий провод |
| CE | Включение, активный низкий уровень |
| DC | Данные/команда: 0 – данные, 1 – команда |
| DIN | Вход интерфейса SPI |
| CLK | Тактовый сигнал |
| Reset | Сброс, активный низкий уровень |
| LED | Подсветка. Для модулей на красной плате соединить с общим, для синих модулей соединить с питанием. Применять в цепи подсветки резистор 330 Ом. В некоторых модификациях уже установлен резистор в некоторых нет. Для определения наличия резистора и выбора оптимального режима подсветки следует контролировать ток модуля и ток подсветки. Он не должен превышать 20 мА. |
Подключение дисплея Nokia 5110
Обратите внимание, в модулях синего цвета подсветка подключается к питанию, в красных модулях к GND.
| Дисплей Nokia 5110 | Плата Arduino |
|---|---|
| Контакт 1 RST | D12 |
| Контакт 2 CE | D11 |
| Контакт 3 DC | D10 |
| Контакт 4 DIN | D9 |
| Контакт 5 CLK | D8 |
| Контакт 6 VCC | +3.3V |
| Контакт 7 LIGHT | GND |
| Контакт 8 GND | GND |
Подготовка графики для дисплея
И так, мы подключили наш дисплей к ардуино, но нам необходимо подготовить графику для LCD. Так как дисплей монохромный то у нас в наличии только 2 цвета: черный и белый. Так же необходимо помнить о размере дисплея: 84×48.
Для удобной работы с графикой, используйте программу Image Generator.
Нажимаем Картинка, открываем нужный файл и нажимаем преобразовать.
Далее в вкладке Массив, мы имеем наш массив байт. Его мы копируем и вставляем в нашу программу.
Пример использования LCD Arduino mega
Для работы с LCD Nokia 5110 мы будем использовать библиотеку Nokia_LCD.h. Полное описание библиотеки смотрите здесь.
#include <Nokia_LCD.h>
#include "Small_LCD_Fonts.h"
// The bitmap was generated via the `LCD Assistant` utility.
static const char platis_solutions_logo[504] PROGMEM =
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0C, 0x8C, 0x4E, 0x3F, 0x0F, 0x0F, 0x3F, 0x4E, 0x8C, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xFC, 0xFE, 0x20, 0x30, 0x1C,
0x0E, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x02, 0x0C, 0x10, 0x20, 0xFE, 0xFC, 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0x01, 0x01, 0x71, 0x71, 0x71, 0x03, 0x0E, 0xFC,
0x60, 0x00, 0x03, 0x1F, 0x7D, 0xE3, 0x1E, 0x3E, 0xCF, 0x71, 0x1F, 0x03,
0x01, 0x0F, 0x0D, 0xFD, 0xFD, 0x01, 0xFD, 0xFD, 0x0D, 0x0F, 0x00, 0x03,
0x0F, 0x3D, 0xE3, 0xDE, 0x3C, 0xCF, 0xF1, 0x3F, 0x0F, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x3F, 0x02, 0x04, 0x08,
0x30, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0,
0x70, 0x38, 0x0C, 0x06, 0x7F, 0x3F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0x80, 0x80, 0xF8, 0x08, 0xF8, 0x84, 0xBE, 0xF3,
0x00, 0x80, 0xF0, 0xF8, 0x8E, 0xF3, 0x3C, 0x3C, 0xF3, 0xCE, 0xFC, 0xF0,
0x80, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xC0,
0xF8, 0x8E, 0xF7, 0x79, 0x3E, 0x79, 0xC7, 0xBC, 0xF0, 0xC0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x10, 0x31, 0x72, 0xFC, 0xF0, 0xFC, 0x7E, 0x71, 0x31, 0x10,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
unsigned int Counter = 0;
Nokia_LCD lcd(8 /* CLK */, 9 /* DIN */, 10 /* DC */, 11 /* CE */, 12 /* RST */, 7 /* BL */);
/**
* Or, if you would like to control the backlight on your own, init the lcd without the last argument
* Nokia_LCD lcd(13, 12, 11, 10, 9);
*/
void setup() {
// Initialize the screen
lcd.begin();
// Turn on the backlight
lcd.setBacklight(true);
// Set the contrast
lcd.setContrast(60); // Good values are usualy between 40 and 60
// Clear the screen by filling it with black pixels
lcd.clear(true);
delay(2000);
// Draw the platis.solutions logo on your screen
lcd.draw(platis_solutions_logo,
sizeof(platis_solutions_logo) / sizeof(platis_solutions_logo[0]),
true);
delay(3000);
// Clear the screen by filling it with white pixels
lcd.clear();
// Turn off the backlight
// lcd.setBacklight(false);
// Set the cursor on the beginning of the 6th row (the last one)
lcd.setCursor(0, 0);
lcd.setDefaultFont();
// Write something on the specific row with inverted color
//lcd.setInverted(true);
lcd.print("Hello world!");
//lcd.setInverted(false);
// The cursor is still on the 6th row. Newline characters ('\n') move the
// cursor to the next line. Since we were on the last row, the cursor goes
// back to the first line. If you check the return value of `println`
// it will indicate whether an out-of-bounds error occured. In this case it
// will be `true`.
lcd.println("\nI am here.");
}
void loop()
{
// put your main code here, to run repeatedly:
Counter++;
lcd.setCursor(0, 3);
lcd.println("Counter = ");
lcd.print(Counter);
//delay(1000);
}
Документация
- Даташит на микроконтроллер PCD8544
- Полный текст программы
- Библиотека для работы с дисплеем
- Программа Image generate
Где купить
- LCD Nokia 5110






