
- •Отчёт по лабораторной работе
- •Цель работы:
- •Программа работы:
- •Теоретические сведения:
- •Выполнение заданий
- •Вывод на экран жки двухстрочного текста
- •Опрос клавиатуры
- •Определение номера нажатой клавиши
- •Вывод на экран жки номера нажатой клавиши
- •Аналого-цифровое преобразование
- •Аналого-цифровое преобразование и демонстрация скорости обработки изменяющегося сигнала
Определение номера нажатой клавиши
По заданию необходимо модифицировать программу «опроса клавиатуры», дополнив ее модулем формирующим номер нажатой клавиши.
Номер нажатой клавиши сохраняться в ячейке памяти 34h.
В случае если не нажата ни одна из клавиш, в ячейку записывается число 00h, а если нажато больше одной клавиши, то записывается число FFh.
Схема программы:
Рис.8. Схема программы
Текст программы:
org 8400h
include asms\4081_4\Bs\5.2\2.asm
mov r1, #34h ; выходное состояние клавиатуры
mov r0, #30h ; карта памяти клавиатуры
; определние нажатой клавиши
cols: cjne @r0, #70h, cols1 ; клавиша нажата из крайнего левого столбца?
mov a,#01h
jmp end
cols1: cjne @r0, #b0h, cols2 ; клавиша нажата из среднего левого столбца?
mov a,#02h
jmp end
cols2: cjne @r0, #d0h, cols3 ; клавиша нажата из среднего правого столбца?
mov a,#03h
jmp end
cols3: cjne @r0, #e0h, cols0 ; клавиша нажата из правого столбца?
mov a,#04h
jmp end
end: mov r3,a ; сохранение номера столбца
mov a,r0
subb a,#30h ; получение номера строки
rl a
rl a ; домножаем на 4
add a,r3 ; прибавление номера столбца
mov @r1, a ; запись номера клавиши
ret
cols0: cjne @r0, #f0h,colsF ; клавиша не нажата
n1: inc r0
cjne r0,#34h,cols ; если опрос не закончен, то переходим в его начало
mov a,#00h
mov @r1, a
jmp endend
colsF: mov a,#ffh ; нажато несколько клавиш
mov @r1, a
endend: ret
Описание программы:
Программа 2.asm реализует опрос клавиатуры и формирует карту памяти, которую записывает в ячейки 30h..33h. Эту программа подключается к модулю формирования номера нажатой клавиши.
Далее в цикле и условных переходах определяется номер столбца, в котором была нажата клавиша (не нажата ни одна, нажато несколько).
Зная номер столбца и номер строки определяется номер нажатой клавиши по формуле:
Номер = Номер строки * 4 + Номер столбца
В ходе тестирования программы были проверены случаи нажатия одной клавиши, двух клавиш, а так же случай когда не было нажато ни одной из клавиш.
Результаты выполнения программ наблюдались в «Окне памяти» в ячейке 34h.
Из приведённых ниже рисунков (рисунки 5 – 7) видно, что программа работает корректно.
Вариант 1. Не нажато ни одной клавиши
Рис.9. На клавиатуре нажато ни одной клавиши.
Вариант 2. Нажата четвёртая клавиша:
Рис.10. Нажата четвёртая клавиша.
Вариант 3. Нажато две клавиши (третья и седьмая):
Рис.11. Нажаты две клавиши.
Вывод на экран жки номера нажатой клавиши
Необходимо дополнить программу из предыдущего задания модулем, выводящим на экран ЖКИ номер нажатой клавиши. Для непосредственного отображения текста на экране нужно использовать программу из первого задания.
Для вывода на экран номера нажатой клавиши следует преобразовать её номер в HEX-код.
В результате выполнения программы на экране ЖКИ будет отображена следующая надпись:
Number of button Nx
где Nx – номер нажатой клавиши.
Схема программы:
Рис.12. Схема программы
Рис.13. Схема программы klav_jki
Текст программы:
klav_jki_main.asm
org 8400h
include asms\4081_4\Bs\5.2\2.asm
include asms\4081_4\Bs\5.2\klav_jki.asm
include asms\4081_4\Bs\5.2\klav_mon.asm
ret
klav_jki.asm
mov r1, #34h
mov r0, #30h
mov dptr,#FFE2h ; адрес внешней памяти для записи номера нажатой клавиши
cols: cjne @r0, #70h, cols1
mov a,#00h
jmp end
cols1: cjne @r0, #b0h,cols2
mov a,#01h
jmp end
cols2: cjne @r0, #d0h, cols3
mov a,#02h
jmp end
cols3: cjne @r0, #e0h,cols0
mov a,#03h
jmp end
end: mov r3,a
mov a,r0
subb a,#30h
rl a
rl a
add a,r3
mov r3,a
; Получение HEX-кода для вывода на экран ЖКИ
clr c ; очищаем флаг С
subb a,#0ah
jc l30 ; проверка номера нажатой клавиши
; если он меньше 10, то прибавляем 30 для получения HEX-кода
; если 10 или больше, то прибавляем 37
l40: mov a,r3
add a,#37h
jmp l
l30: mov a,r3
add a,#30h
jmp l
; записываем HEX-код нажатой клавиши по адресу внешней памяти
l: mov @r1, a
movx @dptr, a
jmp endend
; если не нажато ни одной клавиши, то записываем символ «X»
cols0: cjne @r0, #f0h,colsF
n1: inc r0
cjne r0,#34h,cols
mov a,#d5h
mov @r1, a
movx @dptr, a
jmp endend
; если нажато несколько клавиш, то выводим символ «>»
colsF: mov a,#3eh
mov @r1, a
movx @dptr, a
endend: mov a,#ffh
Описание программы:
Данная программа использует алгоритмы предыдущих программ по определению и выводу номера нажатой клавиши.
Отметить следует процесс преобразования номера клавиши в HEX-код.
Если номер нажатой клавиши меньше 10, то к номеру прибавляется 30h и получается символ от 0 до 9.
Если номер 10 и более, то к номеру прибавляется и получается символ от A до F. HEX-коды приведены в таблице 2.
В ходе тестирования программы были проверены разные комбинации нажатых клавиш: одна клавиша, две клавиши и ни одной клавиши. Результаты показывают, что программа работает корректно.
Результаты испытаний и анализ результатов:
Результатами испытания явилось отображение на экране необходимого текста.
Не нажато ни одной клавиши:
Number of button X
Нажата четвертая клавиша:
Number of button 04
Нажато две клавиши:
Number of button >