Работа с дисплеем 16×2 на контроллере HD44780 в Bascom-AVR
http://avrproject.ru
Жидкокристаллические дисплеи на контроллере HD44780 (а также совместимом с ним KS0066) очень распространены благодаря простому методу работы с ними, а так же небольшой цене. В зависимости от исполнения дисплея, они позволяют выводить от 8-и до 40-ка символов в каждой строке, строк может быть одна, две или четыре. Чаще всего встречаются 8*2 (восемь символов*две строки), 16*2 и 20*4.Для примера рассмотрим распиновку индикатора 16*2 (у всех дисплеев на контроллере HD44780 она похожа)
У каждого дисплея на контроллере HD44780 для подключения имеется 14 выводов + 2 вывода для подсветки (если она имеется):
- Земля, GND
- Напряжение питания, Vcc (+5V)
- Настройка контрастности, Vo
- Выбор регистра, R/S
- Чтение/запись, R/W
- Сигнал разрешения чтения/записи, E
- Bit 0, D0
- Bit 1, D1
- Bit 2, D2
Bit 3, D3 - Bit 4, D4
- Bit 5, D5
- Bit 6, D6
- Bit 7, D7
- Питание подсветки для дисплеев с подсветкой, LED +
- Питание подсветки для дисплеев с подсветкой, LED –
Данные в дисплей загружаются по шине данных (D0-D7), при этом контроллер поддерживает как 8-и, так и 4-х битное подключение. 4-х битное подключение экономит ножки микроконтроллера и чаще всего достаточно для многих задач (при 8и битном подключении можно быстрее загружать данные в контроллер дисплея, но нам пока это ни к чему, поэтому не будем его рассматривать). Для 4-х битного подключения используются 4 последних бита шины (D4-D7).
В качестве примера будем использовать дисплей 20х4, подключенный к микроконтроллеру ATmega8 по 4х битному интерфейсу по схеме ниже
Дисплей требует для питания 5 вольт, делителем на резисторе R1 настраивается контрастность отображаемых символов, вывод R/W подключается к земле (т.е. выбрана постоянная запись в дисплей). Подключать оставшиеся выводы можно к любым свободным ножкам микроконтроллера. Конфигурация ножек для подключения дисплея у микроконтроллера ATmega8 будет выглядеть следующим образом:
$regfile = “m8def. dat” ‘выбранный тип микроконтроллера
$crystal = 1000000 ‘частота работы 1 МГцConfig Lcd = 20 * 4 ‘указываем какой у нас дисплей
‘и конфигурируем ножки для подключения
Config Lcdpin=Pin,Db4=PortB.3, Db5=PortB.2, Db6=PortB.1, Db7=PortB.0,E=PortB.4,Rs=PortB.5А дальше уже можно выводить информацию на дисплей: буквы, цифры, специальные символы, а если извернуться и псевдографику. Для вывода данных на дисплей нужно знать несколько команд:
CLS – очистка дисплея
LCD – вывести данные на дисплей (пример: Lcd “Hello world” выведет надпись Hello world)
Locate – установка места на индикаторе с которого начнется выводится текст (пример: Locate 1,5 установит курсор на 5-е знакоместо первой строчки и текст выводимый командой LCD будет начинаться отсюда)
CURSOR ON / OFF / BLINK / NOBLINK – включает или отключает отображение и мигание курсора, по умолчанию он включен (пример: отключим курсор командой Cursor Off)
А теперь напишем вот такую небольшую программку, которая выведет надпись на дисплей:
$regfile = “m8def.
dat” ‘выбранный тип микроконтроллера
$crystal = 1000000 ‘частота работы 1 МГцConfig Lcd = 20 * 4 ‘указываем какой у нас дисплей
‘и конфигурируем ножки для подключения
Config Lcdpin=Pin,Db4=Portb.3, Db5=Portb.2, Db6=Portb.1, Db7=Portb.0,E=Portb.4,Rs=Portb.5Cursor Off ‘выключим отображение курсора
Cls ‘очистим дисплейLcd “LCD 20*4 HD44780” ‘выводим текст в первой строке
Locate 2 , 8 ‘переводим курсор на вторую строку, восьмое знакоместо
Lcd “AVRproject.ru” ‘выводим текстEnd
в результате на дисплее получим следующее:
Также в Bascom-AVR есть еще несколько дополнительных команд для работы с дисплеями:
UPPERLINE – возвращает курсор на самую верхнюю строчку дисплея.
LOWERLINE – перевод курсора на вторую строку
THIRDLINE – перевод курсора на третью строку
FOURTHLINE – перевод курсора на четвертую строку
HOME – также возвращает курсор на верхнюю строчку, но в отличии от команды UPPERLINE эта команда может принимать дополнительные значения: если после нее поставить букву L, T или F то курсор переместится в начало строчки, название которой начинается с соответствующей буквы (пример: для того чтобы переместить курсор в начало третьей строки, нужно написать команду HOME T )
пример кода для вывода информации на дисплей с использованием этих команд:
$regfile = “m8def.
dat” ‘выбранный тип микроконтроллера
$crystal = 1000000 ‘частота работы 1 МГцConfig Lcd = 20 * 4 ‘указываем какой у нас дисплей
‘и конфигурируем ножки для подключения
Config Lcdpin=Pin,Db4=Portb.3, Db5=Portb.2, Db6=Portb.1, Db7=Portb.0,E=Portb.4,Rs=Portb.5Cursor Off ‘выключим отображение курсора
Cls ‘очистим дисплейLcd “*** HD44780 LCD ***” ‘выводим текст в первой строке
Lowerline ‘переходим на вторую строку
Lcd “Line number 2” ‘выводим текст
Thirdline ‘переходим на третью строку
Lcd “AaBbCcDdEeFfGgHfIiJj” ‘выводим на третьей строке
Fourthline ‘переходим на четвертую строку
Lcd “1234567890” ‘печатаем на четвертой строчкеEnd ‘конец программы
SHIFTLCD LEFT / RIGHT – сдвигает текст в строке на которой находится курсор на одну позицию влево или вправо.
SHIFTCURSOR LEFT / RIGHT – сдвигает курсор на одну позицию влево или вправо
и пример того как использовать сдвиг текста:
$regfile = “m8def.dat” ‘выбранный тип микроконтроллера
$crystal = 1000000 ‘частота работы 1 МГцDim A As Byte ‘переменная для организации цикла
Config Lcd = 20 * 4 ‘указываем какой у нас дисплей
‘и конфигурируем ножки для подключения
Config Lcdpin=Pin,Db4=Portb.3, Db5=Portb.2, Db6=Portb.1, Db7=Portb.0,E=Portb.4,Rs=Portb.5Cursor Off ‘выключим отображение курсора
Cls ‘очистим дисплейLocate 1 , 11 ‘устанавливаем курсор на первой строке, десятом знакоместе
Lcd “Bascom-AVR” ‘выведем текст‘цикл сдвига влево
For A = 1 To 10 ‘повторяем этот цикл пока переменная А не достигнет значения 10
Shiftlcd Left ‘сдвинем текст влево
Waitms 300 ‘задержка 300 миллисекунд
Next A ‘увеличиваем значение переменной А на 1‘цикл сдвига вправо
For A = 1 To 10 ‘повторяем цикл пока переменная А не достигнет значения 10
Shiftlcd Right ‘теперь сдвинем текст вправо
Waitms 300 ‘задержка 300 миллисекунд
Next A ‘увеличиваем значение переменной А на 1‘продолжаем выполнение программы
Wait 1 ‘задержка 1 секунда Home F ‘устанавливаем курсор на нижнюю строчку
Lcd “END PROGRAM” ‘и выводим надпись
End ‘конец программы
результат на видео ниже:
youtube.com/embed/AQ-RVDPN9BU” allowfullscreen=”” frameborder=”1″/>
Подключение LCD (HD44780) к микроконтроллеру PIC12F683 по трехпроводному интерфейсу
Как известно ЖК дисплей на базе контроллера HD44780 требует для управления до 6 линий ввода/вывода микроконтроллера, поэтому подключить его к микроконтроллеру с малым числом линий ввода/вывода, например PIC12F683, в стандартном 8/4-битном режиме невозможно. В этом проекте мы рассмотрим технику управления таковым ЖК дисплеем с использованием всего лишь трех линий ввода/вывода микроконтроллера. Команды управления и данные будут пересылаться последовательно в сдвиговый регистр 74HC595 (8-разрядный сдвиговый регистр с защелкой на выходе), а параллельные выходные данные с регистра поступают на LCD.
/>
Микросхема 74HC595 содержит 8 битный регистр хранения и 8 битный сдвиговый регистр. Данные последовательно передаются в сдвиговый регистр, затем фиксируются в регистре хранения. К регистру хранения подключены 8 выходных линий. На картинке ниже показано расположение выводов микросхемы 74HC595.
/>
Сдвиговый регистр и регистр хранения имеют различные тактовые входы: SH_CP и ST_CP, соответственно. Когда на тактовом входе SH_CP появляется логическая единица, регистр считывает бит со входа данных DS и записывает его в самый младший разряд. При поступлении на тактовый вход следующего импульса, все повторяется, только бит записанный ранее сдвигается на один разряд, а его место занимает вновь пришедший бит. Когда все восемь бит заполнились и приходит девятый тактовый импульс, регистр снова начинает заполнятся с младшего разряда, и все повторятся вновь. Что бы данные появились на выходах Q0…Q7, нужно их «защелкнуть». Для этого необходимо подать логическую единицу на вход ST_CP. Что бы мы не делали с регистром, данные на выходах не изменятся пока мы вновь не «защелкнем» их.
/>
В нашем случае тактовые входы SH_CP и ST_CP объединены, поэтому, если нам необходимо получить 8 бит, переданных последовательно, в параллельном формате на выходе Q0…Q7, после передачи 8 бита, необходим еще один тактовый импульс, т.к. регистр хранения запаздывает на 1 тактовый импульс от регистра сдвига.
Символьные ЖК дисплеи на базе контроллера HD44780 для управления, в общем случае, требует 14 линий ввода/вывода: 8 линий данных (D0…D7), 3 линии управления (RS, E, R/W), 3 линии питания (Vdd, Vss, Vee). Кроме того многие модели оснащены подсветкой.
/>
К параллельным выходным линиям регистра сдвига подключен ЖК индикатор: выводы данных D4-D7 и вывод RS (4-битный режим работы). Такое решение потребует от микроконтроллера лишь трех линий ввода/вывода: 2 для передачи тактового сигнала и данных в регистр сдвига 74HC595 и 1 для управления индикатором (вывод E). Так как используется 4-битный режим работы, любые восемь бит (команда или данные) передаются в два этапа: сначала старший полубайт, затем передается младший полубайт.
Стоит отметить также, что вывод управления индикатора R/W (чтение/запись) подключается к общему проводнику, вследствие чего чтение данных или состояния ЖК модуля при таком подключении невозможно. Принипиальная схема: подключение микроконтроллера к регистру сдвига и LCD модулю
/>
Последовательные данные от микроконтроллера поступают на вывод DS (14). Вывод OE (13) подключен к общему проводнику, вывод MR (10) подключен к +5 В. Выводы параллельных данных Q0-Q3 регистра сдвига подключены к выводам данных LCD модуля D4-D7. Также вывод Q4 подключен к выводу RS управления LCD модуля. Если LCD модуль имеет встроенную подсветку, то управление ею можно осуществить по линии LED (см. схему), логическая 1 на этой линии включает подсветку.
Вид монтажной платы с установленным регистром сдвига и коннекторами для подключения LCD модуля и микроконтроллера
/>
Программная часть для нашего проекта сложнее, чем аппаратная. Необходимо соблюдать последовательность операций для реализации алгоритма последовательной передачи данных и команд в регистр сдвига.
Первый бит данных, переданный на вывод DS регистра появится на выходе Q0 через 2 тактовых импульса (т.к. SH_CP и ST_CP объединены). Поэтому для передачи 4-х бит и сигнала RS потребуется шесть тактовых импульсов, прежде чем эти 4 бита появятся на выходных параллельных линиях регистра 74HC595.
Когда подается питание на LCD модуль, он настроен на работу в 8-битном режиме. Для инициализации его в 4-битный режим требуется несколько команд.
Автор составил для LCD модуля 16×2 подпрограммы работы по такой схеме подключения в компиляторе mikroC, однако пользователи могут самостоятельно изменить параметры инициализации в соответствующей функции для различных дисплеев.
Описание подпрограмм:
- Initialize_LCD(): инициализация дисплея для работы в 4-битном режиме, 2-строчный дисплей, размер символов 5×7, дисплей включен, курсор не отображается;
- Write_LCD_Data(): посылка байта данных в дисплей, в текущую позицию курсора;
- Write_LCD_Cmd(): посылка байта команды в дисплей;
- Write_LCD_Nibble(): данные или команда посылается в дисплей как два полубайта. Эта функция отвечает именно за посылку полубайта в дисплей;
- Write_LCD_Text(): отправка символьной строки в дисплей в текущую позицию курсора;
- Position_LCD(): смена позиции курсора.
Конфигурация микроконтроллера: работа от внутреннего RC осциллятора 4 МГц, MCLR отключен, WDT (сторожевой таймер) отключен. Необходимо также в программе определить сигнальные линии (Data_Pin, Clk_Pin, Enable_Pin), которые вы будете использовать для своего микроконтроллера. В архиве по данной ссылке – исходный код программы для микроконтроллера
ЖК-дисплей HD44780, расширители ввода-вывода, интерфейс I2C и т. д.
Вот моя исследовательская заметка о символьном ЖК-дисплее HD44780 и вариантах его подключения к устройствам управления.
ЖК-дисплей HD44780
- Символьный ЖК-дисплей в отличие от графического ЖК-дисплея
- идеально подходит для отображения текста
- поставляется в различных размерах, но наиболее популярными являются 16×2 и 20×4
Согласно Википедии:
Контроллер ЖК-дисплея Hitachi HD44780 представляет собой буквенно-цифровой контроллер жидкокристаллического дисплея (ЖК-дисплея) с точечной матрицей, разработанный Hitachi в 1980-е годы. Набор символов контроллера включает символы ASCII, японские символы кана и некоторые символы в двух строках по 28 символов.
HD44780 — один из самых популярных символьных ЖК-дисплеев, когда-либо созданных. Многие сторонние дисплеи используют его 16-контактный интерфейс и набор инструкций для совместимости.
Нужна ли нам пайка?
У нас есть возможность приобрести:
- детали по отдельности и спаять их самим или
- предварительно собранные изделия или
- Система SparkFun Qwiic Connect и Adafruits STEMMA QT разработаны для простого подключения I2C
Для отдельных ЖК-дисплеев некоторые продукты поставляются с припаянными контактными штырьками:
- Собранный стандартный ЖК-дисплей 16×2 — белый на синем | Адафрут
Для ЖК-дисплея с интерфейсным модулем I2C некоторые продукты предварительно собраны:
- ЖК-модуль I2C 16×2 | Google картинки
Для системы SparkFun Qwiic Connect большинство продуктов поставляются с разъемами Qwiic:
- SparkFun 16×2 SerLCD — Текст RGB (Qwiic)
ЖК-контакты
ЖК-дисплей HD44780 обычно имеет 16 контактов, но некоторые продукты добавляют дополнительные контакты для подсветки RGB.
Лично я разделяю в уме контакты LCD на четыре группы, чтобы они были понятны мне:
- Мощность и контрастность (контакты 1-3)
- Специальные штифты (штыри 4-6)
- Контакты данных (контакты 11-14)
- Контакты подсветки (дополнительно; контакты 15–16 или 15–18)
Инструкции по подключению символьного ЖК-дисплея Wikipedia и Adafruit могут быть полезны, чтобы увидеть общую картину. Для получения дополнительной информации я нашел полезными следующие ссылки:
- Лист данных HD44780
- Как использовать символьный ЖК-модуль | elm-chan.org
- Разница между символьным интерфейсом 16×2 LCD в 4-битном и 8-битном режимах | www.engineersgarage.com
Мощность и контрастность (контакты 1-3)
Контакт ЖК-дисплея № | Имя контакта ЖК-дисплея | |
---|---|---|
1 | Земля | |
2 | ВКЦ | от +3,3 до +5 В (тип. ) |
3 | Контраст | от +3,3 до +5 В (тип.) |
Специальные контакты (контакты 4-6)
Контакт ЖК-дисплея # | Имя контакта ЖК-дисплея | |
---|---|---|
4 | Выбор регистра (RS) | 0: Инструкция, 1: Данные |
5 | Чтение/запись (чтение/запись) | 0: запись, 1: чтение; скорее всего всегда 0 |
6 | Включить (EN) | Начинает чтение/запись |
В частности, важны бит выбора регистра и бит разрешения. Register Select переключается между режимом инструкций и режимом данных, когда мы взаимодействуем с дисплеем. Бит чтения/записи не нужен, если мы только записываем данные на дисплей. Скорее всего, мы подключим контакт чтения/записи к земле, чтобы он всегда был низким.
Контакты данных (контакты 11-14)
Контакт ЖК-дисплея # | Имя контакта ЖК-дисплея | |
---|---|---|
7-10 | Бит данных 0-3 (DB0-3) | Не используется в 4-битной операции |
11-14 | Биты данных 4-7 (DB4-7) | Передает инструкцию или данные |
ЖК-дисплей HD44780 имеет 4-битный и 8-битный режимы. 4-битный режим позволяет нам разделить байт данных (8-битный) на четыре старших бита и четыре младших бита, а затем отправить их по отдельности. Таким образом, мы можем вдвое уменьшить количество необходимых контактов ввода-вывода. Похоже, что обычно большинство людей используют только 4-битный режим.
Байт, который мы отправляем на дисплей, может быть либо инструкцией, либо данными, в зависимости от бита выбора регистра.
Контакты подсветки (дополнительно; контакты 15-16 или 15-18)
Контакт ЖК-дисплея # | Имя контакта ЖК-дисплея | |
---|---|---|
15 | Анод подсветки | Если применимо |
16 | Катод подсветки или красный | Если применимо |
17 | Катод подсветки зеленый | Если применимо |
18 | Подсветка Катод синий | Если применимо |
Подсветка не имеет прямого отношения к управлению ЖК-дисплеем. Это можно сделать самостоятельно.
Исходный ЖК-дисплей HD44780 имеет только одноцветную светодиодную подсветку с использованием контактов 15-16. Некоторые новые ЖК-дисплеи, совместимые с HD44780, имеют подсветку RGB с использованием контактов 15–18.
Мы должны заранее спланировать, что мы хотим делать с подсветкой. Многие модули I2C не поддерживают подсветку RGB. Если дисплей имеет подсветку RGB и мы используем только контакты 15-16, подсветка будет фиксированной на красный цвет, что не идеально.
Благодаря подсветке RGB можно легко получить желтый, розовый и голубой цвета, просто включив или выключив красный, зеленый и синий цвета. Это просто сочетание красного, зеленого и синего.
Если мы хотим управлять 24-битным RGB для более точных цветов между красным, зеленым и синим, нам понадобится широтно-импульсная модуляция (ШИМ), чтобы мы могли регулировать яркость для каждого цвета.
Инструкции для ЖК-дисплеев с RGB-подсветкой Adafruit могут оказаться полезными.
Пользовательский шрифт
ЖК-дисплей HD44780 позволяет нам регистрировать пользовательские символы; однако лично я бы не беспокоился, потому что не считаю эту функцию полезной. Согласно Википедии:
В устройство можно запрограммировать ограниченное количество пользовательских символов в виде растрового изображения с помощью специальных команд. Эти символы необходимо записывать в устройство каждый раз при включении, так как они хранятся в энергозависимой памяти.
Расширители ввода/вывода
- Последовательно-параллельный преобразователь.
- Позволяет нам добавлять дополнительные порты GPIO.
- Уменьшает количество портов GPIO на нашем контроллере, которые используются для ЖК-дисплея.
Существует так много расширителей ввода-вывода, но кажется, что следующие элементы являются одними из самых популярных для ЖК-дисплеев:
- 8-битный расширитель ввода-вывода PCF8574
- 8-битный модуль расширения ввода-вывода MCP23008
- 8-битный сдвиговый регистр SN74HC595
- 16-разрядный модуль расширения ввода-вывода MCP23017
Нам нужно 6-7 контактов из восьми для управления ЖК-дисплеем, поэтому в 8-битном расширителе ввода-вывода не хватает контактов для подсветки RGB. Мы можем включать/выключать один светодиод.
Модуль I2C/SPI
В разных продуктах используются разные расширители ввода-вывода, поэтому помните, какой расширитель ввода-вывода вы используете, если используете что-то вроде рюкзака I2C/SPI. Также важно назначение контактов между ЖК-дисплеем и модулем расширения ввода/вывода.
Модуль I2C на базе PCF8574
Насколько мне известно, модули I2C на базе PCF8574 являются самыми популярными и недорогими. Предварительно собранный ЖК-дисплей 16×2 с модулем I2C обычно стоит менее 10 долларов США. Handson Technology I2C Serial Interface 1602 LCD Module User Guide обобщает типичные характеристики модуля I2C на базе PCF8574.
Рюкзак Adafruit i2c / SPI с ЖК-дисплеем
Рюкзак Adafruit i2c/SPI с символьным ЖК-дисплеем поддерживает интерфейсы I2C и SPI. На момент написания он использует MCP23008 для I2C и SN74HC595 для SPI.
Следующие проводки работали нормально:
ЖК-рюкзак | Малиновый Пи — I2C | Малиновый Пи — SPI |
---|---|---|
Часы (CLK) | Последовательные часы (SCLK) | Последовательные часы (SCLK) |
Данные (дата) | Серийные данные (SDA) | Контроллер Выход Периферийный Вход (COPI) |
Защелка (LAT) | – | Выбор чипа (CS) |
Система SparkFun Qwiic Connect
Я никогда раньше не пользовался системой Qwiic Connect, но она кажется хорошим вариантом, когда нам нужно подключить несколько устройств к шине I2C.
Это кажется многообещающим, но, поскольку он относительно новый, я обеспокоен тем, что на момент написания статьи доступно не так много информации.
Скоро попробую.
- SparkFun Qwiic pHAT v2.0 для Raspberry Pi
- SparkFun 16×2 SerLCD — Текст RGB (Qwiic)
- Библиотека sparkfun/Qwiic_SerLCD_Py — модуль Python для I2C-управления ЖК-дисплеями SparkFun Qwiic Serial
Adafruit STEMMA QT
Аналогичен системе SparkFun Qwiic Connect.
- Что такое STEMMA QT?
USB-интерфейс
Также имеется интерфейс USB. Интересно, когда эта опция может быть полезна, потому что, например, у Raspberry Pi не так много USB-портов.
- Рюкзак Adafruit USB + Serial LCD
Заключение
- Перед использованием ЖК-дисплея желательно примерно понять, как он работает.
- В разных продуктах используются разные расширители ввода-вывода.
- Важное значение имеет назначение контактов между ЖК-дисплеем и модулем расширения ввода-вывода.
- Модуль I2C на базе PCF8574 — хорошее и недорогое решение.
- Система SparkFun Qwiic Connect кажется многообещающей, но, поскольку она относительно новая, на момент написания статьи доступно не так много информации.
Я не использовал систему SparkFun Qwiic Connect или интерфейс USB, но мне интересно узнать об этом. Я опробую их в ближайшее время и продолжу обновлять содержимое по мере того, как узнаю больше.
Использование буквенно-цифрового ЖК-экрана HD44780
Hitachi HD44780 — это контроллер ЖК-экрана, используемый для управления небольшими буквенно-цифровыми ЖК-дисплеями. Многие более дешевые дисплеи на самом деле не используют микросхему HD44780. Однако они используют одинаковую схему выводов и управления, и поэтому могут работать одинаково.
Подключение дисплея
В большинстве экранов используется следующая распиновка, однако лучше всего обратиться к техническому описанию экрана, если таковое имеется.
- Заземление
- VCC (обычно 5 В)
- Вход регулировки контрастности
- Выбор регистра (Команда: RS=0, Данные: RS=1)
- Чтение/Запись (Чтение=0, Запись=1)
- Включить
- Бит данных 0 (DB0)
- Бит данных 1 (DB1)
- Бит данных 2 (DB2)
- Бит данных 3 (DB3)
- Бит данных 4 (DB4)
- Бит данных 5 (DB5)
- Бит данных 6 (DB6)
- Бит данных 7 (DB7)
- Подсветка +
- Подсветка –
Экран имеет 3 основные линии управления. RS, R/W и Включить. Линии RS и R/W определяют работу экрана, как показано в таблице ниже.
Линия Enable действует как тактовый сигнал. Для синхронизации данных с дисплея или с дисплея линия включения должна быть установлена на высокий уровень в течение 1 мкс. Сигнал разрешения регистрируется по заднему фронту.
Экран имеет 8 строк данных, которые используются как для чтения, так и для записи данных на дисплей и с него. Экран также может работать с 4 строками данных, где используются только DB4, DB5, DB6 и DB7. В этом случае DB0 и DB3 можно не подключать. В этой статье рассматривается только работа дисплея с использованием всех 8 линий данных.
Вход регулировки контрастности должен быть настроен на аналоговое напряжение между VCC и GND. Обычно это делается с помощью потенциометра.
Настройка дисплея
После подключения дисплея к микроконтроллеру его необходимо правильно настроить, прежде чем его можно будет использовать. Есть несколько настроек, которые настраивают работу дисплея; они устанавливаются путем подачи команд на ЖК-дисплей.
Чтобы отправить команду на ЖК-дисплей, микроконтроллер должен сначала проверить, занят ли экран. Если экран занят, он будет игнорировать любые отправленные ему команды. Псевдокод ниже показывает, как проверить, занят ли экран.
Установить строки данных в качестве входных данных Установите Ч/З = 1 Установите RS = 0 Установите высокий уровень включения Подождите 1 мкс Установите низкий уровень включения Читать БД7 Если на DB7 высокий уровень, ЖК-дисплей занят, иначе, если DB7 низкий, ЖК-дисплей готов.
Когда ЖК-дисплей готов, микроконтроллер может отправить команду на экран. Псевдокод ниже показывает, как это делается.
Подождите, пока экран не будет занят Установить линии данных на выходы Установить R/W = 0 Установите RS = 0 Установите 8 строк данных на нужную команду Установите высокий уровень включения Подождите 1 мкс Установите низкий уровень включения
Список команд можно найти в таблице ниже.
Дефис «-» означает, что не имеет значения, является ли бит данных 1 или 0. A — бит адреса. Остальные битовые настройки показаны в таблице ниже.
Чтобы инициализировать дисплей, нам нужно отправить несколько команд конфигурации, как показано в псевдокоде ниже.
Подождите, пока экран не будет занят Установить линии данных на выходы Установить Ч/З = 0 Установите RS = 0 Установите строки данных на: 00111000 // Это отправляет команду "Набор функций". "00111000" настраивает отображение // в 8-проводной режим и указывает, что на экране 2 строки и 5x8 точек. Установите высокий уровень включения Подождите 1 мкс Установите низкий уровень включения Подождите, пока экран не будет занят Установите строки данных на: 00000110 // Это отправляет команду "Установить режим входа". "00000110" означает включить // автоматический сдвиг курсора после символа и отключение смещения экрана Установите высокий уровень включения Подождите 1 мкс Установите низкий уровень включения Подождите, пока экран не будет занят Установить строки данных на: 00001100 // Отправляет команду «Включить/выключить дисплей». Дисплей включен, // курсор скрыт, курсор не мигать. Установите высокий уровень включения Подождите 1 мкс Установите низкий уровень включения
Управление дисплеем
Теперь экран сконфигурирован, можно записывать данные на ЖК-дисплей. По умолчанию курсор начинается в верхнем левом углу экрана. Псевдокод ниже показывает, как текст «HI» может быть выведен на экран.
Подождите, пока экран не будет занят Установить линии данных на выходы Установить Ч/З = 0 Установите R/S = 1 Установите для строк данных значение 01001000 // ASCII-код для «H» Установите высокий уровень разрешения Подождите 1 мкс Установите низкий уровень включения Установите строки данных на 01001001 // код ASCII для «I» Установите высокий уровень включения Подождите 1 мкс Установите низкий уровень включения
При вводе «H» курсор автоматически перемещается на один символ вправо. Это означает, что при вводе «I» он появляется справа от «H».
Если бы вы продолжали вводить больше символов, курсор в конце концов исчез бы за краем экрана. Символы по-прежнему будут записываться на ЖК-дисплей, но они не будут видны. Это связано с тем, что хотя на экране может быть место только для 16 (или 8) символов в каждой строке, контроллер фактически имеет место для хранения 80 символов в своей памяти.
Карта памяти дисплея (DDRAM) показана ниже для 4 наиболее распространенных размеров ЖК-дисплея.
Чтобы установить положение курсора, используйте команду «Установить адрес DDRAM» из таблицы команд вверху страницы. Приведенный ниже псевдокод показывает, как можно установить положение курсора.
Подождите, пока экран не будет занят Установите R/W = 0 Установите RS = 0 Установите строки данных на: 10000000 // Установите адрес DDRAM. Курсор на строку 1, столбец 1 Установите высокий уровень включения Подождите 1 мкс Установите низкий уровень включения Подождите, пока экран не будет занят Установите R/W = 0 Установите R/S = 1 Установите для строк данных значение 01001000 // ASCII-код для «H» Установите высокий уровень разрешения Подождите 1 мкс Установите низкий уровень включения Подождите, пока экран не будет занят Установить линии данных на выходы Установить Ч/З = 0 Установите RS = 0 Установите строки данных на: 11000000 // Установите адрес DDRAM. Курсор на строку 2, столбец 1 Установите высокий уровень включения Подождите 1 мкс Установите низкий уровень включения Подождите, пока экран не будет занят Установить Ч/З = 0 Установите R/S = 1 Установите строки данных на 01001001 // код ASCII для «I» Установите высокий уровень включения Подождите 1 мкс Установите низкий уровень включения
Это напечатает «H» в строке 1 и «I» под ней.
С помощью команды «Сдвиг курсора/дисплея» (см. таблицу выше на странице) курсор или экран можно переместить влево или вправо на одну позицию. Если дисплей сдвинут, видимые адреса DDRAM изменятся. Это показано на изображении ниже.
Смещение дисплея можно сбросить, отправив команду «Вернуться домой» (см. таблицу команд выше на странице).
Отображение символов и других символов
Дисплей поддерживает стандартные коды ASCII для цифр 0–9, букв a–z и A–Z, а также большинство стандартных символов ASCII, таких как !?(),. В дополнение к ним есть много дополнительных символов. Персонажи хранятся в CGROM (ПЗУ генератора символов). Содержимое CGROM может различаться в зависимости от производителя дисплея, но большинство производителей используют либо европейский, либо азиатский набор символов, созданный Hitachi. Их можно найти на страницах 17 и 18 описания HD44780.
Европейский набор символов показан ниже. С помощью таблицы можно определить код любого символа в наборе.
Символы выводятся на экран так же, как и обычные символы, как показано ниже.
Подождите, пока экран не будет занят Установить линии данных на выходы Установить Ч/З = 0 Установите R/S = 1 Установите строки данных на 10011000//Код для символа колокольчика Установите высокий уровень включения Подождите 1 мкс Установите низкий уровень включения
Если символы не соответствуют европейским или азиатским наборам символов, то дисплей использует пользовательский набор символов. В этом случае обратитесь к техническому описанию ЖК-дисплея.
Создание пользовательских ЖК-символов
Иногда необходимо отобразить символы, не входящие в набор символов по умолчанию. HD44780 имеет место для 8 пользовательских символов (5×8 точек), которые могут отображаться на экране. (Информацию о дисплеях с разрешением 5×10 точек см. на стр. 19 технического описания HD44780).
Для каждого символа требуется 8 байт данных, по одному на каждую из 8 строк. 3 старших бита каждого байта игнорируются, а остальные 5 бит определяют, будут ли точки отображаться в символе или нет, это показано на изображении ниже.
Адрес CGRAM первой строки каждого пользовательского символа показан в таблице ниже. Также отображается код символа. Это код, используемый для отображения символа, когда он уже сохранен в CGRAM.
Приведенный ниже псевдокод показывает, как можно сохранить пользовательский символ и затем отобразить его на ЖК-экране.
Подождите, пока экран не будет занят // Примечание. это было исключено из остальной части этого кода для ясности, // но это нужно делать перед каждой командой Установить линии данных на выходы Установить Ч/З = 0 Установите RS = 0 Установите строки данных на: 01000000 // Установите адрес CGRAM на строку 1 из // пользовательский символ 1 Импульсный режим Установить Ч/З = 0 Установить RS = 1 Установите строки данных на: 000 01110 // Запись строки 1 символа Импульсный режим Установите строки данных на: 000 11011 // Запись строки 2 символа Импульсный режим Установите строки данных на: 000 10001 // Запись строки 3 символа Импульсный режим Установите строки данных на: 000 10001 // Запись строки 4 символа Импульсный режим Установите строки данных на: 000 10001 // Запись строки 5 символа Импульсный режим Установите строки данных на: 000 10001 // Запись строки 6 символа Импульсный режим Установите строки данных на: 000 10001 // Запись строки 7 символа Импульсный режим Установите строки данных на: 000 11111 // Запись строки 8 символа Импульсный режим Установить Ч/З = 0 Установите RS = 0 Установите строки данных на: 1000 0000 // Установите адрес DDRAM на строку 1, столбец 1 Импульсный режим Установить Ч/З = 0 Установить RS = 1 Установите строки данных на: 0000 0000 // Печать пользовательского символа 1 Импульсный режим
Отличный веб-интерфейс для создания пользовательских персонажей можно найти на сайте quinapalus.