Чтение онлайн

ЖАНРЫ

Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С

Пак Дэниэл Дж.

Шрифт:

Три контакта разъема индикатора предназначены для подключения двух источников напряжения: VDD — напряжение питания цифровой части (схемы управления индикатора), VO — напряжение смещения электродов. Последнее называют напряжением управления контрастностью индикатора. Вывод VO подключен к средней точке потенциометра, поэтому напряжение VO может изменяться от 0 до 5,0 В, обеспечивая таким образом выбор наилучшего режима отображения.

Временные

диаграммы обмена.
Различают два типа данных, которые может передать МК контроллеру индикатора: команды управления и данные, т.е. коды символов для отображения. В режиме чтения МК может получить от контроллера управления дисплеем слово-состояние и данные из внутреннего ОЗУ символов. В нашем примере мы не будем пользоваться режимом чтения.

Временные диаграммы одного цикла записи в контроллер дисплея приведены на рис. 5.12,в. Приведенные на рисунке длительности временных интервалов определяются конкретным типом выбранного индикатора, поэтому могут достаточно существенно различаться. Об этом следует помнить при использовании ранее написанного и отлаженного программного кода для управления индикатором в последующих разработках. Если очередной индикатор требует больших времен установления по сравнению с предыдущим, то программный код может оказаться неработоспособным.

В соответствии с приведенными временными диаграммами (рис. 5.12,в) должна сгенерировать следующую последовательность сигналов на выходах портов МК:

• Линия RS должна быть установлена в соответствии с типом передаваемых данных: 1 — запись данных, 0 — запись команды;

• С задержкой в 140 нс относительно сигнала RS должна быть установлена в 1 линия разрешения обмена E;

• Длительность импульса на линии E не должна быть менее 450 нс;

• Байт данных должен быть выставлен на линии DB0…DB7 не позднее, чем за 195 нс до спадающего фронта сигнала E. Это время называют временем предустановки данных относительно сигнала разрешения E;

• Данные на линиях DB0…DB7 должны оставаться неизменными в течение не менее 10 нс после перехода сигнала E в неактивное (логический 0) состояние. Это время называют временем сохранения данных относительно сигнала E;

• Период сигнала E не должен быть менее 1000 нс.

Основываясь на требованиях временной диаграммы обмена, следующий алгоритм должен быть реализован микроконтроллером для выполнения одного цикла записи в контроллер дисплея:

1. Установить линию RS в 1 или в 0 (1 — для записи кода символа, 0 — для записи кода команды управления дисплеем);

2. Установить активный уровень на линии разрешения E (логическая 1);

3. Выдать на порт PORT P байт данных (код символа или команда управления);

4. Перевести линию E в неактивное состояние (логический 0).

В процессе создания на основе этого алгоритма программы управления следует учесть все перечисленные ранее задержки между сигналами.

Программа управления ЖК индикатором. Структура программы управления символьным ЖК индикатором представлена на рис. 5.13,а. Программа включает коллекцию функций, каждая из которых выполняет законченное смысловое действие. Разбиение задачи на отдельные функции — искусство разработчика. От выбранного набора функций и способов передачи параметров между ними зависит число возможных ошибок при последующем использовании этих функций в прикладной программе и компактность файла исполняемых кодов.

а) Набор функций управления

б) Блок-схема алгоритма инициализации

Рис. 5.13. Программное

обеспечение для управления цифро-буквенным ЖК индикатором

Блок-схема функции инициализации дисплея представлена на рис. 5.13,б. Она реализует алгоритм начальной установки дисплея, который разработан в соответствии с техническими рекомендациями производителя.

Ниже приведен текст программы на Си для всех функций рис. 5.13,а.

/*------------------------------------------------------------------*/

/*filename: lcd.c */

/*содержит программный код для шести функций управления ЖК дисплеем */

/*------------------------------------------------------------------*/

/*-----------------------------------------------------------------------*/

/* Функция initialize_lcd производит начальную установку режимов дисплея */

/*-----------------------------------------------------------------------*/

void initialize_lcd(void) {

 delay_5ms;

 delay_5ms;

 delay_5ms; //задержка 15 мс

 putcommands(0x38); //команда установки формата интерфейса обмена

 delay_5ms;

 putcommands(0x38);

 delay_l00us;

 putcommands(0x38);

 putcommands(0x38) ;

 putcommands(0x0C);

 putcommands(0x01); //очистить дисплей

 putcommands(0x06); //установить режим ввода с автоматическим

//увеличением адреса

//символа на 1

 putcommands(0x0E); //включить дисплей, режим курсора мигающий

 putcommands(0x02); //установить курсор на первое знакоместо

}

/*---------------------------------------------------------------------*/

/* Функция putchars производит запись одного кода символа в контроллер */

/*дисплея */

/*---------------------------------------------------------------------*/

void putchars(unsigned char с) {

 DDRP = 0xFF; //установить порт PORT P на вывод

 DDRDLC = DDRDLC | 0x0C; //установить разряды 2 и 3 порта PORT DLC на

//вывод

 PORTP = с; //Выдать в порт PORT P код символа с

 PORTDLC = PORTDLC | 0x08; //установить линию RS в 1

 PORTDLC = PORTDLC | 0x04; //установить линию E в 1

 PORTDLC = 0; //установить E и RS в 0

 delay_5ms; //задержка 5 мс

}

/*-----------------------------------------------------------------------*/

/*Функция putcommands производит запись одного кода команды в контроллер */

Поделиться с друзьями: