Графический дисплей 128×64: инструкция, примеры использования и документация

Используйте графический дисплей 128×64 для вывода текста, отрисовки графиков и отображения простых картинок. Монохромный экран выполнен по технологии LCD c разрешением 128×64 пикселей.

Графические дисплеи применяются в домашних охранных системах, робототехнике, МФУ-устройствах, вендинговых автоматах и турникетах общественного транспорта.

Примеры работы для Arduino

Мозгом для проекта выступит платформа Arduino Uno.

Подключение и настройка

Для начала необходимо собрать железо и выполнить программную настройку.

Что понадобится

Схема подключения

Контакт дисплея Контакт Arduino
1 VCC 5V
2 GND GND
3 VO К потенциометру, подробности ниже.
4 DB0 13
5 DB1 12
6 DB2 11
7 DB3 10
8 DB4 9
9 DB5 8
10 DB6 7
11 DB7 6
12 CS1 5
13 CS2 4
14 RST
15 RW GND
16 DC 3
17 EN 2
18 VEE К потенциометру, подробности ниже.
19 LED A 5V
20 LED K GND

Центральный контакт потенциометра подключите к контакту дисплея VO, а два крайних — к контактам дисплея VEE и земле GND.

Программная настройка

Вывод текста

Для старта выведем на дисплей приветствующую строку Hello World.

В отличии от текстовых дисплеев, графический экран не хранит в себе алфавиты и типографические символы. Шрифты загружаются в контроллер вместе с пользовательской программной. Библиотека U8g2 предоставляет широкий список шрифтов на любой вкус и цвет..

HelloWorld.ino
// Библиотека для работы с графическими дисплеями
#include <U8g2lib.h>
 
// Задаём имя пинов дисплея
constexpr uint8_t PIN_DB0 = 13;
constexpr uint8_t PIN_DB1 = 12;
constexpr uint8_t PIN_DB2 = 11;
constexpr uint8_t PIN_DB3 = 10;
constexpr uint8_t PIN_DB4 = 9;
constexpr uint8_t PIN_DB5 = 8;
constexpr uint8_t PIN_DB6 = 7;
constexpr uint8_t PIN_DB7 = 6;
constexpr uint8_t PIN_CS0 = 5;
constexpr uint8_t PIN_CS1 = 4;
constexpr uint8_t PIN_DC = 3;
constexpr uint8_t PIN_EN = 2;
 
/*
 * Создаём объект для работы с графическим дисплеем
 * U8G2_KS0108_128X64_F u8g2(ROTATION, 
                             DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7,
                             EN, DC, CS0, CS1, CS2, RESET);
 * Подробности подключения:
 * http://wiki.amperka.ru/products:display-lcd-graphic-128x64
*/
U8G2_KS0108_128X64_F display(U8G2_R0,
                             PIN_DB0, PIN_DB1, PIN_DB2, PIN_DB3, 
                             PIN_DB4, PIN_DB5, PIN_DB6, PIN_DB7,
                             PIN_EN, PIN_DC, PIN_CS0, PIN_CS1,
                             U8X8_PIN_NONE, U8X8_PIN_NONE);
 
void setup() {
  // Инициализируем дисплей
  display.begin();
  // Очищаем память
  display.clearBuffer();
  // Выбираем шрифт
  display.setFont(u8g2_font_ncenB08_tr);
  // Указываем положение курсора
  display.setCursor(0, 10);
  // Выводим строку
  display.print("Hello, World!");
  // Отсылаем данные на дисплей
  display.sendBuffer();
}
 
void loop() {
}

Вывод текста: шрифты

Внесём немного красок в проект, выведем текст на экране различными шрифтами.

HelloWorldFonts.ino
// Библиотека для работы с графическими дисплеями
#include <U8g2lib.h>
 
// Задаём имя пинов дисплея
constexpr uint8_t PIN_DB0 = 13;
constexpr uint8_t PIN_DB1 = 12;
constexpr uint8_t PIN_DB2 = 11;
constexpr uint8_t PIN_DB3 = 10;
constexpr uint8_t PIN_DB4 = 9;
constexpr uint8_t PIN_DB5 = 8;
constexpr uint8_t PIN_DB6 = 7;
constexpr uint8_t PIN_DB7 = 6;
constexpr uint8_t PIN_CS0 = 5;
constexpr uint8_t PIN_CS1 = 4;
constexpr uint8_t PIN_DC = 3;
constexpr uint8_t PIN_EN = 2;
 
