Дисплейните модули са най-важните изходни устройства във вградени проекти и електроника. 16x2 LCD е един от най-използваните дисплейни модули. 16x2 LCD означава, че има два реда, в които могат да бъдат показани 16 символа на ред и всеки знак заема 5X7 матрично пространство на LCD. В този урок ще свържем 16X2 LCD модул към микроконтролера 8051 (AT89S52). Взаимодействието на LCD с микроконтролер 8051 може да изглежда доста сложно за начинаещи, но след разбиране на концепцията ще изглежда много просто и лесно. Въпреки че може да отнеме време, защото трябва да разберете и свържете 16 извода на LCD към микроконтролера. Така че първо нека разберем 16-те пина на LCD модула.
Можем да го разделим на пет категории, захранващи щифтове, контрастни щифтове, контролни щифтове, щифтове за данни и щифтове с подсветка.
Категория |
ПИН НЕ. |
Име на ПИН |
Функция |
Захранващи щифтове |
1 |
VSS |
Заземяващ щифт, свързан с заземяване |
2 |
VDD или Vcc |
Напрежение Pin + 5V |
|
Контраст ПИН |
3 |
V0 или VEE |
Настройка на контраста, свързан към Vcc чрез променлив резистор. |
Контролни щифтове |
4 |
RS |
Регистрация Избор на ПИН, RS = 0 команден режим, RS = 1 Режим на данни |
5 |
RW |
ПИН за четене / запис, RW = 0 Режим на запис, RW = 1 Режим на четене |
|
6 |
Е. |
Активиране, импулс с висок до нисък импулс трябва да активира LCD |
|
Пинчета за данни |
7-14 |
D0-D7 |
Data Pins, Съхранява данните за показване на LCD или командните инструкции |
Щипки за подсветка |
15 |
LED + или A |
За захранване на Backlight + 5V |
16. |
LED- или K |
Земя за подсветка |
Всички щифтове са ясно разбираеми от името и функциите си, с изключение на контролните щифтове, така че те са обяснени по-долу:
RS: RS е щифтът за избор на регистър. Трябва да го зададем на 1, ако изпращаме някои данни за показване на LCD. И ще го зададем на 0, ако изпращаме някакви командни инструкции като изчистване на екрана (шестнадесетичен код 01).
RW: Това е ПИН за четене / запис, ще го зададем на 0, ако ще записваме някои данни на LCD. И го задайте на 1, ако четем от LCD модул. Като цяло това е настроено на 0, тъй като не е необходимо да четем данни от LCD. Само една инструкция „Получаване на LCD статус“, трябва да бъде прочетена няколко пъти.
E: Този щифт се използва за активиране на модула, когато му се подава силен до нисък импулс. Трябва да се даде импулс от 450 ns. Този преход от HIGH към LOW прави модула ENABLE.
В LCD има някои предварително зададени командни инструкции, ние ги използвахме в нашата програма по-долу, за да подготвим LCD (във функцията lcd_init ()). Някои важни командни инструкции са дадени по-долу:
Шестнадесетичен код |
Команда към регистър с инструкции на LCD |
0F |
LCD ВКЛ., Курсорът ВКЛ |
01 |
Ясен дисплей |
02 |
Върнете се у дома |
04 |
Намаляване на курсора (преместване на курсора наляво) |
06 |
Увеличаване на курсора (преместване на курсора надясно) |
05 |
Преместване на дисплея надясно |
07 |
Дисплей на смяна наляво |
0Е |
Дисплеят е ВКЛ., Курсорът мига |
80 |
Принуждавайте курсора до началото на първия ред |
С0 |
Принудително курсора до началото на втория ред |
38 |
2 реда и матрица 5 × 7 |
83 |
Курсор линия 1 позиция 3 |
3С |
Активирайте втория ред |
08 |
Дисплей OFF, курсорът OFF |
С1 |
Преминаване към втори ред, позиция 1 |
OC |
Дисплей ВКЛ., Курсорът ИЗКЛ |
С1 |
Преминаване към втори ред, позиция 1 |
С2 |
Преминаване към втори ред, позиция 2 |
Електрическа схема и обяснение
Схемата за свързване на LCD с микроконтролер 8051 е показана на горната фигура. Ако разбирате основно 8051, тогава трябва да знаете за EA (PIN 31), XTAL1 и XTAL2, RST щифт (PIN 9), Vcc и Ground Pin на 8051 микроконтролер. Използвал съм тези щифтове в горната схема. Ако нямате никаква представа за това, препоръчвам ви да прочетете тази статия LED взаимодействие с микроконтролер 8051, преди да преминете през LCD взаимодействие.
Така че освен тези горни щифтове, ние свързахме щифтовете за данни (D0-D7) на LCD към микроконтролера Port 2 (P2_0 - P2_7). И управлявайте щифтовете RS, RW и E към щифта 12,13,14 (щифт 2,3,4 от порт 3) на микроконтролера съответно.
ПИН 2 (VDD) и ПИН 15 (захранване с подсветка) на LCD са свързани към напрежение (5v), а ПИН 1 (VSS) и ПИН 16 (задно осветяване) са свързани към земята.
Pin 3 (V0) е свързан към напрежение (Vcc) чрез променлив резистор от 10k, за да регулира контраста на LCD. Средният крак на променливия резистор е свързан към PIN 3, а другите два крака са свързани към захранващото напрежение и земята.
Обяснение на кода
Опитах се да обясня кода чрез коментари (в самия код).
Както обясних по-рано за командния режим и режима на данни, можете да видите, че докато изпращаме команда (функция lcd_cmd), ние сме задали RS = 0, RW = 0 и импулс HIGH to LOW се дава на E, като го прави 1, след това 0 Също така при изпращане на данни (функция lcd_data) към LCD сме задали RS = 1, RW = 0 и се дава импулс HIGH to LOW на E, като го прави 1 до 0. Създадена е функция msdelay () за създаване на забавяне в милисекунди и се извиква често в програмата, той се извиква, за да може LCD модулът да има достатъчно време за изпълнение на вътрешната операция и команди.
Създаден е цикъл while за отпечатване на низа, който извиква функцията lcd_data всеки път, за да отпечата символ до последния символ (нулев терминатор- '\ 0').
Използвахме функцията lcd_init (), за да подготвим LCD дисплея, използвайки предварително зададените командни инструкции (обяснени по-горе).