Отображение пользовательских символов с помощью PIС микроконтроллера на ЖК дисплее 16x2


В нашей предыдущей статье мы изучили основы подключения ЖК дисплея 16x2 к микроконтроллеру PIС – рекомендуем прочитать ее прежде чем переходить к изучению данной статьи. В данной же статье мы расширим функционал взаимодействия с ЖК дисплеем с помощью микроконтроллера PIС и будем выводить на его экран пользовательские, самостоятельно нами сформированные символы (custom characters).

Внешний вид проекта отображения на экране ЖК дисплея специальных символов

Также мы рассмотрим вывод на экран ЖК дисплея пользовательских символов, формируемых микросхемой контроллера HD44780A. Как известно, популярные сейчас ЖК дисплеи 16x2 содержат в своем составе контроллер Hitachi HD44780, который помогает им отображать символы на своем экране. Каждый символ, который мы будем отображать, хранится в ПЗУ (постоянном запоминающем устройстве) микросхемы HD44780. Поэтому сначала мы рассмотрим общие принципы работы данной микросхемы контроллера.

Общие принципы работы микросхемы контроллера HD44780

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

Character Generator ROM (CGROM) – это доступная только для чтения память, которая содержит все шаблоны (образцы) символов, хранящихся внутри нее. Данный тип памяти может изменяться в зависимости от типа интерфейса микросхемы, соответственно, может изменяться и набор хранящихся в ней шаблонов символов.

Display Data RAM (DDRAM) – это память с произвольным доступом. Всегда, когда мы хотим отобразить какой-нибудь символ на экране дисплея, его шаблон сначала транслируется из CGROM в DDRAM и только затем отображается на экране. Чтобы упростить данный процесс, память DDRAM хранит шаблоны всех символов, которые в данный момент отображаются на экране дисплея. Это позволяет для их отображения не обращаться каждый раз к памяти CGROM.

Character generator RAM (CGRAM) – это также память с произвольным доступом, в которую мы можем записывать данные и считывать данные. Как следует из ее названия, эта память может быть использована для формирования пользовательских символов (custom character). В данном случае нам необходимо записать шаблон символа в CGRAM, а затем этот шаблон можно считать из памяти и отобразить на экране дисплея когда это потребуется.

Теперь посмотрим на даташит контроллера HD44780, на его раздел, отвечающий за отображение пользовательских символов.

Специальные символы в памяти контроллера HD44780

Из представленного рисунка мы видим, что контроллер HD44780 имеет 8 позиций для хранения шаблонов пользовательских (специальных) символов в памяти CGRAM. Из рисунка мы также видим, что в памяти контроллера HD44780 при его изготовлении уже записаны шаблоны некоторых специальных символов. Давайте разберемся с тем, как их можно отображать на экране ЖК дисплея.

Отображение пользовательских символов на ЖК дисплее 16x2

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

Теперь, первым делом нам необходимо сформировать шаблон нашего пользовательского (специального символа). Как мы знаем, каждый символ на экране ЖК дисплея 16x2 представляет собой комбинацию из 5*8 точек. Нам лишь необходимо задать, на какие из этих точек подавать уровень high, а на какие – уровень low. Для этой цели можно на бумаге нарисовать шаблон вашего символа и обозначить на нем какие точки вашего символа будут темными в этой матрице. Для примера автор проекта (ссылка на оригинал приведена в конце статьи) использовал символ плетеного человечка, шаблон для формирования которого представлен на следующем рисунке.

Шаблон символа плетеного человечка для ЖК дисплея 16х2

В закрашенные клеточки необходимо записать ‘1’, а в не закрашенные – ‘0’. И тогда наш шаблон символа будет готов. Автор проекта сделал 8 шаблонов специальных символов для 8 позиций, присутствующих в памяти CGROM. Они показаны на рисунках ниже.

№ п/п Пользовательский символ Шаблон символа
1
 
2
 
3
 
4
 
5
 
6
 
7
 
8
 

Примечание: не обязательно загружать символами все 8 позиций в памяти CGRAM (можно и меньше).

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

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Теперь, когда шаблоны наших символов готовы, необходимо всего лишь загрузить их в память CGRAM ЖК дисплея и отобразить их потом на экране ЖК дисплея с помощью микроконтроллера PIC. Для их загрузки в память CGRAM мы можем сформировать двумерный массив 5*8 элементов и затем загрузить в память CGRAM по очереди каждый его байт с помощью цикла ‘for loop’. В нашем случае получим следующий массив для шаблона символа:

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

В представленном фрагменте кода каждое двоичное значение в цикле ‘for loop’ записывается в память CGROM. Когда шаблоны символов загружены в память контроллера, затем их можно вывести на экран дисплея просто указывая позицию шаблона с помощью функции Lcd_Print_Char(char data) как показано в следующем фрагменте кода.

Вывод на экран дисплея специальных символов, хранящихся в его памяти

В памяти DDROM контроллера HD44780 содержатся заранее записанные шаблоны определенного количества специальных символов. Эти символы можно вывести на экран дисплея обратившись к таблице специальных символов в даташите на контроллер и узнав из нее двоичное значение для необходимого символа.

Например, двоичное значение символа "ALPHA" в памяти контроллера равно 0b11100000. Принцип получения данного двоичного значения для символа "ALPHA" продемонстрирован на рисунке ниже. Аналогичным образом двоичное значение можно определить для любого символа из представленной таблицы специальных символов.

Принцип определения двоичного значения для специального символа "альфа"

Когда двоичное значение для символа из этой таблицы известно, его можно вывести на экран с помощью функции Lcd_Print_Char(char data).

Схема проекта

Схема проекта для отображение пользовательских символов с помощью PIС микроконтроллера на ЖК дисплее 16x2 представлена на следующем рисунке.

Схема проекта для отображение пользовательских символов с помощью PIС микроконтроллера на ЖК дисплее 16x2Мы использовали точно такую же схему, как и в предыдущем проекте про ЖК дисплей.

Тестирование работы нашего проекта по отображению специальных символов на экране ЖК дисплея 16x2 с помощью PIС микроконтроллера показано на следующем рисунке.

Тестирование работы проекта

Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы

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

Источник статьи

(Проголосуй первым!)
Загрузка...
813 просмотров

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

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