/*
 * Создаём объект для работы с графическим дисплеем
 * U8G2_KS0108_128X64_F u8g2(ROTATION, 
                             DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7,
                             EN, DC, CS0, CS1, CS2, RESET);
 * Подробности подключения:
 * http://wiki.amperka.ru/products:display-lcd-graphic-128x64
*/
U8G2_KS0108_128X64_F display(U8G2_R0,
                             PIN_DB0, PIN_DB1, PIN_DB2, PIN_DB3, 
                             PIN_DB4, PIN_DB5, PIN_DB6, PIN_DB7,
                             PIN_EN, PIN_DC, PIN_CS0, PIN_CS1,
                             U8X8_PIN_NONE, U8X8_PIN_NONE);
 
void setup() {
  // Инициализируем дисплей
  display.begin();
  // Очищаем память
  display.clearBuffer();
  // Включаем поддержку UTF8
  display.enableUTF8Print();
  // Выбираем шрифт
  display.setFont(u8g2_font_4x6_tr);
  // Указываем положение курсора
  display.setCursor(0, 5);
  // Выводим строку
  display.print("Hello, world");
  // Выбираем шрифт
  display.setFont(u8g2_font_ncenR08_tr);
  // Указываем положение курсора
  display.setCursor(0, 22);
  // Выводим строку
  display.print("Graphic LCD");
  // Выбираем шрифт
  display.setFont(u8g2_font_luBIS08_tr);
  // Указываем положение курсора
  display.setCursor(0, 40);
  // Выводим строку
  display.print("Resolution: 128x64");
  // Выбираем шрифт
  display.setFont(u8g2_font_HelvetiPixelOutline_tr);
  // Указываем положение курсора
  display.setCursor(2, 60);
  // Выводим строку на дисплей
  display.print("Different fonts");
  // Отсылаем данные на дисплей
  display.sendBuffer();
}
 
void loop() {
}

Вывод текста: кириллица

В продолжении выведем на дисплей текст в кириллице. Для вывода кириллицы используйте соответствующие шрифты.

HelloWorldRus.ino
// Библиотека для работы с графическими дисплеями
#include <U8g2lib.h>
 
// Задаём имя пинов дисплея
constexpr uint8_t PIN_DB0 = 13;
constexpr uint8_t PIN_DB1 = 12;
constexpr uint8_t PIN_DB2 = 11;
constexpr uint8_t PIN_DB3 = 10;
constexpr uint8_t PIN_DB4 = 9;
constexpr uint8_t PIN_DB5 = 8;
constexpr uint8_t PIN_DB6 = 7;
constexpr uint8_t PIN_DB7 = 6;
constexpr uint8_t PIN_CS0 = 5;
constexpr uint8_t PIN_CS1 = 4;
constexpr uint8_t PIN_DC = 3;
constexpr uint8_t PIN_EN = 2;
 
/*
 * Создаём объект для работы с графическим дисплеем
 * U8G2_KS0108_128X64_F u8g2(ROTATION, 
                             DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7,
                             EN, DC, CS0, CS1, CS2, RESET);
 * Подробности подключения:
 * http://wiki.amperka.ru/products:display-lcd-graphic-128x64
*/
U8G2_KS0108_128X64_F display(U8G2_R0,
                             PIN_DB0, PIN_DB1, PIN_DB2, PIN_DB3, 
                             PIN_DB4, PIN_DB5, PIN_DB6, PIN_DB7,
                             PIN_EN, PIN_DC, PIN_CS0, PIN_CS1,
                             U8X8_PIN_NONE, U8X8_PIN_NONE);
 
void setup() {
  // Инициализируем дисплей
  display.begin();
  // Очищаем память
  display.clearBuffer();
  // Включаем поддержку UTF8
  display.enableUTF8Print();
  // Выбираем шрифт
  display.setFont(u8g2_font_4x6_t_cyrillic);
  // Указываем положение курсора
  display.setCursor(0, 5);
  // Выводим строку
  display.print("Привет, мир!");
  // Выбираем шрифт
  display.setFont(u8g2_font_5x8_t_cyrillic);
  // Указываем положение курсора
  display.setCursor(0, 20);
  // Выводим строку
  display.print("Графический дисплей");
  // Выбираем шрифт
  display.setFont(u8g2_font_6x13_t_cyrillic);
  // Указываем положение курсора
  display.setCursor(0, 40);
  // Выводим строку
  display.print("Разрешение: 128x64");
  // Выбираем шрифт
  display.setFont(u8g2_font_9x15_t_cyrillic);
  // Указываем положение курсора
  display.setCursor(0, 60);
  // Выводим строку на дисплей
  display.print("Русские шрифты");
  // Отсылаем данные на дисплей
  display.sendBuffer();
}
 
