Вітрина є необхідною частиною будь-якої машини, будь то побутова техніка або промислова техніка. На дисплеї не тільки відображаються параметри керування машиною, але також відображається стан та результати завдання, яке виконується цією машиною. У електроніці використовується багато типів дисплеїв, таких як 7-сегментний дисплей, РК-дисплей 16x2, сенсорний TFT-дисплей, OLED-дисплей тощо.
РК-дисплей 16x2 - це найпростіший модуль відображення, який також використовується в деяких невеликих електронних пристроях, таких як калькулятор, цифровий лічильник тощо. Ми виконали багато проектів з використанням РК-дисплея 16x2, включаючи базову взаємодію з іншими мікроконтролерами:
- РК-інтерфейс з мікроконтролером 8051
- Зв'язок РК з мікроконтролером ATmega32
- РК-інтерфейс з мікроконтролером PIC
- Зв'язок 16x2 РК-дисплея з Arduino
- РК-інтерфейс 16x2 з Raspberry Pi за допомогою Python
У цьому підручнику ми побачимо, як підключити РК-дисплей 16x2 до мікроконтролера Atmega16 AVR та відобразити просте вітальне повідомлення.
Потрібні компоненти
- Atmega16
- РК-модуль 16x2
- Перемички
- Макет
Кругова діаграма
Програмування Atmega16 для РК-дисплея 16x2
Для програмування не потрібні зовнішні бібліотеки. Тут Atmega16 програмується за допомогою USBASP та Atmel Studio7.0. Повна програма та робоче відео наведено в кінці проекту, просто завантажте програму в Atmega16 і поверніть 10k POT, щоб відрегулювати яскравість РК-дисплея.Спочатку визначте частоту процесора та включіть необхідні бібліотеки, що постачаються з пакетом Atmel Studio, такі як для доступу до виводів вводу-виводу та
Визначте RS та EN штифт РК у програмі. RS Pins використовується для вибору реєстру даних та команд. Штифт увімкнення фіксує дані.
#define en PA3 #define rs PA2
Також визначте, який ПОРТ Atmega16 буде використовуватися для інтерфейсу РК. Тут використовується PORTA.
#define lcdDirection DDRA #define lcdPort PORTA
Наступним кроком є побудова функції, яка прийме команду, передаючи параметр. Існує безліч РК-команд HEX. Команди Hex використовуються для визначення функції РК. Оскільки ми використовуємо 4-бітний режим РК-дисплея, байт (8-бітний) буде надісланий у двох пакетах. Одним пакетом буде Upper Nibble (4-біт), а іншим пакетом буде Lower Nibble (4-біт).
void lcdCommand (непідписані символи char) { lcdPort = (lcdPort & 0x0F) - (команди & 0xF0); lcdPort & = ~ (1 <
Наступним кроком буде прийняття символів та фіксація його до порту РК. Потім отримані символи надсилаються на рідкокристалічний гризун. Функція приймає символ, використовуючи параметр pass by, а потім бере верхній і нижній гриз. Штифт 'rs' встановлюється високим для реєстру даних, а потім надсилається імпульс, що зростає, для фіксації даних. Подібним чином нижній гризун надсилається, змінюючи значення включення і посилаючи зростаючий імпульс для включення.
void lcdChar (рядок без знака) { lcdPort = (lcdPort & 0x0F) - (рядок & 0xF0); lcdPort - = (1 <
Ця функція просто перетворює символ у рядок і може бути використана в програмі пізніше там, де потрібно написати рядок.
void lcdString (char * str) { int j; для (j = 0; str! = 0; j ++) { lcdChar (str); } }
Тепер написана функція просто для очищення екрана. Вам просто потрібно надіслати команду 01 у шістнадцятковій системі, а потім просто встановити курсор у початкове положення.
void lcdClear () { lcdCommand (0x01); _delay_ms (2); lcdCommand (0x80); }
Тепер у головній функції РК-дисплей ініціалізується. Спочатку встановіть напрямок PORT для інтерфейсу РК. Тут ПОРТ встановлюється як ВИХІД, тому встановлюється FF.
lcdDirection = 0xFF; _delay_ms (20)
Потім встановіть РК-дисплей у 4-розрядний режим, надіславши 02 у шістнадцятковій формі. Також надішліть 28 у шістнадцятковому форматі, щоб встановити його в 2 рядки, матриця пікселів 15x7 у 4-бітному режимі.
lcdCommand (0x02); lcdCommand (0x28);
Команди 0c та 06 використовуються для управління позицією курсора. І нарешті просто очистіть екран, надіславши 01 у шістнадцятковій формі. На цьому ініціалізація РК буде завершена.
lcdCommand (0x0c); lcdCommand (0x06); lcdCommand (0x01);
Після завершення ініціалізації просто протестуйте РК-дисплей, надіславши рядок. Тут ми надсилаємо рядок " Interfacing LCD " в 1- му ряду.
lcdString ("Зв'язок РК");
Потім перемістіть курсор до наступного рядка, надіславши команду c0 у шістнадцятковій формі. І нарешті, на цій позиції напишіть рядок "With Atmega1 6".
lcdCommand (0xC0); lcdString ("З Atmega16");
На цьому закінчено повний посібник з взаємодії РК-дисплею 16x2 з Atmega16. Зверніть увагу, що якщо ви не отримали жодного зображення чи пікселів, то або перевірте проводку відповідно до коду та електричної схеми, або змініть значення POT, прикріпленого до виводу V0 РК-дисплея. Якщо у вас є які-небудь сумніви чи пропозиції, ви можете зв’язатися з нами, написавши на наш форум або давши коментар нижче.