Жидкокристаллические алфавитно-цифровые индикаторы на платформе контроллеров HD44780, KS0066 и другие аналогичные пользуются большой популярностью у радиолюбителей. Они имеют простую схему управления, например, для отображения информация на таком дисплее достаточно всего шести линий микроконтроллера, а так же относительно небольшую стоимость.
Различными производителями электронных компонентов выпускается довольно большое разнообразие ЖКИ индикаторов. Существуют одно-, двух-, четырёхстрочные индикаторы на 8, 16, 20, 40 символов. Большинство таких индикаторов имеют подсветку, что позволяет использовать их в условиях плохой видимости или в полной темноте. В качестве примера на рис. 1 приведён алфавитно-цифровой 2-х строчный 16-ти символьный ЖКИ-индикатор:
Рис. 1
Индикаторы имеют однорядную или двух рядную разводку выводов при строго определённой последовательности их нумерации (рис. 2). Но из практического опыта использования ЖКИ-индикаторов необходимо констатировать, что пины 1 и 2 (питание) зачастую могут иметь обратную полярность. Поэтому перед подключением обязательно убедитесь, как в вашем индикаторе разведено питание. Сделать это очень просто – вывод питания «минус» соединён с металлической рамкой, которая прижимает собственно сам дисплей к печатной плате. При неправильной полярности можно вывести индикатор из строя.
Рис. 2
Мы не будем останавливаться на способах подключения индикаторов к микроконтроллерам, об этом на различных специализированных сайтах написано более чем достаточно, поэтому повторяться не имеет смысла. Рассмотрим некоторые специфические вопросы по отображению индикатором определённых символов.
ЖКИ - индикаторы позволяют отображать символы латинского алфавита, цифры, при наличии соответствующего знакогенератора – кириллические (русские буквы), а так же специальные символы. Существуют знакогенераторы и с символами других алфавитов. Таблица знакогенератора «двуязычного» индикатора, или как её называют «Epson раскладка Russian» приведена на рис. 3
Рис. 3
Для того что бы отобразить, допустим символ русской буквы Ж, необходимо указать позицию символа на индикаторе (например, для 2-х строчного 16-ти символьного индикатора первая строка имеет адресацию в интервале 80h – 8Fh, вторая строка С0h-CFh), а затем код отображаемого символа Ж – A3h (А – «координата» по горизонтали, 3 – по вертикали таблицы знакогенератора).
Выбор символов, выводимых на индикатор, довольно широк, однако и он не в полной мере в некоторых случаях может удовлетворить требования программиста, разрабатывающего устройство на основе такого индикатора. Например, мне пришлось столкнуться с тем, что в таком знакогенераторе отсутствует символ градуса. Согласитесь, данный символ достаточно распространен, например, в различных измерителях температуры и его отсутствие – довольно большое упущение. Хотя в таблице присутствует символ, отдалённо напоминающий знак градуса (EFh), на индикаторе он выглядит скорее как 0. С другой стороны, некоторые символы здесь абсолютно бесполезны. Например, какую информацию может нести символ D2h или D4h?
Однако не всё так плохо. Различные символы программист может создавать самостоятельно, причём абсолютно любые, которые вообще возможно создать на матрице размером 5х8 точек (а именно такой размер имеет одно знакоместо индикатора). Правда, количество создаваемых символов может быть не более восьми, но это лучше, чем вообще ничего. Давайте попробуем создать собственный символ и вывести его на индикатор.
Для создания собственного символа необходимо воспользоваться областью памяти CGRAM индикатора. Один символ матрицы знакоместа 5х8 (5 строк, 8 столбцов) занимает в памяти CGRAM восемь байт (по одному байту на строку). Младшие 5 бит каждого байта определяют, какие из пяти точек строки должны гореть, а какие нет. Старшие три бита не используются.
Допустим, нам необходимо создать символ смайлика, показанный на рис. 4
Рис. 4
Как видите, в верхней строке не подсвечивается ни одна из точек, следовательно, значение этого байта равно нулю. Во второй строке подсвечены четыре символа, соответственно, значение этого байта равно 1Bh = b’00011011’ (не забываем, что старшие три бита не используются). И так последовательно, до восьмой строки включительно, прорисовываем наш символ.
CGRAM имеет размер 64 байта, поэтому для ее адресации используются шесть младших бит адреса (2^6=64). Три младших бита (из используемых) адресуют номер строки для текущего символа, а три старших бита (из используемых) адресуют номер символа знакогенератора.
Рассмотрим, как это будет выглядеть в программе на Ассемблере. После стандартной инициализации индикатора, необходимо добавить блок программы нашего символа. Подпрограмма WRC служит для передачи команд индикатору, а подпрограмма WRD – для вывода данных:
Небольшие комментарии к приведённому коду. Команда 0х40 - это присвоение счётчику АС начального адреса в области CGRAM (см. в документации на HD44780 описание регистра IR). Под этим адресом хранится первый пользовательский символ. Если мы будем создавать второй символ, то сохраним его по адресу 0х48, третий – 0х50, четвёртый -0х58 и т.д. Остальные команды – это прорисовка по строкам создаваемого символа. Для более компактного кода, особенно когда создаваемых символов несколько, можно применить массив значений.
Тогда приведённый код прорисовки строк данного символа будет иметь следующий вид массива:
db 00, 1B, 04, 04, 04, 11, 0E, 04
Так как коды создаваемых символов имеют значения 0х00 – 0х07 и дополнительно дублируются кодами 0х08 – 0х0F, то для вывода символа, сохранённого по адресу, например 0х40, необходимо указать его позицию, а затем его код - 0х00 или 0х08. Для символа по адресу 0х48 коды будут соответственно, 0х01 или 0х09.
Вот так довольно просто создавать собственные символы на ЖКИ. Теперь, если вам понадобится нестандартный символ, вы знаете, как это сделать.