void loop() {
}

Вывод геометрических фигур

Далее отрисуем на дисплее геометрические фигуры.

GeometricFigures.ino
// Библиотека для работы с графическими дисплеями
#include <U8g2lib.h>
 
// Задаём имя пинов дисплея
constexpr uint8_t PIN_DB0 = 13;
constexpr uint8_t PIN_DB1 = 12;
constexpr uint8_t PIN_DB2 = 11;
constexpr uint8_t PIN_DB3 = 10;
constexpr uint8_t PIN_DB4 = 9;
constexpr uint8_t PIN_DB5 = 8;
constexpr uint8_t PIN_DB6 = 7;
constexpr uint8_t PIN_DB7 = 6;
constexpr uint8_t PIN_CS0 = 5;
constexpr uint8_t PIN_CS1 = 4;
constexpr uint8_t PIN_DC = 3;
constexpr uint8_t PIN_EN = 2;
 
/*
 * Создаём объект для работы с графическим дисплеем
 * U8G2_KS0108_128X64_F u8g2(ROTATION, 
                             DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7,
                             EN, DC, CS0, CS1, CS2, RESET);
 * Подробности подключения:
 * http://wiki.amperka.ru/products:display-lcd-graphic-128x64
*/
U8G2_KS0108_128X64_F display(U8G2_R0,
                             PIN_DB0, PIN_DB1, PIN_DB2, PIN_DB3, 
                             PIN_DB4, PIN_DB5, PIN_DB6, PIN_DB7,
                             PIN_EN, PIN_DC, PIN_CS0, PIN_CS1,
                             U8X8_PIN_NONE, U8X8_PIN_NONE);
 
void setup() {
  // Инициализируем дисплей
  display.begin();
  // Очищаем память
  display.clearBuffer();
  // Переменные для хранения высоты и ширины дисплея
  int width = display.getBufferTileWidth() * 8;
  int height = display.getBufferTileHeight() * 8;
  // Рисуем две диагонали
  display.drawLine(0, 0, width - 1, height - 1);
  display.drawLine(0, height - 1, width - 1, 0);
  // Рисуем окружность радиусом 30 в центре дисплея
  display.drawCircle(width / 2, height / 2, 30, U8G2_DRAW_ALL);
  // Рисуем диск (закрашенную окружность) радиусом 20 в центре дисплея
  display.drawDisc(width / 2, height / 2, 20, U8G2_DRAW_ALL);
  // Отсылаем данные на дисплей
  display.sendBuffer();
}
 
void loop() {
}

Вывод символов Unicode

А ещё графический дисплей позволяет выводить символы из кодировки Юникод. Для вывода Unicode используйте соответствующие шрифты.

UnicodeCharacters.ino
// Библиотека для работы с графическими дисплеями
#include <U8g2lib.h>
 
// Задаём имя пинов дисплея
constexpr uint8_t PIN_DB0 = 13;
constexpr uint8_t PIN_DB1 = 12;
constexpr uint8_t PIN_DB2 = 11;
constexpr uint8_t PIN_DB3 = 10;
constexpr uint8_t PIN_DB4 = 9;
constexpr uint8_t PIN_DB5 = 8;
constexpr uint8_t PIN_DB6 = 7;
constexpr uint8_t PIN_DB7 = 6;
constexpr uint8_t PIN_CS0 = 5;
constexpr uint8_t PIN_CS1 = 4;
constexpr uint8_t PIN_DC = 3;
constexpr uint8_t PIN_EN = 2;
 
/*
 * Создаём объект для работы с графическим дисплеем
 * U8G2_KS0108_128X64_F u8g2(ROTATION, 
                             DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7,
                             EN, DC, CS0, CS1, CS2, RESET);
 * Подробности подключения:
 * http://wiki.amperka.ru/products:display-lcd-graphic-128x64
*/
U8G2_KS0108_128X64_F display(U8G2_R0,
                             PIN_DB0, PIN_DB1, PIN_DB2, PIN_DB3, 
                             PIN_DB4, PIN_DB5, PIN_DB6, PIN_DB7,
                             PIN_EN, PIN_DC, PIN_CS0, PIN_CS1,
                             U8X8_PIN_NONE, U8X8_PIN_NONE);
 
