Введение:
Так как модули графических жидкокристаллических дисплеев (ЖКД) имеют тонкий профиль, лёгкий вес, низкое потребление мощности и лёгкое управление, они получили широкое применение в различных приложениях. ЖКД 320×240 (1/4 VGA) очень популярны в различных вычислительных системах. По этой причине контроллер не включается в состав модуля.
Неплохим выбором контроллера, с встроенным 8-разрядным микроконтроллером и контроллером ЖКД, может стать Epson/S-MOS SED1335 или OKI MSM6255/6355. Некоторые встроенные микроконтроллеры, такие как National NS486SXF, имеют ЖКД контроллеры и прямой доступ к дисплею.
Пример приведённый здесь основан на микроконтроллере Phillips 87C751, управляющим контроллером Epson/S-MOS SED1335.
Функциональное описание:
Серия дисплеев Hantronix 320×240 имеет стандартный промышленный 4-разрядный интерфейс. Этому интерфейсу необходим контроллер для непрерывного обновления изображения и для поддержания RAM видео дисплея.
Перед тем как микроконтроллер сможет использовать дисплей, требуется послать серию инициализирующих байтов в котроллер ЖКД, для установки рабочих параметров и описания изображения в контроллере.
После инициализации приложения микроконтроллер может отправить текстовые или графические данные в контроллер ЖКД, где они будут отформатированы и сохранены в RAM дисплея. Одновременно с обновлениями RAM, контроллер ЖКД непрерывно читает данные из RAM дисплея, упорядочая их и посылая дисплею. Применяемый микроконтроллер не имеет прямого доступа к RAM дисплея и должен посылать все данные и команды в контроллер ЖКД.
Схемотехническое описание:
В этом примере микропроцессор 87C751 присоединяется к контроллеру ЖКД через параллельные порты I/O. Он может также быть подключён к шине данных процессора и отображаться в область памяти данных процессора. См. рисунок 1.
Рисунок 1.
Программное обеспечение:
Приведённый ниже пример программы, написан на ассемблерном коде 8051 и разработан для работы с устройством изображённом на рисунке 1. Программа вначале посылает серию командных байтов, следующих за соответствующими параметрами в контроллер ЖКД для его инициализации. Контроллер инициализируется одной текстовой страницей расположенной в памяти 0000h-04AFh и одной графической страницей 4B0h-2A2h. Это подразумевает 1200 текстовых символов расположенных как 30 строк по 40 символов каждая. Размер графической страницы 9600 байт содержащие данные всего экрана. Режим отображения устанавливается с обоими экранами и текстовым наложением на графику по схеме ИСКЛЮЧАЮЩЕЕ ИЛИ.
Текстовая область памяти затем очищается сохранением 20h, символ пробела, во всех 1200 положениях. Графическая страница затем заполняется образом дерева бонсай. Затем отображаются 4 строки текста.
Пример программы написан не эффективно, зато как можно проще.
Программная блок-схема:
Инициализация:
Перед тем как принять или отобразить данные или текст ЖКД контроллер должен быть проинициализирован. Обычно это делается непосредственно после включения системы. Следующая схема показывает команды инициализации и параметры, которые сопровождаются кратким описанием каждой функции.
Байты инициализации:
Команда Код Параметр Функция
SYSTEM SET 40h 30h Аппаратная установка ЖКД панели
87h Ширина символа [7] в пикселах
07h Высота символа [7] в пикселах
27h Адресный диапазон дял 1 текстовой строки
39h Длина строки в символах [40-1=39]
EFh Количество строк на кадр [240]
28h Горизонтальный адресный диапазон (текстовый) [40]
0
SCROLL 44h 0 Устанавливает начальный адрес прокрутки
0 и количество строк на прокручиваемый блок
EFh
B0h
04h
EFh
0
0
0
0
CURSOR FORM 5Dh 04h Форма и размер курсора
[блок, ширина 4 пиксела, высота 6 пикселов]
86h
CURSOR DIRECTION 4Ch Направление курсора в режиме автоматической записи
HORIZONTAL SCROLL RATE 5Ah 00h Скорость горизонтальной прокрутки,
[1] пиксел за один раз
OVERLAY 5Bh 01h Режим наложения текст/графика (ИСКЛЮЧАЮЩЕЕ ИЛИ)
DISPLAY ON/OFF 59h 16h Включение.выключение дисплея [Включено]
Отображаемый образ:
Программа:
$MOD751
;**************************************************
;* *
;* HDM3224 Приложение V1.0 *
;* *
;**************************************************
; Частота тактовых импульсов процессора 16 МГц.
; Время цикла .750 мс.
; Демонстрационная программа изображения дерева бонсай
; битовая карта изображения дерева и 4 линии
; текста на ЖКД 320 ґ 240.
org 00h
ljmp start ; начало программы
org 100h
; Инициализация 32241
; Текстовая страница 0000h 04Afh
; Графическая страница 04B0h 2A2Fh
start:
mov r1,#40h ; установка системы
lcall comm32
mov dptr,#msg1 ; параметр установки системы
lcall data32
mov r1,#44h ; прокрутка
lcall comm32
mov dptr,#msg2 ; параметр прокрутки
lcall data32
mov r1,#5Dh ; форма курсора
lcall comm32
mov dptr,#msg3 ; параметр курсора
lcall data32
mov r1,#4Ch ; направление курсора
lcall comm32
mov dptr,#5Ah ; прокрутка по точкам
lcall comm32
mov r1,#msg18 ; параметр прокрутки по точкам
lcall data32
mov dptr,#5Bh ; наложение
lcall comm32
mov dptr,#msg4 ; параметр наложения
lcall data32
mov r1,#59h ; включение/выключение дисплея
lcall comm32
mov dptr,#msg5 ; параметр дисплея
lcall data32
; очистка текстовой страницы
lcall clrtext
; битовая карта изображения
mov r1,#46h ; установка курсора
lcall comm32
mov dptr,#msg6
lcall data32
mov r1,#42h ; запись в память
lcall comm32
mov dptr,#msg12
lcall data32
; отображение текста
mov r1,#46h ; установка курсора
lcall comm32
mov dptr,#msg7
lcall data32
mov r1,#42h ; запись в память
lcall comm32
mov dptr,#msg14
lcall data32
mov r1,#46h ; установка курсора
lcall comm32
mov dptr,#msg8
lcall data32
mov r1,#42h ; запись в память
lcall comm32
mov dptr,#msg15
lcall data32
mov r1,#46h ; установка курсора
lcall comm32
mov dptr,#msg9
lcall data32
mov r1,#42h ; запись в память
lcall comm32
mov dptr,#msg16
lcall data32
mov r1,#46h ; установка курсора
lcall comm32
mov dptr,#msg10
lcall data32
mov r1,#46h ; запись в память
lcall comm32
mov dptr,#msg17
lcall data32
sjmp $ ; стоп
;*************************************************
; Подпрограммы
; comm32 посылает байт в R1 в
; 32241 как команда
comm32:
setb p3.2 ; a0=1=команда
comm321:
mov a, r1 ; послать байт данных
mov p1, a
clr p3.0 ; CS - строб
clr p3.1 ; дисплея
setb p3.1
setb p3.0
ret
write32:
clr p3.2 ;a0=0=данные
sjmp comm321
; data32 посылает сообщение указанное в
; DPTR в 32241.
data32:
clr a ; отправить байт
movc a, @a+dptr
cjne a, #0a1h, data321 ; сделано?
ret
data321:
mov r1, a
lcall write32 ; отправить
inc dptr
sjmp data32 ; следующий байт
; Очистить текстовую RAM на 3224
clrtext:
mov r1, #46h ; установить курсор
lcall comm32
mov dptr, #msg13 ; параметр курсора
lcall data32
mov r1, #42h ; запись в память
lcall comm32
mov dptr, #msg11 ; все пробелы
lcall data32
mov r1, #46h ; установить курсор
lcall comm32
mov dptr, #msg6
lcall data32
ret
;************************************************
; Таблицы и данные
; Инициализация параметров для 3224.
msg1:
db 30h, 87h, 07h, 27h ;установка системы
db 39h, 0EFh, 28h, 0h, 0A1h
msg2:
db 0, 0, 0EFh, 0B0h ;прокрутка
db 04h, 0EFh, 0, 0
db 0, 0, 0A1h
msg3:
db 04h, 86h, 0A1h ; форма курсора
msg4:
db 01h, 0A1h ; параметр наложения
msg5:
db 16h, 0A1h ; включение/выключение дисплея
msg6:
db 0B0h, 04h, 0A1h ; установка курсора на
; графическую страницу
msg7:
db 31h, 2h, 0A1h ; установка курсора на
; текстовую страницу
; первая строка
msg8:
db 59h, 2, 0A1h ; вторая строка
msg9:
db 81h, 2, 0A1h ; третья строка
msg10:
db 0A9h, 2, 0A1h ; четвёртая строка
; 1200 пробелов для очистки текстовой страницы
; Следующая таблица не приведена
; здесь, исключая первые 8 байт,
; она состоит из 1200 байтов
; каждый из которых 20h
msg11:
db ' '
db 01Ah
; Графика 320x240 дерево бонсай
; Следующая таблица не приведена
; здесь. Она состоит из 9600 байтов
; которые охватывают весь экран
; битовой картой изображения дерева бонсай.
; Вы можете добавить несколько байтов перед
; 01Ah конечным байтом с целью тестирования
; или включения полного битового образа
msg12:
db 01Ah
msg13:
db 0, 0, 01Ah ; установка курсора
;на текстовую страницу
msg14:
db 'HANTRONIX'
db 0A1h
msg15:
db 'Crystal Clearand'
db 0A1h
msg16:
db 'Visibly Superior'
db 0A1h
msg17:
db 'LCD Modules'
db 0A1h
msg18:
db 0, 01Ah ; параметр прокрутки по горизонтали
end
Источник: gaw.ru