- Микросхема контроллера матричного ЖК-дисплея 16x2 HD44780:
- Отображение произвольного символа на ЖК-дисплее 16x2:
- Программирование и объяснение работы:
- Схемы подключения и тестирование:
В нашем предыдущем руководстве мы узнали, как связать ЖК-дисплей 16 * 2 с микроконтроллером PIC. Мы рекомендуем вам пройти через это, прежде чем идти дальше, если вы новичок в микроконтроллере PIC. Ранее мы также изучили основы PIC, используя программу мигания светодиода и таймеры в микроконтроллере PIC. Вы можете проверить здесь все руководства по изучению микроконтроллеров PIC с использованием компилятора MPLABX и XC8.
В этом уроке давайте сделаем его более интересным, создав наши собственные символы и отобразив их на ЖК-экране с помощью микроконтроллера PIC PIC16F877A. Также есть некоторые предопределенные наиболее часто используемые пользовательские символы, заданные самой HD44780A IC, мы также увидим, как мы можем их использовать. Как объяснялось в нашем предыдущем руководстве, в наш ЖК-дисплей встроен контроллер Hitachi HD44780, который помогает нам отображать символы. Каждый символ, который мы отображаем, уже предопределен в ПЗУ HD44780 IC. Прежде чем отображать символы на ЖК-дисплее, мы узнаем о ЖК-контроллере HD44780.
Микросхема контроллера матричного ЖК-дисплея 16x2 HD44780:
Чтобы отобразить настраиваемый персонаж, мы должны каким-то образом сообщить IC, как он будет выглядеть. Для этого мы должны знать о трех типах воспоминаний, присутствующих в микросхеме ЖК-контроллера HD44780:
ПЗУ генератора символов (CGROM): это постоянное запоминающее устройство, которое, как было сказано ранее, содержит все шаблоны символов, предварительно определенные внутри него. Это ПЗУ будет отличаться от каждого типа интерфейсной ИС, и некоторые из них могут иметь заранее определенный пользовательский символ.
ОЗУ данных дисплея (DDRAM): это оперативная память. Каждый раз, когда мы отображаем символ, его образец будет извлечен из CGROM и перенесен в DDRAM, а затем будет помещен на экран. Проще говоря, DDRAM будет иметь шаблоны всех символов, которые в настоящее время отображаются на ЖК-экране. Таким образом, для каждого цикла IC не нужно извлекать данные из CGROM и помогает получить короткую частоту обновления.
ОЗУ генератора символов (CGRAM): это также память с произвольным доступом, поэтому мы можем записывать и читать данные из нее. Как следует из названия, эта память будет той, которую можно использовать для создания специального персонажа. Мы должны сформировать шаблон для символа и записать его в CGRAM, этот шаблон можно будет прочитать и отобразить на экране при необходимости.
Теперь, когда мы получили базовое представление о типах памяти, присутствующей в ИС интерфейса HD44780. Давайте заглянем в его таблицу, чтобы понять немного больше.
Поскольку, как следует из таблицы, микросхема HD44780 предоставила 8 мест для хранения наших пользовательских шаблонов в CGRAM, также справа мы можем видеть, что есть некоторые предопределенные символы, которые также могут отображаться на нашем ЖК-экране. Давайте посмотрим, как мы можем это сделать.
Отображение произвольного символа на ЖК-дисплее 16x2:
Чтобы отобразить пользовательский символ, мы должны сначала создать для него шаблон, а затем сохранить его в CGRAM. Поскольку у нас уже есть библиотечные функции, это должно быть легко сделать с помощью некоторых простых команд. Вот библиотека для функций ЖК-дисплея, но здесь мы скопировали все функции библиотеки в саму программу, поэтому нет необходимости включать этот файл заголовка в нашу программу. Также ознакомьтесь с этой статьей, чтобы узнать о работе основного ЖК-дисплея и его распиновке.
Первым шагом является создание шаблона или пользовательского персонажа. Как мы знаем, каждый символ представляет собой комбинацию 5 * 8 точек. Мы должны выбрать, какая точка (пиксель) должна быть высокой, а какая - низкой. Просто нарисуйте прямоугольник, как показано ниже, и закрасьте области в зависимости от вашего персонажа. Мой персонаж здесь - человек-палка (надеюсь, он похож на него). После закрашивания просто запишите эквивалентное двоичное значение каждого байта, как показано ниже.
Просто поместите «1» в заштрихованную область и «0» в незатененную область для каждого байта, и вот наш собственный шаблон готов. Точно так же я сделал 8 пользовательских кодов шаблонов для наших 8 пространств памяти, представленных в CGROM. Они перечислены в таблице ниже.
С.НО: |
Пользовательский персонаж |
Код шаблона |
1 |
0b01110, 0b01110, 0b00100, 0b01110, 0b10101, 0b00100, 0b01010, 0b01010 |
|
2 |
0b00000, 0b00000, 0b01010, 0b00100, 0b00100, 0b10001, 0b01110, 0b00000 |
|
3 |
0b00100, 0b01110, 0b11111, 0b11111, 0b01110, 0b01110, 0b01010, 0b01010 |
|
4 |
0b01110, 0b10001, 0b10001, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
|
5 |
0b01110, 0b10000, 0b10000, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
|
6 |
0b00000, 0b10001, 0b01010, 0b10001, 0b00100, 0b01110, 0b10001, 0b00000 |
|
7 |
0b00000, 0b00000, 0b01010, 0b10101, 0b10001, 0b01110, 0b00100, 0b00000 |
|
8 |
0b11111, 0b11111, 0b10101, 0b11011, 0b11011, 0b11111, 0b10001, 0b11111 |
Примечание. Не обязательно загружать все 8 пробелов, представленных в CGRAM.
Программирование и объяснение работы:
Теперь наши коды шаблонов готовы, нам просто нужно загрузить их в CGRAM ЖК-дисплея и отобразить их с помощью микроконтроллера PIC. Чтобы загрузить их в CGRAM, мы можем сформировать массив элементов размером 5 * 8 и загрузить каждый байт, используя цикл for . Массив кода шаблона показан ниже:
const unsigned short Custom_Char5x8 = {0b01110,0b01110,0b00100,0b01110,0b10101,0b00100,0b01010,0b01010, // Код для пространства памяти CGRAM 1 0b00000,0b00000,0b01010,0b00100,0b00100,0b10001,0b01110,0b00000, // Область памяти CGRAM 2 0b00100,0b01110,0b11111,0b11111,0b01110,0b01110,0b01010,0b01010, // Код для области памяти CGRAM 3 0b01110,0b10001,0b10001,0b11111,0b11011,0b11011,0b11111,0b00000, // Код для памяти CGRAM space 4 0b01110,0b10000,0b10000,0b11111,0b11011,0b11011,0b11111,0b00000, // Код для пространства памяти CGRAM 5 0b00000,0b10001,0b01010,0b10001,0b00100,0b01110,0b10001,0b00000, // Код для пространства памяти CGRAM 6 0b00000,0b00000,0b01010,0b10101,0b10001,0b01110,0b00100,0b00000, // Код для пространства памяти CGRAM 7 0b11111,0b11111,0b10101,0b11011,0b11011,0b11111,0b10001,0b11111 // Код для пространства памяти CGRAM 8};
Каждая область памяти загружается своим уважаемым шаблоном символов. Чтобы загрузить этот шаблон в ИС HD44780, необходимо обратиться к техническому описанию HD44780, но для установки адреса CGRAM можно использовать только строки команды.
// *** Загрузить пользовательский символ в CGROM *** ////// Lcd_Cmd (0x04); // Установка адреса CGRAM Lcd_Cmd (0x00); //.. установить адрес CGRAM для (i = 0; i <= 63; i ++) Lcd_Print_Char (Custom_Char5x8); Lcd_Cmd (0); // Вернуться на главную Lcd_Cmd (2); //.. вернуться на главную // *** Загрузка пользовательского символа завершена *** //////
Здесь внутри цикла for каждое двоичное значение загружается в CGROM. После загрузки шаблона пользовательские символы могут быть отображены путем простого вызова местоположения шаблона с помощью функции void Lcd_Print_Char (char data), как показано ниже.
Lcd_Print_Char (0); // Отображение настраиваемого символа 0 Lcd_Print_Char (1); // Отображение специального символа 1 Lcd_Print_Char (2); // Отображение специального символа 2 Lcd_Print_Char (3); // Отображение настраиваемого символа 3 Lcd_Print_Char (4); // Отображение специального символа 4 Lcd_Print_Char (5); // Отображение специального символа 5 Lcd_Print_Char (6); // Отображение настраиваемого символа 6 Lcd_Print_Char (7); // Отображение специального символа 7
Распечатать предопределенный специальный символ:
В микросхеме HD44780 есть несколько предопределенных специальных символов, хранящихся в DDROM. Эти символы можно напрямую распечатать на экране, указав их двоичное значение в таблице.
Например: двоичное значение символа «АЛЬФА» - 0b11100000. Как это получить, можно понять из рисунка ниже, аналогично вы можете получить значение для любого специального символа, который предварительно определен в IC.
Как только двоичное значение известно, соответствующий символ можно вывести на экран, просто используя функцию void Lcd_Print_Char (char data), как показано ниже, Lcd_Print_Char (0b11100000); // двоичное значение альфы из таблицы данных
Полный код этого проекта приведен ниже в разделе Кодекса, а также проверить детали видео объяснения в конце этого урока.
Схемы подключения и тестирование:
Этот проект не имеет каких-либо дополнительных требований к оборудованию, мы просто использовали те же соединения из предыдущего руководства по подключению к ЖК-дисплею и использовали ту же плату, которую создали в учебном пособии по миганию светодиодов. Как всегда, давайте смоделируем программу, используя Proteus, чтобы проверить наш вывод.
После того, как симуляция будет запущена, как и ожидалось, давайте напрямую записываем код в нашу настройку оборудования. Результат программы должен быть примерно таким:
Вот как вы можете отображать любой пользовательский символ на ЖК-дисплее 16x2 с помощью микроконтроллера PIC с компилятором MPLABX и XC8. Также проверьте нашу полную серию обучения микроконтроллерам PIC здесь.