В този урок ще свържем 4х4 (16 клавиша) клавиатура с микроконтролер ATMEGA32A. Знаем, че клавиатурата е едно от най-важните входни устройства, използвани в проекти за електроника. Клавиатурата е един от най-лесните начини за предаване на команди или инструкции на електронна система.
Необходими компоненти
Хардуер: ATMEGA32, захранване (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16 * 2LCD), кондензатор 100uF, кондензатор 100nF, резистор 10KΩ (8 броя).
Софтуер: Atmel studio 6.1 или Atmel studio 6.2, progisp или flash magic.
Електрическа схема и работно обяснение
Във веригата PORTB на ATMEGA32 е свързан към порта за данни LCD. Тук не трябва да забравяте да деактивирате комуникацията JTAG в PORTC от ATMEGA, като промените байтовете на предпазителите, ако искате да използвате PORTC като нормален комуникационен порт. В 16x2 LCD има 16 щифта, ако има задно осветление, ако няма задно осветление, ще има 14 извода. Човек може да захранва или да оставя щифтове за задно осветяване. Сега в 14-те извода има 8 извода за данни (7-14 или D0-D7), 2 извода за захранване (1 & 2 или VSS & VDD или gnd & + 5v), 3 -ти извод за контрол на контраста (VEE - контролира колко дебели трябва да бъдат символите показани) и 3 контролни щифта (RS & RW & E).
Във веригата можете да забележите, че съм взел само два контролни щифта, това дава гъвкавост, контрастният бит и READ / WRITE не се използват често, така че могат да бъдат късо заземени. Това поставя LCD в най-висок контраст и режим на четене. Просто трябва да контролираме ENABLE и RS щифтовете, за да изпращаме символи и данни по съответния начин.
Връзките, които се правят за LCD са дадени по-долу:
PIN1 или VSS към земята
PIN2 или VDD или VCC до + 5v мощност
PIN3 или VEE към земята (дава максимален контраст най-добър за начинаещи)
PIN4 или RS (Регистрация за избор) към PD6 на uC
PIN5 или RW (четене / запис) към земята (поставя LCD в режим на четене, улеснява комуникацията за потребителя)
PIN6 или E (Активиране) до PD5 на uC
PIN7 или D0 до PB0 на uC
PIN8 или D1 до PB1 на uC
PIN9 или D2 до PB2 на uC
PIN10 или D3 до PB3 на uC
PIN11 или D4 до PB4 на uC
PIN12 или D5 до PB5 на uC
PIN13 или D6 до PB6 на uC
PIN14 или D7 до PB7 на uC
Във веригата можете да видите, че сме използвали 8-битова комуникация (D0-D7), но това не е задължително, можем да използваме 4-битова комуникация (D4-D7), но с 4-битова програма за комуникация става малко сложна. Така че само от наблюдение на горната таблица ние свързваме 10 щифта LCD към контролер, в който 8 щифта са щифтове за данни и 2 щифта за управление.
Сега нека поговорим за клавиатурата, клавиатурата не е нищо друго освен мултиплексирани клавиши. Бутоните са свързани в мултиплексирана форма за намаляване на използването на щифтове на системата за управление.
Помислете, че имаме клавиатура 4х4, в тази клавиатура имаме 16 бутона, в нормалните случаи се нуждаем от 16 щифта на контролера, за да свържем 16 бутона, но това не е добре от гледна точка на системата за управление. Това използване на щифтове може да бъде намалено чрез свързване на бутоните в мултиплекс форма.
Например помислете, че имаме 16 бутона и искаме да го прикрепим към контролер, за да оформим клавиатура, тези клавиши са подредени, както е показано на фигурата:
Тези бутони са свързани с общи колони, както е показано на фигурата:
Както е показано на фигурата, немаркираните краища на всеки четири бутона се плъзгат, за да се образува колона, и така за 16 клавиша имаме четири колони.
Ако забравим връзките на колоните по-горе и свързаните общи маркирани краища на всеки четири бутона заедно, за да образуваме ред:
Както е показано на фигурата, за 16 клавиша ще имаме четири реда, както е показано на фигурата.
Сега, когато и двамата се виждат заедно, получаваме нещо като веригата по-долу:
Тук сме свързали 16 клавиша в мултиплексирана форма, за да намалим използването на пина на контролера. В сравнение с първия случай на свързани 16 ключа, имахме нужда от 16 пина на контролера, но сега след мултиплексиране се нуждаем само от 8 пина на контролер, за да свържем 16 ключа.
Обикновено това е представено в клавиатурата:
Както е показано на горната фигура, в горната клавиатура има 16 клавиша и всеки от тези клавиши представлява бутон в конфигурацията на мултиплексирания бутон. Освен това има 8 пинови връзки, както е показано на горната фигура, символизираща мултиплексирана връзка.
Сега за работа:
Клавиатурата тук има четири колони и четири реда, за идентифициране на натиснат бутон ще използваме метод за кръстосано позоваване. Тук първо ще свържем всички колони или всички редове към vcc, така че ако редовете са свързани към общ vcc, ще вземем колоните като входове към контролера.
Сега, ако се натисне бутон един, както е показано на фигурата:
След това през веригата протича ток, както е показано на фигурата по-долу:
Така че имаме C1 висок, за натискане на бутон. В този момент ще преместим портовете за захранване и вход, т.е. ще захранваме колоните и ще вземем редове като входове, По този начин ще има поток на мощност, както е показано на фигурата по-долу:
Така че за реда имаме R1 висок.
Към момента имаме C1 висок в първия случай и R1 висок във втория случай, така че имаме матрична позиция на бутона, следователно числото "едно".
Ако се натисне вторият бутон, ще имаме C1 като колона, но високата логика, която получаваме в общата колона, ще бъде 'R2'. Така че ще имаме C1 и R2, следователно ще имаме матрична позиция на втория бутон.
Ето как ще напишем програмата, ще свържем осем извода на клавиатурата към осем извода на контролера. И за начало захранваме четири щифта контролер за захранване на четири реда клавиатура, като по това време останалите четири щифта се вземат като входове. Когато бутонът бъде натиснат, съответният извод на колоната е издърпан нагоре и така щифтът на контролера се изтегли нагоре, това ще бъде разпознато, за да се промени входа на мощност и мощността на входа, така че ще имаме редове като входове.
По този начин получаваме бутона, натиснат от потребителя. Адресите на тази матрица са насочени към съответния номер и този номер е показан на LCD.
Работата на взаимодействието на клавиатурата с avr микроконтролер е обяснена стъпка по стъпка в C кода, даден по-долу. Можете също да проверите: взаимодействие на клавиатурата с микроконтролер 8051.