Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет_5.2.docx
Скачиваний:
1
Добавлен:
16.07.2019
Размер:
1.34 Mб
Скачать
    1. Определение номера нажатой клавиши

По заданию необходимо модифицировать программу «опроса клавиатуры», дополнив ее модулем формирующим номер нажатой клавиши.

Номер нажатой клавиши сохраняться в ячейке памяти 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. Нажаты две клавиши.

    1. Вывод на экран жки номера нажатой клавиши

Необходимо дополнить программу из предыдущего задания модулем, выводящим на экран ЖКИ номер нажатой клавиши. Для непосредственного отображения текста на экране нужно использовать программу из первого задания.

Для вывода на экран номера нажатой клавиши следует преобразовать её номер в 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 >

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]