Это наш шестой учебник в нашей серии учебных пособий по PIC, в котором мы изучаем взаимодействие ЖК-дисплея 16x2 с микроконтроллером PIC. В наших предыдущих уроках мы изучили основы PIC с помощью некоторых программ мигания светодиодов, а также узнали, как использовать таймеры в микроконтроллере PIC. Вы можете проверить здесь все руководства по изучению микроконтроллеров PIC с использованием компилятора MPLABX и XC8.
Этот урок будет интересным, потому что мы узнаем, как соединить ЖК-дисплей 16 × 2 с PIC16F877A, посмотрите подробное видео в конце этого урока. Ушли в прошлое, когда мы использовали светодиоды для индикации пользователя. Давайте посмотрим, как мы можем сделать наши проекты более крутыми и полезными с помощью ЖК-дисплеев. Также ознакомьтесь с нашими предыдущими статьями о взаимодействии ЖК-дисплея с 8051, с Arduino, с Raspberry Pi, с AVR.
Функции сопряжения ЖК-дисплея с микроконтроллером PIC:
Чтобы упростить задачу, мы сделали небольшую библиотеку, которая может упростить использование этого ЖК-дисплея с нашим PIC16F877A. Заголовочный файл «MyLCD.h» предоставляется здесь для загрузки, который содержит все необходимые функции для управления ЖК-дисплеем с помощью PIC MCU. Код библиотеки хорошо объясняется строками комментариев, но если у вас все еще есть сомнения, свяжитесь с нами через раздел комментариев. Также ознакомьтесь с этой статьей, чтобы узнать о работе основного ЖК-дисплея и его распиновке.
Примечание: всегда рекомендуется знать, что на самом деле происходит внутри вашего файла заголовка, потому что это поможет вам при отладке или при изменении MCU.
Теперь есть два способа добавить этот код в вашу программу. Вы можете скопировать все приведенные выше строки кода в MyLCD.h и вставить их перед void main (). Или вы можете скачать заголовочный файл по ссылке и добавить их в заголовочный файл вашего проекта ( #include "MyLCD.h "; ). Это можно сделать, щелкнув правой кнопкой мыши файл заголовка, выбрав « Добавить существующий элемент» и просмотрев этот файл заголовка.
Здесь я скопировал и вставил код файла заголовка в свой основной файл C. Поэтому, если вы используете наш код, вам не нужно загружать и добавлять файл заголовка в свою программу, просто используйте полный код, приведенный в конце этого руководства. Также обратите внимание, что эта библиотека поддерживает только микроконтроллер PIC серии PIC16F.
Здесь я объясняю каждую функцию внутри нашего заголовочного файла ниже:
void Lcd_Start (): эта функция должна быть первой функцией, которую нужно вызвать, чтобы начать работу с нашим ЖК-дисплеем. Мы должны вызывать эту функцию только один раз, чтобы избежать задержек в программе.
пусто Lcd_Start () {Lcd_SetBit (0x00); для (int i = 1065244; i <= 0; i--) NOP (); Lcd_Cmd (0x03); __delay_ms (5); Lcd_Cmd (0x03); __delay_ms (11); Lcd_Cmd (0x03); Lcd_Cmd (0x02); // 02H используется для возврата домой -> Очищает ОЗУ и инициализирует ЖК-дисплей Lcd_Cmd (0x02); // 02H используется для возврата домой -> Очищает ОЗУ и инициализирует ЖК-дисплей Lcd_Cmd (0x08); // Выбрать строку 1 Lcd_Cmd (0x00); // Очистить строку 1 дисплея Lcd_Cmd (0x0C); // Выбрать строку 2 Lcd_Cmd (0x00); // Очистить строку 2 дисплея Lcd_Cmd (0x06); }
Lcd_Clear (): эта функция очищает ЖК-экран и может использоваться внутри циклов для очистки отображения предыдущих данных.
Lcd_Clear () {Lcd_Cmd (0); // Очистить ЖК-дисплей Lcd_Cmd (1); // Перемещаем курсор в первую позицию}
void Lcd_Set_Cursor (x pos, y pos): после запуска наш ЖК-дисплей готов принимать команды, мы можем дать ему указание установить курсор в предпочтительном для вас месте с помощью этой функции. Допустим, если нам нужен курсор на 5-м символе 1-й строки. Тогда функция будет недействительной Lcd_Set_Cursor (1, 5)
void Lcd_Set_Cursor (char a, char b) {char temp, z, y; если (а == 1) {темп = 0x80 + б - 1; // 80H используется для перемещения курсора z = temp >> 4; // Младшие 8 бит y = temp & 0x0F; // Старшие 8 бит Lcd_Cmd (z); // Установить строку Lcd_Cmd (y); // Установить столбец} else if (a == 2) {temp = 0xC0 + b - 1; z = темп >> 4; // Младшие 8 бит y = temp & 0x0F; // Старшие 8 бит Lcd_Cmd (z); // Установить строку Lcd_Cmd (y); // Установить столбец}}
void Lcd_Print_Char (char data): как только курсор установлен, мы можем записать символ в его позицию, просто вызвав эту функцию.
void Lcd_Print_Char (char data) // Отправляем 8 бит в 4-битном режиме {char Lower_Nibble, Upper_Nibble; Lower_Nibble = данные & 0x0F; Upper_Nibble = данные & 0xF0; RS = 1; // => RS = 1 Lcd_SetBit (Upper_Nibble >> 4); // Отправляем верхнюю половину путем сдвига на 4 EN = 1; для (int i = 2130483; i <= 0; i--) NOP (); EN = 0; Lcd_SetBit (Нижняя_либбл); // Отправить нижнюю половину EN = 1; для (int i = 2130483; i <= 0; i--) NOP (); EN = 0; }
void Lcd_Print_String (char * a): если должна отображаться группа символов, то можно использовать строковую функцию.
void Lcd_Print_String (char * a) {int я; для (i = 0; a! = '\ 0'; i ++) Lcd_Print_Char (a); // Разбиваем строку с помощью указателей и вызываем функцию Char}
Каждый раз, когда вызывается Lcd_Print_Char (данные символа) , соответствующие им символьные значения отправляются в строки данных ЖК-дисплея. Эти символы достигают HD44780U в виде битов. Теперь эта ИС связывает биты с символом, который будет отображаться, используя свою память ПЗУ, как показано в таблице ниже. Вы можете найти биты для всех символов в техническом описании ЖК-контроллера HD44780U.
Теперь, когда мы удовлетворены нашим заголовочным файлом, давайте построим схему и протестируем программу. Также проверьте полный заголовочный файл, указанный по ссылке выше.
Принципиальная схема и тестирование:
Ниже представлена принципиальная схема для взаимодействия ЖК-дисплея 16x2 с микроконтроллером PIC.
Я не показывал источник питания или соединение ICSP в приведенной выше схеме, так как мы используем ту же плату, что и в предыдущем руководстве, проверьте здесь.
Одна важная вещь, которую следует отметить в программе, - это определения контактов ЖК-дисплея:
#define RS RD2 #define EN RD3 #define D4 RD4 #define D5 RD5 #define D6 RD6 #define D7 RD7
Эти определения контактов могут быть изменены в соответствии с настройками оборудования программиста. Не забудьте изменить конфигурацию уважаемого порта в основной функции, если вы измените здесь.
Оборудование для этого проекта очень простое. Мы собираемся повторно использовать тот же модуль PIC, который мы использовали в прошлый раз, и подключить ЖК-модуль к нашему PIC с помощью перемычек.
Подключение можно понять по следующей таблице:
ЖК-контакт No. |
Имя вывода ЖК-дисплея |
Имя вывода MCU |
№ контакта MCU. |
1 |
Земля |
Земля |
12 |
2 |
VCC |
+ 5В |
11 |
3 |
VEE |
Земля |
12 |
4 |
Зарегистрироваться Выбрать |
RD2 |
21 год |
5 |
Читай пиши |
Земля |
12 |
6 |
включить |
RD3 |
22 |
7 |
Бит данных 0 |
NC |
- |
8 |
Бит данных 1 |
NC |
- |
9 |
Бит данных 2 |
NC |
- |
10 |
Бит данных 3 |
NC |
- |
11 |
Бит данных 4 |
RD4 |
27 |
12 |
Бит данных 5 |
RD5 |
28 |
13 |
Бит данных 6 |
RD6 |
29 |
14 |
Бит данных 7 |
RD7 |
30 |
15 |
Светодиод Положительный |
+ 5В |
11 |
16 |
Светодиод отрицательный |
Земля |
12 |
Теперь давайте просто установим соединения, сбросим код в наш MCU и проверим вывод.
Если у вас возникнут проблемы или сомнения, воспользуйтесь разделом комментариев. Также посмотрите демонстрационное видео, приведенное ниже.