Дисплеят е необходимата част от всяка машина, независимо дали става въпрос за домакински уреди или индустриални машини. Дисплеят не само показва опциите за управление за управление на машината, но също така показва състоянието и изхода на задачата, изпълнена от тази машина. Има много видове дисплеи, използвани в електрониката като 7-сегментен дисплей, 16x2 LCD дисплей, TFT сензорен дисплей, OLED дисплей и др.
LCD дисплеят 16x2 е най-основният дисплеен модул и се използва и в някои малки електронни съоръжения като калкулатор, цифров измервателен уред и др. Извършихме много проекти, използвайки 16x2 LCD, включително основната връзка с други микроконтролери:
- LCD взаимодействие с микроконтролер 8051
- Свързване на LCD с микроконтролер ATmega32
- LCD взаимодействие с PIC микроконтролер
- Интерфейс 16x2 LCD с Arduino
- 16x2 LCD взаимодействие с Raspberry Pi с помощта на Python
В този урок ще видим как да свържем 16x2 LCD с микроконтролер Atmega16 AVR и да покажем просто приветствено съобщение.
Необходими компоненти
- Atmega16
- 16x2 LCD модул
- Джъмпери
- Макет
Електрическа схема
Програмиране на Atmega16 за 16x2 LCD дисплей
Програмирането не изисква външни библиотеки. Тук Atmega16 е програмиран с помощта на USBASP и Atmel Studio7.0. Пълна програма и работно видео е дадено в края на проекта, просто качете програмата в Atmega16 и завъртете 10k POT, за да регулирате яркостта на LCD.Първоначално определете честотата на процесора и включете необходимите библиотеки, които се доставят с пакета Atmel Studio, като например за достъп до IO пинове и
Определете RS и EN щифт на LCD в програмата. RS Pins се използва за избор на регистър на данни и команди. Активиращият щифт фиксира данните.
#define bg PA3 #define rs PA2
Също така дефинирайте кой ПОРТ на Atmega16 ще се използва за интерфейс на LCD. Тук се използва PORTA.
#define lcdDirection DDRA #define lcdPort PORTA
Следващата стъпка е да се изгради функция, която да приеме команда чрез предаване на параметър. Има много LCD HEX команди. Командите Hex се използват за определяне на функцията на LCD. Тъй като използваме 4-битовия режим на LCD, байтът (8-битов) ще бъде изпратен в два пакета. Единият пакет ще бъде Upper Nibble (4-bit), а другият пакет ще бъде Lower Nibble (4-bit).
void lcdCommand (неподписани команди char) { lcdPort = (lcdPort & 0x0F) - (команди & 0xF0); lcdPort & = ~ (1 <
Следващата стъпка би била приемането на символите и фиксирането му към порта на LCD. След това получените символи се изпращат на LCD хапане чрез хапка. Функцията взема символа, използвайки параметър 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 в HEX и след това просто да настроите курсора на начална позиция.
void lcdClear () { lcdCommand (0x01); _delay_ms (2); lcdCommand (0x80); }
Сега в основната функция LCD се инициализира. Първоначално задайте посоката на PORT за LCD на интерфейс. Тук ПОРТЪТ е зададен като ИЗХОД, така е зададен FF.
lcdDirection = 0xFF; _delay_ms (20)
След това задайте LCD в 4-битов режим, като изпратите 02 в шестнадесетичен. Изпратете също 28 в шестнадесетичен, за да го настроите в 2 реда, 15x7 матрични пиксела в 4-битов режим.
lcdCommand (0x02); lcdCommand (0x28);
В 0В командване и 06 се използва за контрол на позицията на курсора. И накрая просто изчистете екрана, като изпратите 01 в шестнадесетичен. Това ще завърши инициализирането на LCD.
lcdCommand (0x0c); lcdCommand (0x06); lcdCommand (0x01);
След като инициализацията приключи, просто тествайте LCD дисплея, като изпратите низ. Тук изпращаме String " Interfacing LCD " в 1- ви ред.
lcdString ("Интерфейсен LCD");
След това преместете курсора на следващия ред, като изпратите командата c0 в шестнадесетичен. И накрая на тази позиция напишете низа "With Atmega1 6".
lcdCommand (0xC0); lcdString ("С Atmega16");
Това завършва пълния урок за свързване на 16x2 LCD с Atmega16. Имайте предвид, че ако не получите никакво изображение или пиксели, тогава или проверете окабеляването си според кода и електрическата схема или променете стойността на POT, прикрепен към V0 щифт на LCD. Ако имате някакво съмнение или предложение, можете да се свържете с нас, като пишете на нашия форум или коментирате по-долу.