Відображення - це необхідна частина машини, будь то побутова техніка чи промислові машини. Дисплей не тільки відображає параметри керування машиною, але також відображає стан та результати виконання завдання, виконаного цією машиною. Є багато типів дисплеїв, що використовуються в електроніці, таких як 7-сегментний дисплей, РК-дисплей, TFT-дисплей із сенсорним екраном, світлодіодний дисплей тощо. РК-дисплей 16x2 є найбільш базовим, а також використовується в деяких невеликих електронних пристроях, ми зробили багато проекти, що використовують РК-дисплей 16x2, включаючи базову взаємодію з іншими мікроконтролерами:
- РК-інтерфейс з мікроконтролером 8051
- Зв'язок РК з мікроконтролером ATmega32
- РК-інтерфейс з мікроконтролером PIC
- Зв'язок 16x2 РК-дисплея з Arduino
- РК-інтерфейс 16x2 з Raspberry Pi за допомогою Python
У цьому підручнику ми побачимо, як підключити РК-дисплей 16x2 до мікроконтролера ARM7-LPC2148 та відобразити просте вітальне повідомлення. Якщо ви новачок в ARM7, тоді почніть з основ ARM7 LPC2148 і дізнайтеся, як його можна запрограмувати за допомогою Keil uVision
Необхідні матеріали
Апаратне забезпечення
- Плата мікроконтролера ARM7-LPC2148
- РК-дисплей (16X2)
- Потенціометр
- Схема регулятора напруги 5В
- Макет
- Підключення проводів
- 9 В акумулятор
- Кабель Micro USB
Програмне забезпечення
- Keil uVision 5
- Magic Flash Tool
Перш ніж брати участь у проекті, ми повинні знати декілька речей про режими роботи РК-дисплея та про шістнадцяткові коди РК-дисплея.
Модуль РК-дисплея 16X2
РК-дисплей 16X2 повідомляє, що він має 16 стовпців і 2 рядки. Цей РК-дисплей має 16 контактів. Нижче на малюнку та в таблиці наведені назви контактів РК-дисплея та його функції.
НАЗВА |
ФУНКЦІЯ |
VSS |
Штифт землі |
VDD |
+ 5 В вхідний штифт |
VEE |
Штифт для регулювання контрастності |
RS |
Зареєструватися Виберіть |
R / W |
Читання / запис Pin |
Е |
Увімкнути PIN-код |
D0-D7 |
Шпильки даних (8 штифтів) |
Світлодіод A |
Анодний контакт (+ 5 В) |
Світлодіод K |
Катодний штифт (GND) |
РК-дисплей може працювати в двох різних режимах, а саме в 4-бітному режимі та 8-бітному режимі. У 4-бітовому режимі ми надсилаємо дані погризти, спочатку верхній, а потім нижній. Для тих з вас, хто не знає, що таке перегриз: перегриз - це група з чотирьох бітів, тому нижні чотири біти (D0-D3) байта утворюють нижній гризун, тоді як верхні чотири біти (D4-D7) байта утворюють вищий гризун. Це дозволяє нам надсилати 8-бітові дані.
Тоді як у 8-бітному режимі ми можемо надсилати 8-бітові дані безпосередньо одним ходом, оскільки ми використовуємо всі 8 рядків даних.
У цьому проекті ми будемо використовувати найбільш часто використовуваний режим - це 4-бітний режим. У чотирирозрядному режимі ми можемо заощадити 4 висновки мікроконтролера, а також зменшити накладні витрати на проводку.
16x2 також використовує шістнадцятковий код для прийняття будь-якої команди, для РК-дисплея існує безліч шестигранних команд, таких як переміщення курсору, вибір режиму, переведення елемента керування на другий рядок тощо..
Схема та з'єднання
Нижче в таблиці показано схеми з'єднань між РК-дисплеєм та ARM7-LPC2148.
ARM7-LPC2148 |
РК-дисплей (16x2) |
Р0.4 |
RS (Вибір реєстру) |
P0.6 |
E (Увімкнути) |
Р0.12 |
D4 (контакт 4) |
P0.13 |
D5 (штифт даних 5) |
Р0.14 |
D6 (штифт даних 6) |
Р0.15 |
D7 (штифт даних 7) |
З'єднання регулятора напруги з LCD та ARM7 Stick
Нижче в таблиці наведені зв’язки між ARM7 та LCD з регулятором напруги.
Схема регулятора напруги |
Функція штифта |
LCD & ARM-7 LPC2148 |
1. лівий штифт |
+ Ве від входу акумулятора 9 В |
NC |
2. центральний штифт |
- Ві від батареї |
VSS, R / W, K РК-дисплея GND ARM7 |
3. правий штифт |
Регульований вихід на 5 В |
VDD, A РК-дисплея + 5 В ARM7 |
Потенціометр з РК-дисплеєм
Потенціометр використовується для зміни контрастності РК-дисплея. Горщик має три штирі, лівий штифт (1) підключений до + 5 В, а центр (2) до VEE або V0 РК-модуля, а правий штифт (3) підключений до GND. Ми можемо регулювати контрастність, повертаючи ручку.
Налаштування перемички
У ARM7-Stick присутній перемичка, щоб ми могли живити та завантажувати код за допомогою USB або за допомогою входу постійного струму 5 В лише для живлення. Ви можете побачити наведені нижче зображення.
Знизу на зображенні видно, що перемичка знаходиться в положенні постійного струму. Це означає, що ми повинні живити плату від зовнішнього джерела живлення 5В.
І це зображення показує, що перемичка підключена в режимі USB. Тут живлення та код подаються через порт micro usb.
ПРИМІТКА: Тут у цьому підручнику ми завантажили код за допомогою USB, встановивши перемичку на USB, а потім змінили перемичку на режим постійного струму для живлення LPC2148 від входу 5В регулятора. Ви можете перевірити це у відео, поданому в кінці.
Остаточна схема взаємодії 16x2 РК-дисплея з мікроконтролером ARM7 буде виглядати так:
Програмування ARM7-LPC2148
Для програмування ARM7-LPC2148 нам потрібен інструмент keil uVision & Flash Magic. Ми використовуємо USB-кабель для програмування ARM7 Stick через порт Micro USB. Ми пишемо код за допомогою Keil і створюємо шістнадцятковий файл, а потім шістнадцятковий файл перепрошивається на ARM7 за допомогою Flash Magic. Щоб дізнатись більше про встановлення keil uVision та Flash Magic та їх використання, перейдіть за посиланням Початок роботи з мікроконтролером ARM7 LPC2148 та запрограмуйте його за допомогою Keil uVision.
Повний код взаємодії РК з ARM 7 наведено в кінці цього посібника, тут ми пояснюємо кілька його частин.
Перш за все нам потрібно включити необхідні файли заголовків
#включати
Ініціалізація РК-модуля - це дуже важливий крок. Тут ми використовуємо певні шістнадцяткові коди, які насправді є командами, щоб повідомити РК-дисплей про режим роботи (4-бітний), тип РК-дисплея (16x2), лінію старту тощо
void LCD_INITILIZE (void) // Функція підготовки РК-дисплея { IO0DIR = 0x0000FFF0; // Встановлює штифт P0.4, P0.6, P0.12, P0.13, P0.14, P0.15 як ВИХІД затримки_ms (20); LCD_SEND (0x02); // Ініціалізація рідкокристалічного дисплея в 4-розрядному режимі роботи LCD_SEND (0x28); // 2 рядки (16X2) LCD_SEND (0x0C); // Відображення на курсорі вимкнено LCD_SEND (0x06); // Курс автоматичного збільшення LCD_SEND (0x01); // Відобразити чіткий LCD_SEND (0x80); // Перший рядок перша позиція }
У 4-бітному режимі ми маємо різний тип функції запису для контактів, тобто за допомогою верхнього та нижнього ключів. Подивимось, як це робиться
void LCD_SEND (команда char) // Функція надсилання шістнадцяткових команд гризти гризти { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((command & 0xF0) << 8)); // Надіслати верхній грибок команди IO0SET = 0x00000040; // Увімкнення HIGH IO0CLR = 0x00000030; // Виробництво RS & RW LOW delay_ms (5); IO0CLR = 0x00000040; // Увімкнення LOW delay_ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((команда & 0x0F) << 12)); // Надіслати нижній гриз команди IO0SET = 0x00000040; // УВІМКНУТИ HIGH IO0CLR = 0x00000030; // RS & RW LOW delay_ms (5); IO0CLR = 0x00000040; // УВІМКНУТИ НИЗЬКУ затримку_ms (5); }
Логіка надсилання гризунів
IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((команда & 0x0F) << 12)); // Надіслати нижній перебір команди IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((команда & 0xF0) << 8)); // Надіслати верхній гриб команди
Вище два твердження відіграють важливу роль у цій програмі. Перша команда надсилає нижній гризець, а друга - верхній. Це не впливає на інші шпильки, які ми робимо. Давайте подивимось, як це відбувається до того, як спочатку дізнатись про цю логіку
ORING- (A-0 = A), (A-1 = 1) ANDing- (A & 0 = 0), (A & 1 = A)
Отже, ми використовуємо концепцію маскування та логічну операцію зсуву, не впливаючи на інші висновки. Означає, що використовуються лише шпильки (P0.12-P0.15), і жодні інші штифти, такі як P0.4, P0.6, не зачіпаються. Це буде зроблено шляхом зсуву даних у чотири біти та створення верхнього гризуна на місці нижнього клювання та маскування верхнього клювання. А потім ми робимо нижчі біти нульовими (0XF0) і ORed з даними про клювання, щоб отримати верхні дані для клювання на виході.
Подібний процес застосовується для даних нижчого клювання, але тут нам не потрібно переміщувати дані.
Під час запису даних на вихід, тобто в командному режимі RS повинен бути НИЗЬКИМ, а для виконання дозволу - ВИСОКИМ, а в режимі даних RS - ВИСОКИМ, а для виконання дозволу - ВИСОКИМ.
Тепер для надсилання рядкових даних, які повинні бути надруковані на виході, використовується той же принцип, що гризе за клюванням. Важливим кроком тут є ВИБІР РЕЄСТРАЦІЇ (RS) повинен бути ВИСОКИМ для режиму даних.
void LCD_DISPLAY (char * msg) // Функція друку символів, надісланих по одному { uint8_t i = 0; while (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // Надсилає верхній гриз IO0SET = 0x00000050; // RS HIGH & ENABLE HIGH для друку даних IO0CLR = 0x00000020; // Затримка режиму запису RW LOW ms (2); IO0CLR = 0x00000040; // EN = 0, RS та RW без змін (тобто RS = 1, RW = 0) затримка мс (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // Надсилає нижній гриз IO0SET = 0x00000050; // RS & EN HIGH IO0CLR = 0x00000020; затримка мс (2); IO0CLR = 0x00000040; затримка мс (5); i ++; }
Повне відео про кодування та демонстрацію наведено нижче.