
- •1 Инструкция по технике безопастности
- •2 Методические указания по оформлению отчета к лабораторной работе
- •3 Лабораторная работа №4
- •3.1 Краткие теоретические сведения
- •3.1.1 Опрос двоичного датчика
- •3. 1. 2 Ожидание события
- •3.1.3 Ожидание импульсного сигнала.
- •3.1.4 Выделение и обработка отдельных бит информации
- •3.1.5 Формирование управляющего сигнала
- •3.1.6 Вывод управляющего слова на группу автономных устройств.
- •3. 1. 7 Формирование временной задержки малой длительности
- •3.1.8 Формирование последовательности импульсных сигналов с изменяемой длительностью и скважностью.
- •3.2 Задание на дом.
- •3.3 Контрольные вопросы
- •4 Краткие теоретические сведения
- •4.1 Цифровые индикаторы
- •4.2 Клавиатура
- •4.3 Мультиплексный режим работы цифрового индикатора
- •4.4 Сканирование клавиатуры и программное определение номера нажатой клавиши
- •4.5 Подпрограмма определения кода засветки Второй цифры в номере клавиши
- •4.6 Подпрограмма определения кода засветки первой цифры в номере клавиши
- •Программа, написанная в соответствии с алгоритмом, изображенным на рис.17, имеет вид (табл. 25):
- •4.7 Подпрограмма засветки индикаторов в мультиплексном режиме
- •4.8 Задание для домашней подготовки
- •Порядок выполнения работы
- •6 Контрольные вопросы
- •Литература
- •Содержание
- •2 Методические указания по оформлению отчета к лабораторной работе 1
- •3 Лабораторная работа №4 2
- •4 Лабораторная работа №5 24
4.4 Сканирование клавиатуры и программное определение номера нажатой клавиши
На рис.13 изображена схема клавиатуры микроЭВМ, организованная в виде матрицы 4х6. Будем считать порт РА микросхемы программируемого параллельного интерфейса (ППИ) сканирующим портом, а порт РС - читающим.
За один цикл считываются данные с одного столбца из четырех кнопок. Для простоты рассмотрим только один столбец, т.е. клавиши « 3 », « 7 », « B », « F » (рис.9 приложения). Чтение столбца клавиши представляется собой двухшаговую операцию: запись данных в сканирующий порт и чтение байта данных читающим портом.
Чтобы выбрать определенный столбец клавиш, соответствующий бит сканирующего порта (РА5-РА0) устанавливается в логическую
«1», другие биты остаются равными логическому. « 0 ». Таким образом, чтобы выбрать столбец клавиш « 3 », « 7 », « B », « F » нужно послать в порт РА код 0010 0000 (20H), чтобы выбрать клавиши « 1 », « 5 », « 9 », « D » - - код 0000 1000 (08H) и т.д.
После вывода сканирующего байта в порт РА производится чтение входным портом РС. Наличие нуля во входном байте, считанном портом РС, свидетельствует о том, что нажата клавиша в соответствующем столбце. Номер нажатой клавиши определяется по формуле:
Nклав
= Nст + Nряд
6
где Nст, Nряд - номер столбца и ряда, на пересечении которых находится нажатая клавиша.
В программе сканирования клавиатуры учитывается «дребезг» клавиши, т.е. она программно устраняется. Введена программная задержка на время «дребезга», т.е. чтение читающего порта после нажатия клавиши прекращается на время «дребезга».
Алгоритм определения номера нажатой клавиши приведен на рис.15.
Рисунок 15 – Алгоритм определения номера нажатой клавиши
Программа, написанная в соответствии с алгоритмом, изображенным на рис. 15, имеет вид (табл.23):
Таблица 23
Адрес |
Код |
Метка |
Мнемокод |
Комментарий |
1 |
2 |
3 |
4 |
5 |
0800 |
06 20 |
M1: |
MVI B, 20H |
запись маски сканирования |
0802 |
0E 06 |
|
MVI C, 06H |
счетчик столбцов |
0804 |
16 05 |
M2: |
MVI D, 05H |
счетчик рядов |
0806 |
3E 10 |
|
MVI A, 10H |
засветка |
0808 |
D3 F8 |
|
OUT F8 |
вывод в порт F8 |
080A |
3E 40 |
|
MVI A, 40H |
символа |
080C |
D3 F9 |
|
OUT F9 |
вывод в порт F9 |
080E |
78 |
|
MOV A, B |
вывод маски сканирования |
080F |
D3 F8 |
|
OUT F8 |
в порт F8 |
0811 |
DB FA |
|
IN FA |
чтение состояния клавиш из порта состояния клавиатуры FA |
0813 |
F6 8B |
|
ORI 8BH |
маска 10001011 |
0815 |
0F |
|
RRC |
сдвиг постоянных |
0816 |
0F |
|
RRC |
двух первых единиц |
0817 |
0F |
МЕТ3: |
RRC |
-- |
0818 |
D2 32 08 |
|
JNC МЕТ5 |
если в столбце есть нажатая клавиша, то переход к МЕТ5 |
081B |
15 |
|
DCR D |
последняя клавиша в столбце? |
081C |
C2 17 08 |
|
JNZ МЕТ3 |
если нет, то переход к следующей клавише (МЕТ3) |
081F |
78 |
|
MOV A, B |
иначе изменить маску сканирования |
0820 |
0F |
|
RRC |
для перехода к следующему столбцу |
0821 |
47 |
|
MOV B, A |
хранение маски сканирования |
|
|
|
|
Продолжение таблицы 23 |
1 |
2 |
3 |
4 |
5 |
0822 |
0D |
|
DCR C |
последний столбец? |
0823 |
C2 04 08 |
|
JNZ МЕТ2 |
если нет – переход к следующему (МЕТ2) |
0826 |
C3 00 08 |
|
JMP МЕТ1 |
иначе переход на начало (МЕТ1) |
0829 |
1E 32 |
МЕТ4: |
MVI E, 32H |
запись числа в регистр Е |
082B |
CD 5B 03 |
|
CALL DELAY |
подпрограмма DELAY - борьба с дребезгом |
082E |
15 |
|
DCR E |
декремент содержимого Е |
082F |
C2 29 08 |
|
JNZ МЕТ4 |
переход на МЕТ 4, если содержимое Е не равно нулю |
0832 |
15 |
МЕТ 5: |
DCR D |
декремент содержимого D |
0833 |
7A |
|
MOV A, D |
содержимое D в аккумулятор |
0834 |
CA 50 08 |
|
JZ МЕТ6 |
если нажата клавиша во 2ом ряду, то переход на МЕТ6 |
0837 |
15 |
|
DCR D |
декремент содержимого D |
0838 |
7A |
|
MOV A, D |
содержимое D в аккумулятор |
0839 |
CA 57 08 |
|
JZ МЕТ7 |
если нажата клавиша в 3ем ряду, то переход на МЕТ7 |
083C |
15 |
|
DCR D |
декремент содержимого D |
083D |
7A |
|
MOV A, D |
содержимое D в аккумулятор |
083E |
CA 50 08 |
|
JZ МЕТ8 |
если нажата клавиша в 1ом ряду, то переход на МЕТ8 |
0841 |
15 |
|
DCR D |
декремент содержимого D |
|
|
|
|
|
|
|
|
|
Продолжение таблицы 23 |
1 |
2 |
3 |
4 |
5 |
0842 |
15 |
|
DCR D |
декремент содержимого D |
0843 |
7A |
|
MOV A, D |
содержимое D в аккумулятор |
0844 |
CA 65 08 |
|
JZ МЕТ9 |
если нажата клавиша в 4ом ряду, то переход на МЕТ9 |
0850 |
3E 06 |
МЕТ6 |
MVI A, 06H |
вычисление номера клавиши |
0852 |
81 |
|
ADD C |
во 2ом ряду |
0853 |
27 |
|
DAA |
и |
0854 |
C3 70 08 |
|
JMP IND 1 |
переход к подпрограмме определения кода нажатой клавиши |
0857 |
3E 12 |
МЕТ7 |
MVI A, 06H |
вычисление номера клавиши |
0859 |
81 |
|
ADD C |
во 3ем ряду |
085A |
27 |
|
DAA |
и |
085B |
C3 70 08 |
|
JMP IND 1 |
переход к подпрограмме определения кода нажатой клавиши |
085Е |
3E 00 |
МЕТ8 |
MVI A, 00H |
вычисление номера клавиши |
0860 |
81 |
|
ADD C |
в 1ом ряду |
0861 |
27 |
|
DAA |
и |
0862 |
C3 70 08 |
|
JMP IND 1 |
переход к подпрограмме определения кода нажатой клавиши |
0865 |
3E 18 |
МЕТ9 |
MVI A, 06H |
вычисление номера клавиши |
0867 |
81 |
|
ADD C |
во 4ом ряду |
0868 |
27 |
|
DAA |
и |
0869 |
C3 70 08 |
|
JMP IND 1 |
переход к подпрограмме определения кода нажатой клавиши |
086C |
FF |
END: |
RST |
возврат в “монитор” |