Как известно ЖК дисплей на базе контроллера 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), которые вы будете использовать для своего микроконтроллера. В архиве по данной ссылке - исходный код программы для микроконтроллера