Дисплеят е необходимата част от машината, независимо дали става въпрос за домакински уреди или индустриални машини. Дисплеят не само показва опциите за управление за управление на машината, но също така показва състоянието и изхода на задачата, изпълнена от тази машина. Има много видове дисплеи, използвани в електрониката като 7-сегментен дисплей, LCD дисплей, TFT сензорен дисплей, LED дисплей и др. 16x2 LCD дисплеят е най-основният и също се използва в някои малки електронни съоръжения, направихме много проекти, използващи 16x2 LCD, включително основната връзка с други микроконтролери:
- LCD взаимодействие с микроконтролер 8051
- Свързване на LCD с микроконтролер ATmega32
- LCD взаимодействие с PIC микроконтролер
- Интерфейс 16x2 LCD с Arduino
- 16x2 LCD взаимодействие с Raspberry Pi с помощта на Python
В този урок ще видим как да свържем 16x2 LCD с ARM7-LPC2148 микроконтролер и да покажем просто приветствено съобщение. Ако сте нов с ARM7, започнете с основите на ARM7 LPC2148 и научете как може да бъде програмиран с помощта на Keil uVision
Необходими материали
Хардуер
- ARM7-LPC2148 Микроконтролерна платка
- LCD (16X2)
- Потенциометър
- 5V регулатор на напрежение IC
- Макет
- Свързване на проводници
- 9V батерия
- Микро USB кабел
Софтуер
- Keil uVision 5
- Magic Flash Tool
Преди да влезем в проекта, трябва да знаем няколко неща за LCD режимите на работа и за шестнадесетичните кодове на LCD.
16X2 LCD дисплеен модул
LCD 16X2 казва, че има 16 колони и 2 реда. Този LCD има 16 извода. Под изображението и таблицата са показани имената на щифтове на LCD дисплея и неговите функции.
ИМЕ |
ФУНКЦИЯ |
VSS |
Заземен щифт |
VDD |
+ 5V входен щифт |
VEE |
Игла за регулиране на контраста |
RS |
Регистрация Изберете |
R / W |
Четене / писане на ПИН |
Е. |
Активиране на ПИН |
D0-D7 |
Пинчета за данни (8 пина) |
LED A |
Аноден щифт (+ 5V) |
LED K |
Катоден щифт (GND) |
LCD може да работи в два различни режима, а именно 4-битов режим и 8-битов режим. В 4-битов режим ние изпращаме данните с хапка, първо горната хапка и след това долната хапка. За тези от вас, които не знаят какво е хапане: хапането е група от четири бита, така че долните четири бита (D0-D3) на байт образуват долното хапване, докато горните четири бита (D4-D7) от байт образуват по-горното хапане. Това ни позволява да изпращаме 8 битови данни.
Докато в 8-битов режим можем да изпращаме 8-битовите данни директно с един ход, тъй като използваме всичките 8 линии за данни.
Тук в този проект ще използваме най-често използвания режим, който е 4-битов режим. В четирибитов режим можем да спестим 4 щифта микроконтролер и също така да намалим режийните разходи за окабеляване.
16x2 също използва HEX код, за да поеме всяка команда, има много шестнадесетични команди за LCD, като например да преместите курсора, да изберете режима, да преместите контрола на втори ред и т.н. За да научите повече за 16X2 LCD дисплейния модул и шестнадесетичните команди, следвайте връзката.
Електрическа схема и връзки
По-долу таблицата показва верижните връзки между LCD и ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (Избор на регистър) |
P0.6 |
E (Активиране) |
P0.12 |
D4 (ПИН за данни 4) |
P0.13 |
D5 (ПИН за данни 5) |
P0.14 |
D6 (ПИН за данни 6) |
P0.15 |
D7 (ПИН за данни 7) |
Връзки на регулатор на напрежение с LCD и ARM7 Stick
По-долу таблицата показва връзките между ARM7 и LCD с регулатор на напрежението.
IC регулатор на напрежението |
ПИН функция |
LCD & ARM-7 LPC2148 |
1. Ляв щифт |
+ Ve от батерия 9V вход |
NC |
2. Централен щифт |
- Ве от батерия |
VSS, R / W, K на LCD GND на ARM7 |
3. Десен щифт |
Регулиран + 5V изход |
VDD, A на LCD + 5V на ARM7 |
Потенциометър с LCD
Потенциометър се използва за промяна на контраста на LCD дисплея. Потът има три щифта, левият щифт (1) е свързан към + 5V и център (2) към VEE или V0 на LCD модула, а десният щифт (3) е свързан към GND. Можем да регулираме контраста, като завъртим копчето.
Настройки на джъмпера
В ARM7-Stick присъства джъмпер, за да можем да захранваме и качваме код чрез USB или чрез 5V DC вход само за захранване. Можете да видите снимките по-долу.
Отдолу изображението показва, че джъмперът е в положение DC. Това означава, че трябва да захранваме платката от външно 5V захранване.
И това изображение показва, че джъмперът е свързан в USB режим. Тук захранването и кодът се осигуряват чрез micro usb порт.
ЗАБЕЛЕЖКА: Тук в този урок сме качили код с помощта на USB чрез настройка на джъмпера на USB и след това сменихме джъмпера в режим DC, за да захранваме LPC2148 от 5v вход на регулатора. Можете да проверите това във видеото, дадено в края.
Последната схема за свързване на 16x2 LCD с ARM7 микроконтролер ще изглежда така:
Програмиране ARM7-LPC2148
За да програмираме ARM7-LPC2148, се нуждаем от инструмента keil uVision & Flash Magic. Използваме USB кабел за програмиране на ARM7 Stick чрез микро USB порт. Пишем код с помощта на Keil и създаваме шестнадесетичен файл и след това HEX файлът се мига на ARM7 стик с помощта на Flash Magic. За да научите повече за инсталирането на keil uVision и Flash Magic и как да ги използвате, следвайте връзката Първи стъпки с ARM7 LPC2148 Microcontroller и го програмирайте с Keil uVision.
Пълният код за свързване на LCD с ARM 7 е даден в края на този урок, тук обясняваме няколко части от него.
На първо място трябва да включим необходимите заглавни файлове
#include
Инициализирането на LCD модула е много важна стъпка. Тук използваме определени HEX кодове, които всъщност са команди, за да съобщим на LCD за режима на работа (4-битов), вида на LCD (16x2), началната линия и т.н.
void LCD_INITILIZE (void) // Функция за подготовка на LCD { IO0DIR = 0x0000FFF0; // Задава ПИН P0.4, P0.6, P0.12, P0.13, P0.14, P0.15 като OUTPUT delay_ms (20); LCD_SEND (0x02); // Инициализиране на lcd в 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; // АКТИВИРАНЕ НА НИСКО delay_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 трябва да е LOW и за изпълнение на разрешаване трябва да бъде HIGH, а в режим на данни RS трябва да бъде HIGH и за изпълнение на разрешаване трябва да бъде HIGH.
Сега за изпращане на низовите данни, които трябва да бъдат отпечатани на изхода, се използва същият принцип хапка по хапка. Важна стъпка тук е РЕГИСТРИРАНЕТО (RS) трябва да е ВИСОКО за режим на данни.
void LCD_DISPLAY (char * msg) // Функция за отпечатване на изпратените символи един по един { uint8_t i = 0; докато (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) ms закъснение (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // Изпраща долна хапка IO0SET = 0x00000050; // RS & EN HIGH IO0CLR = 0x00000020; забавяне ms (2); IO0CLR = 0x00000040; забавяне ms (5); i ++; }
Пълното видео за кодиране и демонстрация е дадено по-долу.