Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уч. пос. МПТ (2.04.12).pdf
Скачиваний:
403
Добавлен:
22.03.2015
Размер:
10.95 Mб
Скачать

5.Сформировать строб на линии E — импульс длительностью не менее 575 нс. Для этого установить высокий уровень на линии E с помощью регистра FIO1SET3, вызвать процедуру задержки с параметром , предварительно рассчитав числовое значение N по формулам 3.1.2, затем установить низкий уровень сигнала E через регистр FIO1CLR3.

6.Сформировать новую задержку, достаточную для завершения любой команды (не менее 1,71 мс).

3.10.4 Функция вывода строки символов

Основной функцией в библиотеке является подпрограмма вывода строки символов. Обозначим функцию PrintSymbol. Ее алгоритм показан на рисунке 3.10.3, б).

Функции передается два параметра: указатель Sym (строка символов) и байт Pos (номер позиции индикатора для первого символа). Переменная k служит счетчиком символов. Первый вызов функции LCDWrite обеспечивает выполнение команды индикатора Set DDRAM Address, то есть перемещение курсора в позицию Pos. Далее в цикле повторяется выполнение команды записи кода символа в память модуля индикации. Переменная-счетчик k используется как индекс массива и при каждом обращении инкрементируется ([k++]). Выполнение цикла продолжается до тех пор, пока не встретится символ конца строки — символ с кодом 0x00, обозначающий конец строки.

void PrintSymbol(char *Sym, char Pos)

{

char k=0; LCDWrite(0x80 | Pos,0); while (Sym[k]>0)

LCDWrite(Sym[k++],1);

}

3.10.5 Разработка функции инициализации модуля ЖКИ

Алгоритм функции инициализации показан на рисунке 3.10.3, в). Объявить функцию пустого типа

void LCDInit()

1. Выбрать высокоскоростной режим обмена с портами ввода-вывода через регистр SCS (раздел 1.10.2). Настроить на вывод все линии, задействованные для управления индикатором (по рисункам 3.10.1, 3.10.4). Можно рекомендовать использовать регистры FIO0DIRU и FIO1DIRU. Причем лучше для установки у них единиц использовать не команду присваивания, а логическое сложение, например

FIO0DIRU|= Код ;

Это сохранит неизменными остальные разряды, что очень важно в дальнейшем при сопряжении разрабатываемой библиотеки с другими программами.

2.Включить подсветку, установив высокий уровень на линии P0.30.

3.Обеспечить задержку не менее 50 мс, необходимую для начала работы модуля индикации.

193

5–6. С помощью функции LCDWrite подать на индикатор команды

Function Set, Display On и Clear Display. Значения управляющий битов указа-

ны в блок-схеме алгоритма.

3.10.6 Разработка тестовой программы

Тестовая программа должна содержать директиву подключения библиотеки функций управления ЖКИ

#include "LCD.C"

Блок-схема тестовой программы показана на рисунке 3.10.5, а).

1.Вызвать функцию инициализации ЖКИ

LCDInit();

2.Выполнить вывод одной или нескольких произвольных строк символов, вызывая функцию из библиотеки, например:

PrintSymbol("Preved, Medved!", Номер позиции );

Напомним, что позиции верхней строка индикатора нумеруются 0–15 (шестнадцатеричные значения 0x00–0x0F), а нижней — 64–79 (0x40–0x4F).

3.10.7 Управление ЖКИ с опросом флага готовности

Предлагается разработать полный аналог функции LCDWrite, рассмотренной в разделе 3.10.4, но вместо «слепого» ожидания готовности воспользуемся опросом флага. Алгоритм функции показан на рисунке 3.10.5, б). Блоки 1–4 полностью идентичны 3.10.3, а).

5. Здесь рекомендуется длительность строба 1,5 мкс. Это гарантирует, что период следования импульсов будет не меньше допустимых 1,2 мкс.

6–7. После формирования строба необходимо подготовиться к циклическому опросу флага готовности: для этого настроить портовую линию, отвечающую за сигнал DB7 на ввод (регистр FIO0DIR2), и установить сигналы

, .

8–9. Реализовать повтор в цикле while (...) ... ; строба пока на линии DB7 фиксируется низкий логический уровень. Строб формировать с той же временной задержкой 1,5 мкс.

10. Восстановить режим вывода для линии DB7.

3.10.8 Программирование произвольных символов

Память знакосинтезатора имеет восемь свободных позиций символы с кодами 0–7. Графическое изображение этих символов может быть запрограммировано произвольным образом. Для этого необходимо дать команду Set CGRAM Address, после чего подать байт, задающий графическое изображение одного столбца таблицы знакогенератора. Каждый байт определяет строку символа, причем старшие три бита не задействованы, поскольку символ состоит только из пяти столбцов. Полное изображение символа формирую 8 байт. Таким образом, адреса памяти знакогенератора с 0x00–0x07 соответствуют изображению символа с кодом 0x00, адреса с 0x08–0x0F — символа с кодом 0x01 и т. д.

194

Функция программирования символов незначительно отличается от функции вывода символов PrintSymbol. Предложим ее исходный текст.

void ProgSymbol(char *Mask, char Pos)

{

char k;

LCDWrite(0x40 | Pos,0);

for (k=0; k<8; k++) LCDWrite(Mask[k],1);

}

Функция выполнения команды

Основная программа Начало

1 Инициализация

ЖКИ

2

Вывод строки

3

Пустая команда

Начало

6

 

 

 

1

Настроить

 

линию DB7 на ввод

 

Ввод Data, RS

 

 

 

2

7

 

RS=0, RW=1

 

RW=0

 

 

 

3

8

 

Вывод RS

 

Формирования

 

 

 

4

импульса 1,5 мкс

 

 

 

Вывод Data

 

 

5

9

Да

DB7=0

 

Формирования

 

 

 

импульса 1,5 мкс

 

 

 

Нет

 

 

10

 

 

Восстановить режим

 

 

вывода для линии DB7

 

 

Возврат

 

а)

б)

Рисунок 3.10.5 –Алгоритмы основной программы взаимодействия с модулем ЖКИ (а) и функции выполнения команды с ожиданием флага готовности (б)

Адрес 0x00-0x07 0x08-0x0F 0x10-0x17 0x18-0x1F 0x20-0x27 0x28-0x2F 0x30-0x37 0x38-0x3F

Адреса памяти знакогенератора

Код 0x00

0x01

0x02

0x03

Код символа - 0x00

 

 

 

0x00

 

 

знакогенератора

0x08

0x01

 

 

0x09

 

 

 

0x02

 

 

 

0x0A

0x03

 

 

 

0x0B

0x04

 

 

памяти

0x0C

0x05

 

 

0x0D

 

 

Адреса

0x06

 

 

0x0E

 

 

 

0x07

 

 

 

0x0F

0x04

0x05

 

0x06

 

 

0x07

Код символа – 0x01

 

 

 

 

 

0

0

0

0

0

= 0x00

 

0

1

0

1

0

= 0x0A

 

1

1

1

1

1

= 0x1F

 

1

1

1

1

1

= 0x1F

 

0

1

1

1

0

= 0x0E

 

0

0

1

0

0

= 0x04

 

0

0

0

0

0

= 0x00

 

0

0

0

0

0

= 0x00

Рисунок 3.10.6 – Схема адресов памяти знакогенератора (CGRAM)

195