Це наш шостий підручник з нашої серії навчальних посібників з 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; якщо (a == 1) {temp = 0x80 + b - 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 = temp >> 4; // Нижче 8-бітове y = temp & 0x0F; // Верхній 8-бітний Lcd_Cmd (z); // Встановити рядок Lcd_Cmd (y); // Встановити стовпець}}
void Lcd_Print_Char (дані символів): Після встановлення курсору ми можемо записати символ на його місце, простим викликом цієї функції.
void Lcd_Print_Char (char char) // Надіслати 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 (Lower_Nibble); // Надіслати нижню половину 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; для (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 за допомогою перемичок.
Зв'язок можна зрозуміти за такою таблицею:
ЖК-номер |
Назва PIN-коду РК-дисплея |
Назва PIN-коду 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 і перевіримо вихідні дані.
Якщо у вас виникли проблеми або сумніви, будь ласка, скористайтеся розділом коментарів. Також перевірте демонстраційне відео, подане нижче.