В большом количестве проектов для 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