void setup() {
  // Инициализируем дисплей
  display.begin();
  // Очищаем память
  display.clearBuffer();
  // Выбираем шрифт в кодировке Unicode
  display.setFont(u8g2_font_unifont_t_symbols);
  // Выводим символы из таблицы на дисплей
  display.drawUTF8(20, 30, "☀ ☁ ☂ ☃ ☕");
  // Отсылаем данные на дисплей
  display.sendBuffer();
}
 
void loop() {
}

Вывод изображений

В завершении выведем на экран дисплея монохромное изображение. Для этого воспользуйтесь графическим редактором GIMP и преобразуйте исходную картинку в текстовый массив чисел .xbm.

Основные правила при конвертации изображения:

  • Формат: .xbm
  • Максимальное разрешение: 128×64 пикселя
  • Цвет: чёрно-белое, никаких оттенков серого
Image.ino
// Библиотека для работы с графическими дисплеями
#include <U8g2lib.h>
 
// Задаём имя пинов дисплея
constexpr uint8_t PIN_DB0 = 13;
constexpr uint8_t PIN_DB1 = 12;
constexpr uint8_t PIN_DB2 = 11;
constexpr uint8_t PIN_DB3 = 10;
constexpr uint8_t PIN_DB4 = 9;
constexpr uint8_t PIN_DB5 = 8;
constexpr uint8_t PIN_DB6 = 7;
constexpr uint8_t PIN_DB7 = 6;
constexpr uint8_t PIN_CS0 = 5;
constexpr uint8_t PIN_CS1 = 4;
constexpr uint8_t PIN_DC = 3;
constexpr uint8_t PIN_EN = 2;
 
/*
 * Создаём объект для работы с графическим дисплеем
 * U8G2_KS0108_128X64_F u8g2(ROTATION, 
                             DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7,
                             EN, DC, CS0, CS1, CS2, RESET);
 * Подробности подключения:
 * http://wiki.amperka.ru/products:display-lcd-graphic-128x64
*/
U8G2_KS0108_128X64_F display(U8G2_R0,
                             PIN_DB0, PIN_DB1, PIN_DB2, PIN_DB3, 
                             PIN_DB4, PIN_DB5, PIN_DB6, PIN_DB7,
                             PIN_EN, PIN_DC, PIN_CS0, PIN_CS1,
                             U8X8_PIN_NONE, U8X8_PIN_NONE);
 
// Массив изображения файла xbm
#define amperka_width 128
#define amperka_height 64
static const unsigned char amperka_bits[] U8X8_PROGMEM = {
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
   0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x78, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
   0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x78, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xf8, 0x1f, 0x02, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf0,
   0x0f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0xe0, 0xe1, 0x87, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0xc0, 0x03, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc3,
   0xc3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0xe0, 0xf1, 0x8f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf9, 0x9f, 0x07, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7c,
   0x3e, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0xf0, 0x1e, 0x78, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0e, 0x70, 0x0e, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0e,
   0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x70, 0x0e, 0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0e, 0x70, 0x0e, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0e,
   0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0xf0, 0x1e, 0x78, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7c, 0x3e, 0x0f, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf9,
   0x9f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0xe0, 0xf3, 0xcf, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc7, 0xe3, 0x03, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f,
   0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
   0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x7e, 0x33, 0x30, 0xff, 0xc1, 0x0f, 0xfb, 0x60, 0x30,
   0xf8, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x73, 0x38, 0xff, 0xe1,
   0x1f, 0xff, 0x61, 0x38, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc7,
   0xf3, 0x3c, 0x83, 0xf1, 0x3c, 0x87, 0x63, 0x1c, 0x8e, 0x07, 0x00, 0x00,
   0x00, 0x00, 0x80, 0x83, 0xf3, 0x3c, 0x83, 0x31, 0x30, 0x03, 0x67, 0x0e,
   0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0xf3, 0x3f, 0x83, 0xf9,
   0x3f, 0x03, 0x66, 0x0e, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01,
   0xb3, 0x37, 0x83, 0xf9, 0x3f, 0x03, 0xe6, 0x07, 0x03, 0x06, 0x00, 0x00,
   0x00, 0x00, 0xc0, 0x01, 0xb3, 0x37, 0x83, 0x39, 0x00, 0x03, 0xe6, 0x07,
   0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x33, 0x33, 0x83, 0x39,
   0x00, 0x03, 0x67, 0x0e, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc7,
   0x33, 0x30, 0x83, 0x71, 0x38, 0x87, 0x63, 0x1c, 0x8f, 0x07, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xff, 0x33, 0x30, 0x83, 0xf1, 0x3f, 0xff, 0x61, 0x38,
   0xfe, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x33, 0x30, 0x83, 0xc1,
   0x1f, 0xfb, 0x60, 0x38, 0xfc, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
   0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x60, 0x30, 0x70, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00 };
 
