Микро-80/Радио 1983-07,08/Дисплейный модуль
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. Автор: Г. ЗЕЛЕНКО, В. ПАНОВ, С. ПОПОВ |
В наше время основным средством общения человека с ЭВМ является дисплей. В предыдущей статье мы рассказали, каким образом дисплей может быть подключен к микро-ЭВМ. При этом под дисплеем мы подразумевали самостоятельное устройство, подчас даже более сложное, чем сама микро-ЭВМ. В этой статье мы опишем дисплейный модуль, который является составной частью нашей микро-ЭВМ и может быть подключен к любому телевизору для отображения информации на его экране в виде символов. Часть функций нашего дисплея будет реализована аппаратно, часть — программно. Разделение функции на технически и программно реализуемые, позволяет значительно упростить конструкцию микропроцессорных устройств.
Основная задача дисплейною модуля — формировать на экране телевизора символы. Делают это засветкой отдельных точек телевизионного растра. Символы на экране расположены на определенных позициях — знакоместах. На рис.1 показан пример формирования символов. Каждое знакоместо занимает на экране 8 строк телевизионного растра, а на каждой строке растра (в пределах одного знакоместа) в зависимости от отображаемого символа может высвечиваться до шести точек. По горизонтали знакоместа расположены вплотную одно к другому, образуя ряды знакомест, которые по вертикали отделены Друг от друга двумя не засвеченными строками растра.
Наш дисплейный модуль позволяет вывести на экран 32 строки символов по 64 символа в каждой, что соответствует примерно одной странице текста с обыкновенной пишущей машинки. Точки в столбцах С6 и строках Р8 каждого знакоместа в отображении алфавитно-цифровых символов не участвуют, поэтому на экране образуются промежутки между символами. В отображении графических символов участвуют все 48 точек знакоместа. На рис.1 в качестве примера таких символов показаны стрелки, направленные вверх и вниз. Набирая мозаику из таких символов, на экране телевизора можно образовывать различные графические изображения.
При работе с дисплеем необходимо как-то помечать на экране то место, куда будет выведен очередной знак. Для этого служит специальный символ — курсор. Обычно для курсора используют символ подчеркивания или же полностью засвеченное знакоместо. Именно так и сделано в нашем дисплее. Если курсор указывает на позицию, не занятую другим символом, то что просто светящийся прямоугольник. если же на этой позиции уже есть какой-либо символ, то он отображается в инверсном виде — в виде черных точек на светлом фоне знакоместа. Ни рис.1 таким образом отображена цифра 2. При выведении нового знака курсор автоматически перемещается на очередное знакоместо.
На рис.2, представлена структурная схема дисплейного модуля. Каждому знакоместу на экране телевизора здесь соответствует одна из 2048 7 — разрядных ячеек ОЗУ страницы модуля. Содержимое всех ячеек ОЗУ страницы считывается в течение развертки каждого кадра телевизионного изображения для постоянного обновления изображения на экране. При этом одновременно считывается информация и из ОЗУ курсора, состоящего из 2048 однобитовых ячеек памяти. Наличие единицы в какой-либо ячейке ОЗУ курсора ведет к тому. что символ из соответствующей ячейки ОЗУ страницы будет отображен на экране в инверсном виде.
ОЗУ страницы и курсора являются частью памяти микро-ЭВМ (они расположены соответственно по адресам E800H-EFFFH и E000H-E7FFH). Микропроцессор может записывать данные (но не считывать) в эти области ОЗУ так же, как и в любые другие. Для вывода символа на экран на определенное знакоместо микропроцессор должен записать его код в соответствующую ячейку ОЗУ страницы. Затем в ОЗУ курсора микропроцессор помещает 1 в ячейку, соответствующую новому положению курсора и стирает ее в предыдущей.
Соответствие между адресами ячеек и положением символа па экране достигнуто тем, что адрес кода символа в ОЗУ страницы и курсора формируется дисплейным модулем в зависимости от текущего положения луча на экране, которое определяется работой генераторов строчной и кадровой разверток телевизора. Синхронизация этих генераторов происходит импульсами, вырабатываемыми синхрогенератором дисплейного модуля. Состояние счетчиков рядов знакомест и знакомест в ряду и определяют адреса соответствующих ячеек памяти ОЗУ страницы и курсора, формируемые дисплейным модулем. Эти адреса, а также адреса с адресной шины микроЭВМ поступают в ОЗУ страницы через мультиплексор, управляемый сигналами дешифраторов ДШ1 н ДШ2. Появление на адресной типе микроЭВМ любого адреса, лежащего между Е000Н и EFFFH, ведет к передаче его на адресные входы ОЗУ страницы или курсора. В любом другом случае на адресные входы поступают коды, формируемые счетчиками дисплейного модуля. Модуляция луча кинескопа (засветка точек на экране) происходит сигналами, поступающими с выхода сдвигового регистра, в который предварительно должен быть занесен код из ППЗУ знакогенератора. Каждому отображаемому символу в ППЗУ знакогенератора соответствует группа из восьми последовательно расположенных ячеек памяти. В них записана информация о том, какие точки восьми строк растра внутри знакоместа необходимо высветить при отображении соответствующего знака. В табл.1 приведено содержимое ППЗУ знакогенератора в текстовом и формате Intel Hex. Данные для прошивки в ПЗУ.
Для примера можно указать, что в ячейках ППЗУ с 390Н по 397Н хранится информация для отображений буквы «Р». Начальный адрес группы ячеек однозначно определен кодом отображаемого символа, поступающим на адресные линии A3-А9 ППЗУ с выхода ОЗУ страницы. На адресные линии А0-А2 поступает код со счетчика строк растра внутри знакоместа, определяющий, из какой ячейки ППЗУ в выбранной группе будет считан код для модуляции луча. В течение развертки одной строки растра этот код остается неизменным, в то время как коды на адресных линиях A3-А9 могут меняться в зависимости от отображаемых символов при достижении лучом каждого нового знакоместа.
Принципиальная электрическая схема дисплейного модуля изображена на рис.3. На элементах D45.1, D45.2 собран тактовый генератор с частотой колебаний 8МГц. Сигнал с выхода тактового генератора, предварительно поделенный счетчиками D37, D38 до частоты 250кГц, поступает на вход двоичного счетчика D39. Через каждые 4мкс на его выходе меняется кодовая комбинация, последовательно принимая 16 значений от 0000 до 1111. При кодовых комбинациях от 0100 до 1111 включительно на выводе 8 элемента D43 будет присутствовать нулевой уровень. Этот сигнал, длительность которого равна 48мкс, разрешает прохождение видеоимпульсов (то есть сигналов, «ответственных» за модуляцию луча через элемент D44. Каждая телевизионная строка длительностью 64мкс делится ни следующие интервалы:
- строчный синхроимпульс — 4мкс,
- запрет прохождения видеоимпульсов — 8мкс,
- разрешение отображения — 48мкс
- снова запрет — 8мкс.
На выходе элемента D46.2 формируются строчные синхроимпульсы, и на выходе элемента D46.4 — полный синхросигнал из строчных и кадровых импульсов. Элементы V1, V2, R6. R7, R8 играют роль смесителя синхросигнала и видеосигнала, сформированных элементами D43 и D44. Сигнал с выхода смесителя может быть подан непосредственно на вход видеоусилителя телевизора черно-белого изображения или через модулятор на его антенный вход. Можно, например, использовать модулятор из статьи в предыдущем номере журнала.
Рассмотрим теперь особенности формирования видеосигнала в дисплейном модуле. Видеосигнал формируется из 6-разрядных кодов, поступающих из ППЗУ (D25) на информационные входы сдвиговых регистров D26 и D27. На тактовые входы сдвиговых регистров поступает сигнал частотой 8МГц, вызывая появление видеосигнала на выходе 8 элемента D27. Этот видеосигнал может быть инвертирован блоком инвертирования изображения на элементах D8.2, D45.5, D45.6. Двоично-десятичный счетчик D41 (на его вход поступает сигнал с частотой строчной развертки 15625Гц с выхода 8 элемента D39 подсчитывает сроки растра ряда знакомест и формирует коды трех младших разрядов адресных входов ППЗУ. Кроме того, на выводе 11 счетчика формируется сигнал запрета модуляции для создания промежутков в две телевизионные строки между рядами знакомест на экране.
На микросхемах D37, D40 выполнен счетчик рядов знакомест с коэффициентом пересчета 32. Отрицательный перепад на выводе 11 микросхемы D40 запускает одновибратор D42, который формирует на выходе (вывод 6) импульс запрета отображении на время обратного хода кадровой развертки. Кадровый синхроимпульс формируется дифференцирующей цепью из сигнала с вывода 1 одновибратора. Резистором R1 устанавливают требуемую длительность импульса гашения обратного хода луча кадровой развертки. На микросхемах D34, D35 выполнен счетчик знакомест в ряду с коэффициентом пересчета 64. Счетчик D33 делит частоту 8МГц на 6 и совместно с микросхемами D36, D31.4, D45.4 формирует сигнал записи данных, поступающих от знакогенератора в сдвиговый регистр. На микросхемах D3-D7, D8.1 собран мультиплексор (2 в 1), который передает в ОЗУ страницы и курсора адрес со счетчиков D34, D35, D37, D40 или адресной шины микро-ЭВМ. На элементах D8.1 и D2.6 собран формирователь сигнала BМ для БИС ОЗУ D9-D16 и D17-D24. Переключение мультиплексора на передачу адресов от адресной шины микро-ЭВМ происходит 110 выходному сигналу дешифраторов состояния адресной шины, выполненных на микросхемах D28-D31.2. Мультиплексор подключает к ОЗУ дисплея типы микро-ЭВМ только в те моменты времени, когда микропроцессор записывает информацию в ячейки памяти по адресам от Е000Н до EFFFH (в ОЗУ страницы или курсора). Таким образом, микропроцессору отдается безусловный приоритет при обращении к памяти ОЗУ страницы и курсора.
ОЗУ страницы выполнено на БИС D9-D15, D17-D23, а ОЗУ курсора — на БИС D16, D24. Формирователи сигнала ЗП для ОЗУ страницы собраны на элементах D31.3, D32.4-D32.6, а для ОЗУ курсора — на D31.1, D32.1-D32.3. Они служат для задержки прихода начала ЗП относительного сигнала ВМ. Для этой же цели включен и конденсатор С5. Входы БИС ОЗУ подключены к соответствующим линиям шины данных микро-ЭВМ. Выходы БИС ОЗУ страницы подключены к семи старшим адресным входам БИС ППЗУ знакогенератора. Выходы БИС ОЗУ курсора управляют блоком инвертирования видеосигнала.
Теперь рассмотрим, каким должно быть программное обеспечение микроЭВМ. обслуживающей такой дисплейный модуль. Для этой цели необходима специальная подпрограмма.
Очевидно, что в любом месте основной программы, где возникает необходимость пронести какие-либо операции с экраном (отобразить символ, переместить курсор, стереть символ), должна стоять команда вызова такой подпрограммы. Перед вызовом подпрограммы необходимо в какой-либо внутренний регистр микропроцессора пли ячейку памяти поместить, соответствующий код для операций с экраном, чтобы подпрограмма обслуживания «знала, что делать».
В табл.2 дано соответствие между символами, отображаемыми на экране, и их кодами, записываемыми в ОЗУ страницы.
Таблица 2.
00 | — | 20 | ПРОБЕЛ | 40 | $ | 60 | Ю |
01 | — | 21 | ! | 41 | A | 61 | А |
02 | — | 22 | " | 42 | В | 62 | Б |
03 | — | 23 | # | 43 | С | 63 | Ц |
04 | — | 24 | $ | 44 | D | 64 | Д |
05 | — | 25 | % | 45 | Е | 65 | Е |
06 | — | 26 | & | 46 | F | 66 | Ф |
07 | — | 27 | ‘ | 47 | G | 67 | T |
08 | <- | 28 | ( | 48 | Н | 68 | X |
09 | — | 29 | ) | 49 | I | 69 | И |
0A | ПС | 2A | * | 4A | J | 6A | Й |
0В | — | 2В | + | 4B | К | 6В | К |
0С | \ | 2C | , | 4C | L | 6C | Л |
0D | BK | 20 | — | 4D | M | 6D | М |
0E | — | 2E | . | 4E | N | 6E | Н |
0F | — | 2F | / | 4F | O | 6F | О |
10 | — | 30 | 0 | 50 | P | 70 | П |
11 | — | 31 | 1 | 51 | Q | 71 | Я |
12 | — | 32 | 2 | 52 | R | 72 | Р |
13 | — | 33 | 3 | 53 | S | 73 | С |
14 | — | 34 | 4 | 54 | T | 74 | Т |
15 | — | 35 | 5 | 55 | U | 75 | У |
16 | — | 36 | 6 | 56 | V | 76 | Ж |
17 | — | 37 | 7 | 57 | W | 77 | В |
18 | -> | 38 | 8 | 58 | X | 78 | Ь |
19 | 39 | 9 | 59 | Y | 79 | Ы | |
1A | 3A | : | 5A | Z | 7A | 3 | |
1В | — | 3В | ; | 5B | Ё | 7В | М |
1C | — | ЗС | < | 5C | \ | 7C | Э |
1D | — | 3D | = | 5D | Ъ | 70 | Щ |
1E | — | ЗЕ | > | 5E | 7E | Ч | |
1F | CTP | 3F | ? | 5F | 7F | - |
Кроме кодов символов, в таблице приведены следующие управляющие коды перемещения курсора:
- ВК — в начало ряда знакомест (аналогичен возврату каретки в пишущей машинке);
- ПС — в начало следующего ряда знакомест (аналогичен переводу строки для пишущей машинки);
- -> — на одно знакоместо вправо;
- <- — влево;
- — вниз;
- — вверх;
- — в левый верхний угол экрана.
Существует также код СТР для стирания содержимого всего экрана с одновременным перемещением курсора в левый верхний угол. Не указанные в таблице коды используют для вывода на экран графических символов. Теперь перечислим функции, возложенные на подпрограмму обслуживания.
Прежде всего программа анализирует, является ли выводимый код управляющим или же это код алфавитно-цифрового символа.
Если это код алфавитно-цифрового символа, то он записывается в ячейку ОЗУ страницы дисплейного модуля. Адрес этой ячейки хранится и двух специально отведенных смежных ячейках памяти ОЗУ микро-ЭВМ. Значение этого адреса, соответствующего текущему положению на экране, будем обозначать далее через ПК (позиция курсора). Первоначально оно равно Е800Н, то есть начальному адресу ОЗУ дисплея. При каждом обращении к подпрограмме вывода это значение будет изменяться в соответствии с новым положением курсора на экране. Таким образом, вывод одного алфавитно-цифрового или графического символа сводится к записи его кода в ОЗУ страницы по адресу, равному ПК, увеличению на 1 содержимого ПК и перемещению 1 в ОЗУ курсора на очередную позицию.
При этом каждый раз проверяется, не достигнут ли конечный адрес ОЗУ дисплея (EFFFH), и если это так, то ПК вновь присваивается значение Е800Н.
Если же код управляющий, то содержимое ОЗУ страницы не меняется, а изменяется только содержимое пары ячеек ПК и происходит перемещение 1 в соответствующую ячейку ОЗУ курсора. Например, при получении подпрограммой управляющего кода «курсор вверх» (19Н) происходят следующие операции: ПК=ПК — ЧС, где ЧС=64 (число символов в строке), если новое значение ПК меньше Е800Н, то выполняется операция ПК=ПК + РП, где РП=800Н (размер памяти дисплейного модуля). Если подпрограммой получен код стирания информации с экрана (1FH), то область памяти от Е800Н до EFFFH заполняется кодом символа «пробел» (20Н), а в ПК заносится число Е800Н.
Перейдем теперь к описанию клавиатуры нашего дисплея. Заметим сразу, что мы стремились максимально упростить схему клавиатуры и сделать ее практически независимой от типа применяемых контактных устройств. Каким же требованиям должна отвечать клавиатура дисплея? Прежде всего она должна формировать коды всех символов, приведенных в табл.2. Кроме того, должна быть предусмотрена зашита от одновременного нажатия на несколько клавиш и дребезга контактов. Все эти действия в нашем случае в основном возложены на программу.
На рис.4 показана принципиальная электрическая схема клавиатуры. Она подключена к микро-ЭВМ с помощью ППА КР580ВВ55. Все три канала ППА настроены для работы в режиме 0, причем канал А — на вывод, а каналы В и С на ввод информации. На микросхемах D2 и D3 собран дешифратор состояния адресной шины формирующий сигнал BМ для ППА. Диоды V1 V8 служат для защиты линий канала А от повреждения при одновременном нажатии на несколько клавиш.
Клавиатура представляет собой матрицу (7х8) нормально разомкнутых контактов и отдельную группу из трех контактов. Контакты замыкаются при нажатии на клавиши клавиатуры. На рис.5, показано расположение клавиш, принятое в большинстве промышленных дисплеев.
В процессе сканирования (опроса) контактов клавиатуры подпрограмма обслуживания последовательно формирует нулевой уровень на каждой из линий порта А. При этом на других семи линиях формируются единичные уровни. Сразу после этого программа обслуживания считывает и анализирует содержимое порта В. Если ни одна из клавиш не нажата, то во всех разрядах порта В будут записаны единицы, так как на соответствующие линии через резисторы R1-R7 подано напряжение 5В. Когда какая-либо клавиша будет нажата, то нулевой уровень с соответствующей линии канала А будет подан на одну из входных линий канала В. При этом необходимо помнить, что даже за самое кратковременное нажатие клавиши оператором микропроцессор способен неоднократно просканировать все контакты. Подпрограмма обслуживания определяет номер нажатой клавиши и формирует соответствующий 7-разрядный код.
При нажатии на каждую из клавиш могут формироваться три различных кода в зависимости от того, была ли одновременно нажата какая-либо из трех дополнительных клавиш модификации кода: РУС, УС и СС. Это позволяет сократить общее число клавиш. Клавиша РУС служит для формирования кодов русских букв, клавиша УС для формирования кодов различных управляющих и графических символов, а клавиша СС — для формирования колов специальных символов. Клавиша РУС должна быть с фиксацией. Клавиши модификации кодов подключены к порту С через RS-триггеры, устраняющие дребезг контактов. Дребезг остальных контактов устраняется программно.
Подпрограммы обслуживания дисплея и клавиатуры входят в основную управляющую программу микро-ЭВМ, которая будет описана в одной из следующих статей.
Г. ЗЕЛЕНКО, В. ПАНОВ, С. ПОПОВ
Отсканировано с журнала Радио № 8 1983 г.
Отредактировано Лесных Ю. И. 1999 г.