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