Рубрики
Схемы на Arduino

Подключение графического ЖК дисплея ST7920 к Arduino

Обычные ЖК дисплеи 16х2 достаточно широко распространены в современных радиоэлектронных проектах, однако их возможностей хватает далеко не всегда, поскольку они могут отображать на своем экране только буквы и цифры (и некоторые другие символы) фиксированного размера. Поэтому в данной статье мы рассмотрим подключение графического ЖК дисплея ST7920 к плате Arduino. Данный дисплей имеет размер 128х64 точек, то есть общее количество точек на экране этого дисплея равно 8192, что эквивалентно 8192/8 = 1024 пикселям. Поэтому кроме обычных букв и цифр данный дисплей способен отображать на своем экране и различные графические изображения.

На нашем сайте мы уже рассматривали подключение различных дисплеев к плате Arduino:

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Графический ЖК дисплей 128х64 ST9720 (купить на AliExpress).
  3. Потенциометр 10 кОм (купить на AliExpress).
  4. Соединительный провода.
  5. Макетная плата.

Работа схемы

Схема подключения графического ЖК дисплея ST7920 к плате Arduino представлена на следующем рисунке.

Как видите, схема достаточно проста и все подключения в ней можно легко осуществить с помощью макетной платы. После того, как вы сделаете все необходимые подключения в схеме, у вас должна получиться примерно следующая конструкция:

Графический ЖК (жидкокристаллический) дисплей 128х64

Данный дисплей отличается малым энергопотреблением и подходит для использования в устройствах, питание которых осуществляется от батареек. Он поддерживает диапазон питающих напряжений от 2.2v до 5.5v, 8/4-битный параллельный режим работы и поставляется вместе с микросхемой контроллера/драйвера ST7290. Кроме параллельного режима работы можно также использовать последовательный режим работы по шине PSB (processor side bus) (PIN 15). Этот графический ЖК дисплей имеет автоматическое управление мощностью и возможность программного сброса, что позволяет без проблем подключать его к большинству современных микропроцессорных платформ, например, 8051, AVR, ARM, Arduino и Raspberry Pi.

При необходимости более подробного изучения возможностей данного ЖК дисплея вы можете изучить даташит на него.

Назначение контактов графического ЖК дисплея ST7920 приведено в следующей таблице.

№ контакта Название контакта Описание
1 Gnd земля
2 Vcc входное питающее напряжение (от 2.7v до 5.5v)
3 Vo контрастность
4 RS Выбор регистра: RS = 0 — регистр инструкций, RS = 1 — регистр данных
5 R/W управление чтением/записью
6 E Enable (доступность)
7,8,9,10,11,12,13,14 DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7 контакты данных (возможна работа в 8 и 4-битном режиме)
15 PSB выбор интерфейса: Low(0) — последовательная связь, High (1) — 8/4 параллельный режим
16 NC Not connected (не соединен)
17 RST Reset Pin (сброс)
18 Vout выходное напряжение (Vout<=7 В)
19 BLA подсветка (положительный вывод)
20 BLK подсветка (отрицательный вывод)

Конвертирование изображения в шестнадцатеричный код

Для того, чтобы иметь возможность отображения изображения на графическом ЖК дисплее необходимо знать шестнадцатеричный код (HEX code) данного изображения. Далее мы рассмотрим несколько шагов чтобы выполнить подобное конвертирование. Но перед этим удостоверьтесь в том, что размер вашего изображения не превышает 128х64.

Шаг 1. Уменьшите размер вашего изображения до 128х64 или менее. Это можно сделать в любом графическом редакторе, например, MS paint.

Шаг 2. Сохраните изображение в формате bmp (“image_name.bmp”).

Шаг 3. Конвертирование полученного изображения в шестнадцатеричный код. Для этого можно использовать, к примеру, редактор GIMP 2. На следующем рисунке показан пример открытия изображения в данном редакторе.

Шаг 4. После открытия изображения (в формате bmp) в редакторе GIMP 2 сохраните его в формате “.xbm” (X BitMap) (см. рисунок ниже). После этого откройте полученный файл в любом текстовом редакторе, например, Notepad, и вы получите шестнадцатеричный код изображения.

Сначала выберите опцию «Export as» в редакторе.

Затем выберите формат, показанный на следующем рисунке, и нажмите кнопку Export.

После этого экспортирования вы получите файл в формате “.xbm”. Откройте его с помощью Notepad (или любого другого аналогичного редактора) и вы получите шестнадцатеричный код изображения как показано на следующем рисунке.

Объяснение программы для Arduino

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

Далее опция ‘u8g(10)’ инициализирует соединение контакта выбора регистра (RS — Register Select) графического дисплея с 10 контактом платы Arduino. Контакт RS может обозначать либо ‘chip select’ (выбор чипа) – когда используется в последовательном режиме, либо ‘Register Select’ (выбор регистра) – когда используется в параллельном режиме. Мы используем последовательный режим, поэтому на контакте RS нам необходимо установить логическую «1» чтобы чип был доступен (enabled) и логический «0» чтобы чип был отключен (disabled).

Далее необходимо поместить шестнадцатеричный код изображения, которое вы хотите высветить на экране дисплея, в следующий участок кода:

Следующая функция будет у нас использоваться для печати изображения на экране дисплея. Формат команды для этого следующий — “u8g.drawXBMP(x, y, width of image, height of image, rook_bitmap)”, где x и y – начальная позиция для вывода изображения на экране дисплея, следующие два параметра – размеры изображения по ширине и высоте, они не должны превышать 128х64. И заключительный параметр в этой функции – имя массива, в который мы записали шестнадцатеричный код изображения.

Также мы запрограммировали две функции с именами “draw” и “next”, в которых текст на экран дисплея выводится с помощью команды “u8g.drawStr(x,y,”abcd”)”, где x и y – координаты позиции на экране дисплея, а ,”abcd” – выводимый текст.

Функция clearLCD() используется для очистки экрана дисплея при помощи передачи нулевого значения в две выше описанные функции.

Затем мы устанавливаем цвет и интенсивность свечения пикселя с помощью следующих участков кода:

Далее в функции void loop(void) мы будем выводить на экран графического ЖК дисплея текст и изображения с определенной задержкой. Сначала мы выведем на экран дисплея надпись “Circuit Digest” с использованием функции draw, затем после задержки в 2 секунды мы очистим экран дисплея и выведем на него надпись “Interfacing Graphical LCD using Arduino” с использованием функции next. Затем мы выведем на экран дисплея изображение с помощью функции picture() – которое останется на экране дисплея на 3 секунды. Так будет продолжаться до тех пор пока на устройство подается питающее напряжение.

После загрузки в плату Arduino приведенного кода программы подсоедините к ней графический ЖК дисплей как показано на выше приведенной схеме. После этого вы сможете наблюдать на экране дисплея сменяющие друг друга текст и изображения.

Далее приведен полный код программы.

Видео, демонстрирующее работу схемы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *