Введение
Символьные ЖК можно встретить в кофеварках, лазерных принтерах, детских игрушках и может быть даже в тостерах. Контроллер Hitachi HD44780 стал промышленным стандартом для этих типов дисплеев. Это пособие, использующее DIP переключатели и несколько других компонентов, научит вас основам управления HD44780 совместимым дисплеем.
Схема расположения выводов
Мы будем использовать 16-символьный 2-строчный дисплей. Он использует контроллер ST7065C, совместимый с HD44780. На рисунке внизу показан ЖК модуль и схема расположения выводов.
Последние 2 контакта (15 и 16) необязательные и используются только если дисплей имеет подсветку.
На схеме внизу показан ЖК модуль с подключенными основными проводами. Вы, наверное, заметили, что контакт 5 (RW) соединен с общим проводом. Этот контакт служит для управления чтением или записью в дисплей. Так как чтение из дисплея почти никогда не используется, большинство людей просто соединяют этот контакт с общим проводом.
Потенциометр, подключенный к контакту 3, регулирует контрастность ЖК дисплея.
Передача данных и команд
Данные и команды посылаются модулю по 8 линиям данных (контакты 7…14) и линии RS (контакт 4).
Линия RS указывают модулю, к чему относятся 8 бит: к данным или к команде. Данные или команда считываются по спаду сигнала на линии Enable (контакт 6). Это означает, что когда уровень на линии Enable переходит из высокого в низкий, значения линий D0…D7 и RS считываются.
Чтобы послать данные или команду дисплею, вы должны:
- Установить на линии Enable высокий уровень
- Установить нужные значения на RS и D0…D7
- Установить на линии Enable низкий уровень
Между этими операциями должно быть небольшое время ожидания, но здесь рассматривать это я не буду.
Модули дисплеев на основе HD44780 могут работать также в режиме 4-битного интерфейса. В этом режиме данные или команды передаются модулю, используя два 4-битных полубайта. Детально мы обсудим это ниже.
Команды и символы
Ниже приведены таблицы инструкций и символов.
Инструкция |
RS |
R/W |
Код инструкции |
Описание |
Время |
|||||||
DB7 |
DB6 |
DB5 |
DB4 |
DB3 |
DB2 |
DB1 |
DB0 |
|||||
Очистка дисплея |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Очистка дисплея и установка адреса |
1.53 мс |
Возврат |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
- |
Установка адреса DDRAM в 00H, |
1.53 мс |
Установка |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
l/D |
SH |
Выбор направленя сдвига курсора или |
39 мкс |
Выбор режима |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
D |
C |
B |
Включение/выключение дисплея (D), |
39 мкс |
Сдвиг курсора |
0 |
0 |
0 |
0 |
0 |
1 |
S/C |
R/L |
- |
- |
Перемещеие курсора или дисплея без |
39 мкс |
Установка |
0 |
0 |
0 |
0 |
1 |
DL |
N |
F |
- |
- |
Установка ширины шины данных |
39 мкс |
Установка |
0 |
0 |
0 |
1 |
AC5 |
AC4 |
AC3 |
AC2 |
AC1 |
AC0 |
Присваивает адресу CGRAM значение |
39 мкс |
Установка |
0 |
0 |
1 |
AC6 |
AC5 |
AC4 |
AC3 |
AC2 |
AC1 |
AC0 |
Присваивает адресу DDRAM значение |
39 мкс |
Чтение флага |
0 |
1 |
BF |
AC6 |
AC5 |
AC4 |
AC3 |
AC2 |
AC1 |
AC0 |
Чтение флага «занято» (BF), указывающего |
0 мкс |
Запись данных |
1 |
0 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
Запись данных во внутреннюю память |
43 мкс |
Чтение данных |
1 |
1 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
Чтение данных из внутренней памяти |
43 мкс |
Сборка схемы
Обычно ЖК дисплеем управляют с помощью микроконтроллера, компьютера или подобного устройства. В этом упражнении мы будем использовать просто набор переключателей. Это позволит разобраться в подробностях интерфейса.
Схема устройства показана ниже.
На фотографии ниже показано устройство на макетной плате без ЖК модуля. Я так же добавил небольшой источник питания на основе L7805 (с правой стороны платы).
Линии данных и Register Select соединены с общим проводом через резисторы 10 кОм, и когда переключатель замкнут, на этих линиях устанавливается высокий уровень. Линия Enable, с другой стороны, всегда подтянута к высокому уровню, а когда кнопка нажата, переходит в низкий. Для подавления дребезга к кнопке на линии Enable подключен конденсатор 10 нФ.
Перед тем как подключить ЖК модуль к плате, вам понадобится припаять 16-контактный разъем, как показано на рисунке ниже.
Затем мы вставим ЖК модуль в макетную плату и подадим питание. Когда вы будете вставлять модуль ЖК в макетную плату, вам следует быть аккуратным и не торопиться, так как контакты разъема немного толще, чем отверстия в макетной плате.
Если показанное ниже изображение на дисплее вы не видите, покрутите потенциометр контраста. Это изображение отображается по умолчанию на неинициализированном ЖК дисплее.
Работа в 8-битном режиме
Для взаимодействия с дисплеем и вывода текста нам необходимо
- Инициализировать дисплей
- Установить режим ввода и
- Послать последовательность символов в дисплей
Таким образом, для вывода текста нам потребуется включить устройство и затем ввести последовательность Данных/Команд, нажимая Enable после каждой порции данных или команды.
RS |
D7 … D0 |
Описание |
0 |
0 0 1 1 - 1 0 0 0 |
Функция set, 8 бит, 2 строки, 5×7 |
0 |
0 0 0 0 - 1 1 1 1 |
Дисплей Включен, Курсор включен, Курсор мигает |
0 |
0 0 0 0 - 0 1 1 0 |
Режим ввода, Увеличение позиции курсора, |
1 |
0 1 0 0 - 1 0 0 0 |
H |
1 |
0 1 1 0 - 0 1 0 1 |
e |
1 |
0 1 1 0 - 1 1 0 0 |
l |
1 |
0 1 1 0 - 1 1 0 0 |
l |
1 |
0 1 1 0 - 1 1 1 1 |
o |
1 |
0 0 1 0 - 0 0 0 0 |
пробел |
1 |
0 1 0 1 - 0 1 1 1 |
w |
1 |
0 1 1 0 - 1 1 1 1 |
o |
1 |
0 1 1 1 - 0 0 1 0 |
r |
1 |
0 1 1 0 - 1 1 0 0 |
l |
1 |
0 1 1 0 - 0 1 0 0 |
d |
Управление в 4-битном режиме
Главное преимущество 4-битного режима в том, что требуется меньше линий данных. В этом режиме линии с D3 по D0 замкнуты на землю, а данные/команды передаются 4-битными полубайтами.
RS |
D7 … D0 |
Описание |
0 |
0 0 1 0 - 0 0 0 0 |
Установить 4 битный режим (заметьте: занимает 1 полубайт) |
0 |
0 0 1 0 - 0 0 0 0 |
Функция set, 8 бит |
0 |
1 0 0 0 - 0 0 0 0 |
2-й полубайт |
0 |
0 0 0 0 - 0 0 0 0 |
Дисплей Включен, Курсор включен, Курсор мигает |
0 |
1 1 1 1 - 0 0 0 0 |
2-й полубайт |
0 |
0 0 0 0 - 0 0 0 0 |
Режим ввода, Приращение адреса курсора, Текст не сдвигать |
0 |
0 1 1 0 - 0 0 0 0 |
2-й полубайт |
1 |
0 1 0 0 - 0 0 0 0 |
H |
1 |
1 0 0 0 - 0 0 0 0 |
2-й полубайт |
1 |
0 1 1 0 - 0 0 0 0 |
e |
1 |
0 1 0 1 - 0 0 0 0 |
2-й полубайт |
|
||
1 |
0 1 1 0 - 0 0 0 0 |
l |
1 |
1 1 0 0 - 0 0 0 0 |
2-й полубайт |
1 |
0 1 1 0 - 0 0 0 0 |
l |
1 |
1 1 0 0 - 0 0 0 0 |
2-й полубайт |
1 |
0 1 1 0 - 0 0 0 0 |
o |
1 |
1 1 1 1 - 0 0 0 0 |
2-й полубайт |
1 |
0 0 1 0 - 0 0 0 0 |
пробел |
1 |
0 0 0 0 - 0 0 0 0 |
2-й полубайт |
1 |
0 1 0 1 - 0 0 0 0 |
w |
1 |
0 1 1 1 - 0 0 0 0 |
2-й полубайт |
1 |
0 1 1 0 - 0 0 0 0 |
o |
1 |
1 1 1 1 - 0 0 0 0 |
2-й полубайт |
1 |
0 1 1 1 - 0 0 0 0 |
r |
1 |
0 0 1 0 - 0 0 0 0 |
2-й полубайт |
1 |
0 1 1 0 - 0 0 0 0 |
l |
1 |
1 1 0 0 - 0 0 0 0 |
2-й полубайт |
1 |
0 1 1 0 - 0 0 0 0 |
d |
1 |
0 1 0 0 - 0 0 0 0 |
2-й полубайт |
Это очень легко!
В следующей части мы обсудим как связать модуль с микроконтроллером и сделаем за вас всю тяжелую работу.
Оклнчание читайте здесь