Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мой отчет2,2.doc
Скачиваний:
6
Добавлен:
21.09.2019
Размер:
74.24 Кб
Скачать

Федеральное агентство по образованию

ГОУ ВПО УГТУ-УПИ

Кафедра «Физические методы и приборы контроля качества»

Отчет по лабораторной работе №2 (часть 2)

Программирование периферийных устройств, доступных через регистры ПЛИС

Преподаватель: Моисейкин Е.В.

Студентка: Козловских Е.С.

гр. Фт-44061

Екатеринбург 2007

Задание 3. Опрос матричной клавиатуры.

Открыть новый проект, набрать подпрограмму GETKEY, составить головную программу для опроса клавиатуры с помощью подпрограммы GETKEY и вывода кода нажатой клавиши на светодиодные индикаторы. Составить таблицу кодов клавиатуры.

При выполнении указанных выше действий была получена следующая программа:

org 02000h

dpp data 84h

KB xdata 00h ; адрес регистра клавиатуры

sv xdata 07h

prog:

call getkey ; опрос клавиатуры с помощью подпрограммы GETKEY

mov r0,#sv ; запись адреса регистра светодиодов в r0

call putbyte ; вывод кода клавиши на линейку светодиодов

jmp prog ; бесконечный цикл из описанных выше действий

getkey:

push psw ; сохраняем psw

mov psw,0h ; выбираем нулевой банк

push 0h ; сохраняем r0

push 1h ; и r1

push b ; а также b

push dpp ; и номер страницы

putbyte:

push dpp ; сохранение номера страницы ВПД

mov dpp,#08d ; выбираем восьмую страницу

movx @r0,A ; записываем байт из аккумулятора по адресу, который хранится в r0

pop dpp ; восстанавливаем номер страницы ВПД

ret ; возврат из подпрограммы

mov dpp,#08h ; переключаемся на восьмую страницу

mov r0,#KB ; адрес регистра клавиатуры – в r0

mov r1,#0 ; счетчик колонок = 0

mov b,#01111111b ; начальное значение – в b

KB_lp:

mov a,b ; записываем начальное значение в a

rl a ; сдвигаем циклически влево чтобы опросить следующую колонку

mov b,a ; сохраняем значение a

movx @r0,a ; вывод значения в регистр клавиатуры

movx a,@r0 ; чтение поля ROW регистра клавиатуры

cpl a ; инверсия полученного значения

anl a,#0f0h ; проверяем старшую тетраду (ROW) на наличие единиц

jnz kb_cod ; если клавиша нажата – переходим к подпрограмме kb_cod

Inc r1 ; иначе увеличиваем счетчик колонок

cjne r1,#4,KB_lp ; если он не равен четырем – продолжаем цикл

mov a,#0ffh ; если клавиша не нажата – возвращаем 0ffh

sjmp kb_end ; завершаем подпрограмму

kb_cod:

mov b,#0

mov c,acc.7

orl c,acc.5

mov b.2,c

mov c,acc.7

orl c,acc.6

mov b.3,c ; сформировали старшие биты кода (2, 3)

mov a,b ; записываем в аккумулятор

add a,r1 ; и добавляем к ним номер колонки – младшие два бита – код готов

kb_end: ; конец подпрограммы – восстанавливаем значения регистров и возвращаемся

pop dpp

pop b

pop 1h

pop 0h

pop psw

ret

end

Вывод: Клавиатура стенда SDK1.1 типа AK1604A-WWB реализована в виде квадратной ма­трицы 4x4. Столбцы и строки сведены в регистр клавиатуры KB. Путем записи в регистр номера колонки кнопок и считывания номера строки нажатой клавиши можно получить ее координаты. В данной программе реализовано преобразование координат в код клавиши с последующим выводом его на линейку светодиодов.

В ходе выполнения программы по линейке светодиодов была составлена таблица кодов клавиш:

Клавиша

Код

1

00h

2

01h

3

02h

A

03h

4

04h

5

05h

6

06h

B

07h

7

08h

8

09h

9

0Ah

C

0Bh

*

0Ch

0

0Dh

#

0Eh

D

0Fh