Введение:
Так как модули графических жидкокристаллических дисплеев (ЖКД) имеют тонкий профиль, лёгкий вес, низкое потребление мощности и лёгкое управление, они получили широкое применение в различных приложениях. ЖКД 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