Признак формируется методом сдвига содержимого аккумулятора (байта состояния клавиатуры) вправо во флажок С (см. блок 2). Если флажок (см. блок 3) установлен (соответствующая клавиша не нажата), то переход на блок 4, в котором инкрементируется значение скан-кода (содержимое РОН С) и декрементируется число оставшихся циклов сдвига (содержимое РОН В). Начальное значение 8 числа циклов сдвига записывается в РОН В в блоке 1. Этот РОН можно использовать, поскольку его предыдущее содержимое (код выводимый в РС6...РС4) уже не актуально. Это позволяет не задействовать регистровые пары DE и HL. В блоке 5 проверяется все ли сдвиги сделаны? Если все, то выход с флажком С = 1, что можно использовать в качестве признака не нажатой клавиши. Если не все, то переход на новый цикл сдвигов (блок 2). Если клавиша нажата, то следует выход из подпрограммы (см. блок 3) с флажком С = 0, что можно использовать в качестве признака нажатой клавиши. Скан-код при этом содержиться в РОН С.
Блок 3 алгоритма функционирования программы поддержки клавиатуры (см. рис. П7.2) также нуждается в детализации. Алгоритм отображения нажатой клавиши приведен на рис. П7.5.
Рис. П7.5. Алгоритм отображения нажатой клавиши
В блоке 3.1 проверяется тип нажатой клавиши. Если нажата цифровая клавиша, то переменной Address присваивается адрес знакоместа дисплея (Адрес1), в которое выводится цифровая информация (см. блок 3.2). Если нажата командная клавиша, то переменной Address присваивается адрес знакоместа дисплея (Адрес2), в которое выводится командная информация (см. блок 3.5). Номера знакомест задаются преподавателем. Переменная Address может находиться как в РОН, так и в памяти. Значения переменной Address для УОУ "Электроника-580" пренадлежат интервалу 83F8H...83FFH, причем начальный адрес определяет крайнее левое знакоместо, а правый - крайнее правое знакоместо.
Переменная Symbol представляет собой код визуального образа нажатой клавиши. Предполагается, что коды визуального образа всех клавиш хранятся в таблице (начало которой помечено меткой Table) на расстоянии собственного скан-кода от начала таблицы. Это означает, что первым в этой таблице должен находиться код визуального образа клавиши "0", вторым - клавиши "1" и т.д. до последнего кода клавиши "CLR". В блоке 3.3 по скан-коду нажатой клавиши определяется код ее визуального образа, который в блоке 3.4 выводится в соответствующее знакоместо для отображения. Каждый бит кода визуального образа связан с сегментами соответствуюшего индикатора дисплея (знакоместа) следующим образом:
причем, если бит сброшен, то соответствующий сегмент выключен, в противном случае - включен. Нетрудно видеть, что код 3FH, загруженный по одному из адресов 83F8H...83FFH, отобразит на соответствующем индикаторе символ '0'.
П7.4. Улучшение алгоритма функционирования программы поддержки клавиатуры
Анализ рис. П7.3 показывет, что алгоритм полного сканирования клавиатуры может быть упрощен (программа его реализующая будет иметь меньший объем) за счет устранения трехкратного вызова подпрограммы Scan, если организовать циклический вывод кода РС6...РС4. В этом случае тело подпрограммы Scan будет входить в тело цикла и не будет необходимости тратить команды на ее вызов.
Но возникает проблема формирования в теле цикла кодов РС6...РС4, которые в исходном алгоритме появлялись в виде констант. Одним из способов решения этой проблемы является следующий. В инициализирующей части цикла нужно написать
lxi h, 0efffh.
А в теле цикла при формировании нового кода РС6...РС4:
in 2
ori 70h ; PC6 = PC5 = PC4 = 1
ana h ; В первом цикле PC6 = PC5 = 1, PC4 = 0
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.