Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kharakhnin / ПОСОБИЕ_Харахнин.doc
Скачиваний:
281
Добавлен:
08.03.2016
Размер:
17.89 Mб
Скачать

5.1.3. Матричный способ подключения клавиатуры

На рис. 31 показан матричный (3 х 3) способ включения клавиатуры. Клавиши включаются на пересечении линий строк и линий столбцов. Линии строк подключены на входы (I0, I1, I2 ) мультиплексора К555KП7. Линии столбцов через резисторы R1, R2 и R3 подключены к источнику питания +5 В. Столбцы также подключены к разрядам порта Р1 и входам логической микросхемы К555ЛИ3 , выполняющей функцию “И”. Выход схемы “И” подключен к входу Р3.2 (INT0) -аппаратному запросу прерывания процессора. Разряды порта Р1.0, Р1.1, Р1.3 подключены к адресным входам мультиплексора K555KП7, а также к выходам счетчика импульсов К555ИЕ2. Счетный вход С0 счетчика подключен к выходу генератора тактовых импульсов, выполненного на микросхеме K555ЛН1.

Рассмотрим работу схемы. Генератор тактовых импульсов вырабатывает импульсы прямоугольной формы и подает их на вход счетчика К555ИЕ2. Счетчик считает импульсы и формирует на своих выходах 1, 2, 4 двоичный код от 000 до 111. При достижении кода 1000 с выхода 8 счетчика подается сигнал сброса последнего в нулевое состояние.

Сигналы с выхода счетчика поступают на адресные входы А0, А1, А2 мультиплексора, в результате строки матрицы клавиш последовательно одна за другой подключаются к общей шине, так как выход К555KП7 подключен к GND. Если ни одна из клавиш не нажата, то строки матрицы не обнуляются и на входе схемы “И” имеют место единичные сигналы, в результате на выходе “И” также наблюдается единичный уровень, и поэтому прерывания в работе МК не наступает.

При нажатии на одну из клавиш соответствующая строка оказывается обнуленной и на входе схемы “И” один из сигналов будет также нулевым, поэтому на вход INT0 МК поступит запрос на прерывание, что приведет к прерыванию в работе процессора. После этого МК должен прочитать содержимое порта Р1 и идентифицировать клавишу. В этой схеме подключения клавиатуры при невысокой частоте генератора (100 Гц) исключается явление “дребезга контакта”.

Рис. 31. Матричный способ подключения клавиатуры

Определим коды клавиш, используя табл. 20.

Таблица 20

Клавиша

P1.7

P1.6

P1.5

P1.4

P1.3

P1.2

P1.1

P1.0

HEX код

SB1

1

1

1

1

0

0

0

0

F0H

SB2

1

1

1

0

1

0

0

0

E8H

SB3

1

1

0

1

1

0

0

0

D8H

SB4

1

1

1

1

0

0

0

1

F1H

SB5

1

1

1

0

1

0

0

1

E9H

SB6

1

1

0

1

1

0

0

1

D9H

SB7

1

1

1

1

0

0

1

0

F2H

SB8

1

1

1

0

1

0

1

0

EAH

SB9

1

1

0

1

1

0

1

0

DAH

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

<1> ORG 0000H

<2> JMP START

<3> ORG 0003H

<4> JMP INT_KLAV; Вектор прерывания от INT0

<5> START: MOV IE,#01 ; Установка прерывания по входу INT0

<6> SETB IT0 ; Вид прерывания по переходу из "1" в "0"

<7> SETB EA ;

<8> MAIN: ; Выполнение основной программы

JMP MAIN ;

<9> INT_KLAV:MOV A,P1; Получение байта состояния клавиатуры

<10> MOV R1,A ; Сохранение состояния клавиатуры в R1

<11> MOV R2,#00h ; Обнуление счетчика номера клавиш

<12> ANL A,#07h ; Выделение битов строк

<13> MOV B,#03h ;Загрузка в В количества столбцов

<14> MUL AB ; Определение номера строки

<15> MOV R2,A ; Сохранить номер строки в R2

<16> MOV A,R1 ; Восстановление состояния клавиатуры в А

<17> RL A ; Установка кода столбца в старшей тетраде

<18> SWAP A ; Код столбца в младшую тетраду

<19> ANL A,#07h; Выделить 3 младших бита кода столбца

<20> STOLB: RRC A ; Определение активного (нулевого) столбца 

<21> JNC DEF_COD ; Если столбец активен, то перейти на определение номера клавиши

<22> INC R2 ;Инкремент счетчика номера клавиш

<23>SJMP STOLB; Продолжить сдвигать до определения активного столбца

<24> DEF_COD:MOV A,R2 ;

<25> ADD A,#01h ; Вычисление номера нажатой клавиши

<26> MOV R2,A

<27> MOV B,#03h ;

<28> MUL AB ; Вычисление адреса

<29>ADR:MOV DPTR,#ADR+1; перехода на подпрограмму

<30> JMP @A+DPTR ; Переход на подпрограмму обработки

<31>JMP SB1;Переход на процедуру обработки при нажатии SB1

<32> JMP SB2 ;Переход на процедуру обработки при нажатии SB2

<33>JMP SB3 ;Переход на процедуру обработки при нажатии SB3

<34> JMP SB4 ;Переход на процедуру обработки при нажатии SB4

<35>JMP SB5;Переход на процедуру обработки при нажатии SB5

<36>JMP SB6 ;Переход на процедуру обработки при нажатии SB6

<37>JMP SB7 ;Переход на процедуру обработки при нажатии SB7

<38>JMP SB8 ;Переход на процедуру обработки при нажатии SB8

<39>JMP SB9 ;Переход на процедуру обработки при нажатии SB9

<40> SB1: ; Выполнение функции при нажатии на клавишу SB1

<41> JMP END_INT ;

<42> SB2: ; Выполнение функции при нажатии на клавишу SB2

<43> JMP END_INT ;

<44> SB3: ; Выполнение функции при нажатии на клавишу SB3

<45> JMP END_INT ;

<46>SB4: ; Выполнение функции при нажатии на клавишу SB4

<47> JMP END_INT ;

<48> SB5: ; Выполнение функции при нажатии на клавишу SB5

<49> JMP END_INT ;

<50> SB6: ; Выполнение функции при нажатии на клавишу SB6

<51> JMP END_INT ;

<52>SB7: ; Выполнение функции при нажатии на клавишу SB7

<53> JMP END_INT ;

<54>SB8: ; Выполнение функции при нажатии на клавишу SB8

<55> JMP END_INT ;

<56>SB9: ; Выполнение функции при нажатии на клавишу SB9

<57> JMP END_INT ;

<58>END_INT: RETI ; Выход из прерывания