Дисплеи являются наиболее важными устройствами вывода во встроенных проектах и электронных продуктах. ЖК-дисплей 16x2 - один из наиболее часто используемых дисплеев. ЖК-дисплей 16x2 означает, что есть две строки, в каждой из которых может отображаться 16 символов, и каждый символ занимает матричное пространство 5X7 на ЖК-дисплее. В этом уроке мы собираемся подключить ЖК-модуль 16X2 к микроконтроллеру 8051 (AT89S52). Взаимодействие ЖК-дисплея с микроконтроллером 8051 может показаться довольно сложным для новичков, но после понимания концепции это будет выглядеть очень просто и легко. Хотя это может занять время, потому что вам нужно понять и подключить к микроконтроллеру 16 контактов ЖК-дисплея. Итак, сначала давайте разберемся с 16 контактами ЖК-модуля.
Мы можем разделить его на пять категорий: выводы питания, выводы контраста, выводы управления, выводы данных и выводы подсветки.
Категория |
№ контакта. |
Имя контакта |
Функция |
Контакты питания |
1 |
VSS |
Контакт заземления, подключенный к заземлению |
2 |
VDD или Vcc |
Вывод напряжения + 5В |
|
Контрастный значок |
3 |
V0 или VEE |
Настройка контрастности, подключенная к Vcc через переменный резистор. |
Пины управления |
4 |
RS |
Пин выбора регистра, RS = 0 Командный режим, RS = 1 Режим данных |
5 |
RW |
Вывод чтения / записи, RW = 0 Режим записи, RW = 1 Режим чтения |
|
6 |
E |
Включить, импульс от высокого к низкому, чтобы включить ЖК-дисплей |
|
Выводы данных |
7-14 |
D0-D7 |
Выводы данных, хранит данные для отображения на ЖК-дисплее или командные инструкции. |
Контакты подсветки |
15 |
LED + или A |
Для питания подсветки + 5В |
16 |
LED- или K |
Подсветка Земля |
Все контакты понятны по названию и функциям, за исключением контактов управления, поэтому они описаны ниже:
RS: RS - вывод выбора регистра. Нам нужно установить его в 1, если мы отправляем некоторые данные для отображения на ЖК-дисплее. И мы установим его в 0, если мы отправим некоторую командную инструкцию, например, очистить экран (шестнадцатеричный код 01).
RW: Это контакт чтения / записи, мы установим его в 0, если мы собираемся записывать некоторые данные на ЖК-дисплей. И установите его в 1, если мы читаем с ЖК-модуля. Обычно это 0, потому что нам не нужно читать данные с ЖК-дисплея. Всего одна инструкция «Получить статус ЖК-дисплея», которую нужно прочитать несколько раз.
E: Этот вывод используется для включения модуля при подаче на него импульса от высокого к низкому. Должен быть подан импульс 450 нс. Этот переход с ВЫСОКОГО на НИЗКИЙ делает модуль ВКЛЮЧЕННЫМ.
На ЖК-дисплее есть несколько предустановленных командных инструкций, мы использовали их в нашей программе ниже для подготовки ЖК-дисплея (в функции lcd_init ()). Ниже приведены некоторые важные командные инструкции:
Шестнадцатеричный код |
Команда в регистр команд ЖК-дисплея |
0F |
ЖК-дисплей включен, курсор включен |
01 |
Очистить экран дисплея |
02 |
Вернуться домой |
04 |
Уменьшить курсор (сдвинуть курсор влево) |
06 |
Курсор увеличения (сдвиньте курсор вправо) |
05 |
Сдвинуть дисплей вправо |
07 |
Сдвинуть дисплей влево |
0E |
Дисплей включен, курсор мигает |
80 |
Установить курсор в начало первой строки |
C0 |
Установить курсор в начало второй строки |
38 |
2 строки и матрица 5 × 7 |
83 |
Строка курсора 1 позиция 3 |
3C |
Активировать вторую строку |
08 |
Дисплей выключен, курсор выключен |
C1 |
Перейти на вторую строку, позиция 1 |
OC |
Дисплей включен, курсор выключен |
C1 |
Перейти на вторую строку, позиция 1 |
C2 |
Перейти на вторую строку, позиция 2 |
Принципиальная схема и объяснение
Принципиальная схема сопряжения ЖК-дисплея с микроконтроллером 8051 показана на рисунке выше. Если у вас есть базовое представление о 8051, вы должны знать о EA (PIN 31), XTAL1 и XTAL2, RST pin (PIN 9), Vcc и Ground Pin микроконтроллера 8051. Я использовал эти контакты в приведенной выше схеме. Если вы не имеете ни малейшего представления об этом, я рекомендую вам прочитать эту статью «Подключение светодиодов к микроконтроллеру 8051», прежде чем приступать к подключению ЖК-дисплея.
Таким образом, помимо этих вышеупомянутых контактов, мы подключили контакты данных (D0-D7) ЖК-дисплея к микроконтроллеру порта 2 (P2_0 - P2_7). И управляющие контакты RS, RW и E к контактам 12,13,14 (контакты 2,3,4 порта 3) микроконтроллера соответственно.
PIN 2 (VDD) и PIN 15 (питание подсветки) ЖК-дисплея подключены к напряжению (5 В), а PIN 1 (VSS) и PIN 16 (заземление подсветки) подключены к земле.
Контакт 3 (V0) подключен к напряжению (Vcc) через переменный резистор 10 кОм для регулировки контрастности ЖК-дисплея. Средняя ножка переменного резистора подключена к контакту 3, а две другие ножки подключены к источнику напряжения и заземлению.
Код Пояснение
Я попытался объяснить код с помощью комментариев (в самом коде).
Как я уже объяснял ранее о командном режиме и режиме данных, вы можете видеть, что при отправке команды (функция lcd_cmd) мы установили RS = 0, RW = 0, и импульс HIGH-LOW дается E, делая его 1, затем 0 Кроме того, при отправке данных (функция lcd_data) на ЖК-дисплей мы установили RS = 1, RW = 0, а импульс HIGH-LOW дается E, делая его от 1 до 0. Функция msdelay () была создана для создания задержки в миллисекундах. и часто вызывается в программе, он вызывается для того, чтобы у ЖК-модуля было достаточно времени для выполнения внутренних операций и команд.
Для печати строки был создан цикл while, который каждый раз вызывает функцию lcd_data для печати символа до последнего символа (нулевой терминатор - '\ 0').
Мы использовали функцию lcd_init (), чтобы подготовить ЖК-дисплей с помощью предустановленных командных инструкций (объяснено выше).