Русификация ЖКИ-панелей
серии LCD фирмы Octagon Systems
Жидкокристаллические индикаторные (ЖКИ) панели серии LCD фирмы Octagon Systems предназначены для создания операторских консолей с малым энергопотреблением. Устройства имеют высокую контрастность и оснащены подсветкой на базе светодиодного индикатора с возможностью регулировки яркости.
Лариса Капитанова
Встроенный контроллер ЬСБ-Н (НБ44780) позволяет отображать буквенно-цифровые символы и знаки пунктуации. ЖКИ-панель подключается к микрокомпьютеру через параллельный порт или плату ввода-вывода.
ЖКИ-панели обладают следующими свойствами:
• интерфейс по 4- или 8-битовой линии данных;
• ОЗУ данных дисплея объемом 80x8 бит (максимум 80 символов);
• ПЗУ знакогенератора: символы 5x7 точек — 160 сим волов;
символы 5х 10 точек — 32 символа;
• ОЗУ знакогенератора: символы 5хх7 точек — 8 символов или символы 5х 10 точек — 4 символа;
• возможность считывать данные с дисплея и из ОЗУ знакогенератора;
• широкий диапазон инструкций: очистка дисплея, возврат курсора в начало, включение/отключение дисплея, включение/отключение курсора, прерывистое свечение символов дисплея, сдвиг курсора, сдвиг дисплея;
• внутренний автоматический сброс при включении питания.
В ПЗУ знакогенератора контроллера ЬСБ-Н записаны шаблоны букв английского алфавита и японских иероглифов, поэтому возникает проблема при выводе символов кириллицы. Решить ее можно программным путем.
Идея заключается в следующем: многие буквы русского алфавита совпадают по написанию с английскими, а для вывода на дисплей остальных букв можно использовать 8 перепрограммируемых символов, шаблоны которых загружаются в ОЗУ знакогенератора (ЗГ).
Буквы «А», «В», «Е», «К», «М», «Н», «О», «Р», «С», «Т», «X» есть в английском алфавите. Буква «З» похожа по написанию на цифру «3», а буква «Ь» — на строчную букву «Ь». Букву «Ы» можно составить из двух символов, а букву «Ъ» можно заменить символом «'» (апостроф).
Таким образом, остается 17 букв, не считая «Ё». К восьми из них можно подобрать символы из ПЗУ ЗГ, которые отдаленно напоминают русские буквы и
в контексте могут быть понятны. Шаблоны букв «Б», «Г», «Д», «Ж», «И» («Й»), «Л», «П», «Я» необходимо записать в ОЗУ ЗГ с кодами 0-7. Такое решение проблемы представляется наиболее простым. Однако текст, составленный из таких букв, без «Ё» и «Й» выглядит не только неэстетично, но и читается с трудом.
Более оптимальным является решение, позволяющее загружать шаблоны недостающих символов в знакогенератор динамически, по мере необходимости. После инициализации дисплея в ОЗУ ЗГ загружаются шаблоны букв, не имеющих эквивалента в ПЗУ ЗГ. При выводе очередного символа на дисплей выполняется функция перекодировки ASCII-кода в код дисплея. Примерный алгоритм функции приведен на рисунке.
Эта функция успешно выполняет вывод русских букв в том случае, если одновременно на дисплее присутствует не более восьми различных перепрограммируемых символов. Если таких символов больше, то для остальных будут выведены подобранные заменяющие их символы из ПЗУ ЗГ. При необходимости можно изменить выводимый текст так, чтобы избежать подобных ситуаций.
На дискете, содержащей программное обеспечение контроллера MicroPC фирмы Octagon Systems, приведена резидентная программа для сканирования клавиатуры и управления дисплеем. Исходный текст программы содержит все функции, необходимые для инициализации дисплея, вывода символов на дисплей и загрузки шаблона символа по нулевому адресу в ОЗУ ЗГ. Полный набор команд контроллера HD44780 приведен в документации к данному контроллеру. Далее описаны команды загрузки шаблонов символов в ОЗУ ЗГ и приведены тексты функций на языке С.
Для загрузки шаблона символа необходимо сначала установить адрес записи в ОЗУ ЗГ. Команда установки адреса имеет вид:
RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 1 A A A A A A
Здесь RS — регистр выбора сигнала, DBi — линии передачи данных, AAAAAA — адрес записи в ОЗУ ЗГ.
Вернуть код символа А в ПЗУ знакогенератора
Для всех перепрограммируемых' символов В
.выход по концу ЦИЮЮ
Символ В выведен на дисплей?
Присвоить символу А код символа В; Присвоить символу В пустой код
Записать шаблон символа А в ОЗУ знакогенератора
Вернуть код символа А в ОЗУ знакогенератора
Вернуть код символа, близкого к символу А, из ПЗУ знакогенератора
А.
Рисунок
Далее следует записать шаблон символа. Для символа размером 5x7 точек он состоит из семи байтов; 8-й байт — нулевой (позиция курсора).
Команда записи в ОЗУ ЗГ совпадает с командой записи в ОЗУ данных:
Таблица
ББ7 ББ6 ББ5 ББ4 ББ3 ББ2 ББ1 ББ0 1 Б Б Б Б Б Б Б Б
Здесь ББББББББ — байт данных. После записи байта адрес автоматически увеличивается на 1. В таблице приведено соответствие между кодом символа в ОЗУ данных, адресом
Код символа в ОЗУ данных Адрес в ОЗУ ЗГ Шаблон (данные в ОЗУ ЗГ)
7 6 5 4 3 2 1 0 7 1 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
0 0 0 х х х 1 1 1 1 1
0 0 1 1 0 0 0 0
0 1 0 1 0 0 0 0
~0~ ~0~ ~0~ ~0~ х ~0~ ~0~ ~0~ ~0~ ~0~ ~0~ 0 1 1 «Б» 1 1 1 1 0
1 0 0 1 0 0 0 1
1 0 1 1 0 0 0 1
1 1 0 1 1 1 1 0
1 1 1 х х х 0 0 0 0
0 0 0 х х х ~ 0 0 0 1
0 0 1 1 0 0 0 1
0 1 0 1 0 0 1 1
~0~ ~0~ ~0~ ~0~ х ~0~ ~0~ ~0~ ~0~ 0 1 1 «И» 1 0 1 0 1
1 0 0 1 1 0 0 1
1 0 1 1 0 0 0 1
1 1 0 1 0 0 0 1
1 1 1 х х х 0 0 0 0 0
0 0 0 х х х 0 1 1 1 1
0 0 1 1 0 0 0 1
0 1 0 1 0 0 0 1
0 0 0 0 х 1 1 1 1 1 1 0 1 1 «Я» 0 1 1 1 1
1 0 0 0 0 1 0 1
1 0 1 0 1 0 0 1
1 1 0 1 0 0 0 1
1 1 1 х х х 0 0 0 0 0
шаблона в ОЗУ ЗГ и шаблоном символа (для символов 5x7 точек).
Функции загрузки шаблона символа в ОЗУ ЗГ и записи байта в ОЗУ данных или ОЗУ ЗГ приведены в листинге. Вывод данных осуществляется по 4-битовой линии.
Листинг
загрузка шаблона символа в знакогенератор cg_kod — код символа от 0 до 7 buf — адрес буфера из 7 байтов, описывающих шаблон символа сверху вниз *******************************************/ void define_char( char cg_kod, char *buf )
{
int i;
//установка адреса в знакогенераторе lcdout( ( cg_kod >> 1 ) I 4 ); lcdout( ( cg_kod & 1 ) << 3 );
//запись шаблона for( i = 0; i < 7; i++ ) out_char_lcd( *buf++ ); out_char_lcd(0);
}
вывод символа на LCD-дисплей или в ОЗУ ЗГ ch — символ
*******************************************/ out_char_lcd( char ch )
{
lcdout(((ch & 0xf0) >> 4) I 0x10); //старшая тетрада lcdout((ch & 0x0f) I 0x10); //младшая тетрада
}
Функцию lcdout и все другие необходимые функции можно взять в исходном тексте программы управления дисплеем, приведенном на дискете ПО MicroPC. Добавление функции динамической перекодировки букв русского алфавита в текст резидентной программы управления дисплеем позволяет русифицировать ЖКИ-панели серии LCD.
Предприятие «Гражданская защита» использует в своих разработках программноаппаратные комплексы на базе контроллеров серии MicroPC фирмы Octagon Systems со встроенной системой реального времени QNX, эффективно работающие в системах контроля и управления технологическими процессами. Описанный подход позволил создать для них операторские консоли с понятным и удобным интерфейсом.