void setup() {
  // Инициализируем дисплей
  display.begin();
  // Очищаем память
  display.clearBuffer();
  // Выводим изображение на дисплей
  display.drawXBMP(0, 0, amperka_width, amperka_height, amperka_bits);
  // Отсылаем данные на дисплей
  display.sendBuffer();
}
 
void loop() {
}

Элементы дисплея

Дисплей

Дисплей MT-12864J выполнен на монохромной жидкокристаллической матрице с разрешением 128×64 пикселей. Каждый пиксель поддерживает только два состояния: включён или выключен, 1 или 0, true или false.

Матрица экрана подключена к драйверу дисплея, который выполняет роль посредника между экраном и управляющим микроконтроллером.

Драйвер дисплея

В систему драйвера входит три чипа: два контроллера сегментов KS0108 и один контроллер общих линий KS0107.

  • KS0108 LCD Segment Driver — это контроллер сегментов ЖК-дисплея с 64-канальным выходом. Для управления графическим дисплеем разрешением 128×64 пикселей, требуется два таких чипа. Первый KS0108 для управления левой половиной сегментов SEG1–SEG64, а второй KS0108 для управления правой половиной сегментов SEG65–SEG128. Доступ к двум половинам дисплея осуществляется индивидуально посредством сигнальных линий CS1 и CS2.
  • KS0107 LCD Common Driver — это контроллер общих линий индикатора ЖК-дисплея с 64-канальным выходом, который управляет общими линиями матрицы COM1–COM64 и генерирует временные сигналы для синхронизации с двумя сегментными контроллерами KS0108.

Контакты подключения

На плате дисплея выведено 20 контактов для подключения питания и взаимодействия с управляющей электроникой.

Вывод Обозначение Описание Подключение
1 VCC Питание дисплея Подключите к питанию 5 В.
2 GND Общая земля Подключите к земле.
3 VO Контрастность экрана Подключите к средней ноге потенциометра.
4-11 D0-D7 Линии данных Подключите к пинам ввода-вывода микроконтроллера.
12 CS1 Выбор контроллера #1 KS0108 (сегменты 1–64) Подключите к пину ввода-вывода микроконтроллера.
13 CS2 Выбор контроллера #2 KS0108 (сегменты 65–128) Подключите к пину ввода-вывода микроконтроллера.
14 RST Сброс содержимого дисплея Подключите к пину ввода-вывода микроконтроллера.
15 RW Выбор режима: запись или чтение Подключите к пину ввода-вывода микроконтроллера. Если не планируете считывать информацию с дисплея подключите к земле.
16 DC Выбор режима: данные или команда Подключите к пину ввода-вывода микроконтроллера.
17 EN Строб разрешения записи или чтение данных Подключите к пину ввода-вывода микроконтроллера.
18 VEE Выход отрицательного напряжения Подключите к одной из крайних ног потенциометра.
19 LED A Анод питания подсветки «+» Подключите к питанию 5 В.
20 LED K Катод питания подсветки «–» Подключите к земле.

Габаритные чертёж

Характеристики

  • Модель: МЭЛТ MT-12864J-2FLA
  • Разрешение: 128×64
  • Матрица: жидкокристаллическая LCD
  • Подсветка: светодиодная LED
  • Цвет пикселей: чёрный
  • Цвет подсветки: янтарный
  • Контроллеры дисплея:
    • LCD Segment Driver К145ВГ10 / KS0108 (2 шт.)
    • LCD Common Driver К145ВГ9Н5 / KS0107 (1 шт.)
  • Интерфейс дисплея: параллельный 8 бит
  • Входное напряжение питания: 5 В
  • Логическое напряжение уровней: 3,3–5 В
  • Видимая область экрана: 60×32,6 мм
  • Размеры дисплейного модуля: 75×52,7×15 мм

Ресурсы

Документация

Библиотеки