Процессорная система «DE2-70 Media Computer» включает порт, соединённый с жидкокристаллическим дисплеем LCD на плате DE2-70. Дисплей включает память для хранения символьных данных. Как показано на рис. 3.24, общая ёмкость памяти составляет 40х2=80 символов. Первые 16 символов, хранимых в каждой строке этой памяти, видимы на экране, а оставшиеся 24 символа не видимы на экране. Каждая ячейка в памяти может быть доступна с помощью координат (x,y) в семиразрядном адресе, как показано на рис. 3.25. В соответствии с этой схемой, верхняя и нижняя строки дисплея начинаются с адресов 0х00 и 0х40, соответственно, как показано на рис. 3.24. Программируемый интерфейс для LCD дисплея показан на рис. 3.26. Он включает регистр команд, который используется для управления дисплеем LCD и регистр данных, который используется для отправки символьных данных для отображения их на дисплее. Данные могут быть отправлены на дисплей, как ASCII коды, которые автоматически преобразуются дисплеем LCD в отображаемые символы, используя встроенный шрифт. Некоторые из команд, поддерживаемых символьным дисплеем, показаны в таблице 3.2. Первая команда, которая идентифицируется посредством установки бита 7 регистра управления в единицу, используется для установки курсора в заданное положение. Семиразрядное поле адреса задает координаты курсора. После того, как положение курсора будет задано, символ может быть отображен в этой позиции экрана LCD посредством записи его ASСII кода в регистр данных.
Рис. 3.24 – 16х2 символьный дисплей
Рис. 3.25 – Адресация
символьного дисплея
Рис. 3.26 – Регистры LCD дисплея
После завершения операции записи данных в регистр данных, символьный дисплей автоматически перемещает положение курсора на одну позицию вправо. Последовательность символов может быть выведена на дисплей посредством записи каждого символа последовательно в регистр данных LCD. Как показано на рис. 3.24, символьный дисплей включает 40 позиций в каждой строке. Когда курсор достигнет адреса 0х0F в верхней строке, следующие 24 символа сохраняются в позициях, которые не видимы на экране. После записи 40 символов в верхнюю строку, положение курсора переместиться на нижнюю строку по адресу 0х40. После заполнения нижней строки, курсор переместиться назад по адресу 0х00 в начало верхней строки.
Жидкокристаллический дисплей LCD обладает способностью сдвигать своё содержимое на одну позицию влево или вправо. Как показано в табл. 3.2 команда для сдвига влево - 0х18, а команда для сдвига вправо - 0х1С. Выполнение этих команд приведет к одновременному сдвигу двух строк на экране на одну позицию. Когда символы выдвигаются за пределы строки вправо, они циклически помещаются в её начало. Аналогично в другую сторону. Для выключения мерцания курсора на дисплее используется команда 0х0С. Для включения – команда 0х0F. Дисплей может быть очищен и курсор установлен в начало верхней строки, посредством использования команды 0х01.
Фрагмент программы на языке С, в котором используется LCD дисплей, приведён в листинге 18. Программа вначале устанавливает курсор в положение (x,y), затем записывает строку, оканчивающуюся нулевым байтом, для отображения на символьном дисплее. Этот фрагмент входит в состав программы «Media», о которой упоминалось ранее.
Таблица 3.2
Команды LCD дисплея
Команды LCD дисплея | b7 | b6-0 |
Установить курсор | Адрес | |
Сдвинуть дисплей влево | ||
Сдвинуть дисплей вправо | ||
Выключить мерцание курсора | ||
Включить мерцание курсора | ||
Очистить дисплей |
Листинг 18. Фрагмент кода, в котором используется LCD дисплей
volatile char *LCD_display_ptr = (char *) 0x10003050; //базовый адрес lcd дисплея
int x, y;
char *text_ptr;
char instruction;
…
instruction = x;
if (y!=0)
instruction |=0x40; //записываем значение позиции курсора (начало нижней строки)
instruction |=0x80; //команда установки курсора
*(LCD_display_ptr) = instruction; //записываем команду по адресу lcd дисплея
while(*(text_ptr))
{
*(LCD_display_ptr+1) = *(text_ptr); //выводим символ на дисплей
++text_ptr;
}