Смекни!
smekni.com

Методические указания по выполнению курсового проекта для студентов 5 курса специальности 210100 "Управление и информатика в технических системах" (стр. 4 из 9)

· многофункциональные клавиатуры, на основе сенсорных переключателей, дополняемые сменяемыми шильдиками (лицевыми панелями) с соответствующими надписями. Эти клавиатуры при наличии соответствующих программных средств позволяют на одних и тех же аппаратурных средствах реализовать набор разнообразных технологических языков и обеспечить их оперативную замену.

По способам аппаратурной реализации различают два типа клавиатур: кодирующую и не кодирующую. В клавиатурах первого типа схемным путем на выходе формируется код, соответствующий нажатой клавише. Из-за незначительного объема неунифицированной аппаратуры схем преобразования кодов и высокой стоимости , которые резко возрастают с ростом числа знаков, такие клавиатуры в МК-системах применяются редко. Значительно более широкое распространение получили дешевые не кодирующие (матричные) клавиатуры, которые представляют собой простую матрицу двоичных переключателей (требуемой размерности), включенных на пересечении строк и колонок матрицы. Идентификация (кодирование) нажатой клавиши в таких клавиатурах выполняется программой.

10.1.2. Ввод кода нажатой клавиши

Для обслуживания клавиатур в МК-системах используются две

процедуры: опрос состояния клавиатуры и ввод кода нажатой клавиши.

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

Вторая - осуществляет циклический опрос клавиатуры до тех пор пока не будет нажата (а часто и освобождена) клавиша. Будучи встроена в основную программу, вторая процедура блокирует процесс управления объектом на время ожидания нажатия клавиши, а потому обращение к ней осуществляется только при обнаружении нажатой клавиши процедурой опроса состояния клавиатуры.

Процедуру ввода информации с некодирующей матричной клавиатуры удобно рассматривать на примере клавиатуры 4 х 5, включающей 16 цифровых клавиш (0 - F) и 4 управляющих. Структура матрицы клавиатуры аналогична структуре матрицы двоичных датчиков, способ подключения клавиатуры к МК представлен на рис. 4. Линии порта 1 используются для сканирования, а линии порта 2 - для опроса матрицы клавиш. Каждая клавиша в такой матрице имеет свой номер, соответствующий ее местоположению. На цифровые клавиши можно нанести обозначения, соответствующие их кодам (от 0 до F). Коды управляющих клавиш больше 15. Диоды обеспечивают защиту от замыкания между собой сканирующих линий в случае одновременного нажатия более чем одной клавиши.


Рис. 4. Схема подключения клавиатуры 4х5 к микроконтроллеру

Процедура ввода кода нажатой клавиши состоит из последовательности частных процедур (некоторые из них уже были рассмотрены ранее): сканирование матрицы клавиш, устранение дребезга контактов, ожидание освобождения клавиши и идентификация кода нажатой клавиши. Для некоторого типа клавиатур может отсутствовать процедура устранения дребезга контактов (клавиатуры на основе герконов). Процедуру сканирования иногда бывает удобно совместить с процедурой идентификации.

Для программного ввода информации с некодирующих клавиатур характерен один недостаток, а именно - срабатывание по отпусканию клавиши, а не по нажатию. Однако при кратковременных нажатиях клавиш этот эффект не имеет особого значения. Рассмотрим отдельно каждую из перечисленных частных процедур.

10.1.3. Сканирование

Частная процедура сканирования служит для обнаружения нажатой клавиши и последующей ее идентификации. Процедура сводится к поочередному обнулению каждой из линий сканирования и опросу линий возврата. В порт 1 выдается байт сканирования (БС), содержащий 0 только в одном бите. Если на пересечении линии сканирования и линии возврата находится нажатая клавиша, то в соответствующем бите байта возврата (БВ), принимаемого в порт 2, будет находится 0.

Последовательность байтов сканирования представляет собой код “бегущий нуль”; формирование очередного байта сканирования осуществляется путем сдвига его предыдущего значения. Направление сдвига определяет последовательность опроса клавиш. Схема алгоритма процедуры сканирования представлена на рис. 5. Если при полном цикле сканирования не было обнаружено нажатой клавиши, то процедура сканирования повторяется с начала.

Оператор “Есть нажатая клавиша?” может быть реализован двумя способами: наложением маски или сдвигом. Первый способ подробно рассмотрен в типовой процедуре опроса группы импульсных датчиков.

При втором способе клавиши, подключенные к каждой линии сканирования, анализируются последовательно. Если после анализа каждой клавиши осуществлять прибавление единицы к счетчику SCANCODE, то процедуру сканирования можно совместить с процедурой идентификации нажатой клавиши (рис. 6). После выхода из процедуры SCAN в SCANCODE будет находиться код нажатой клавиши. Кроме того, процедура SCAN осуществляет защиту от одновременного нажатия нескольких клавиш.


Рис. 5. Блок-схема процедуры Рис. 6. Анализ наличия клавиши с

сканирования клавиатуры Одновременной ее идентификацией

Порядок анализа клавиш таков, что при одновременном нажатии клавиша с большим кодом игнорируется:

; ВЕРСИЯ ДЛЯ МК48 И МК51

; R4 - СЧЕТЧИК КОДА СКАНИРОВАНИЯ

SCAN: MOV R4,#0 ;СБРОС SCANCODE

MOV R7,#5 ;ЗАГРУЗКА СЧЕТЧИКА СКАНИРОВАНИЯ

MOV R6,#11111110B;ЗАГРУЗКА ИСХОДНОГО

;БАЙТА СКАНИРОВАНИЯ

LOOP : MOV A,R6

OUTL P1,A ;ВЫВОД ТЕКУЩЕГО БАЙТА ;СКАНИРОВАНИЯ

RL A ;СДВИГ БАЙТА СКАНИРОВАНИЯ

MOV R6,A ;СОХРАНЕНИЕ ТЕКУЩЕГО БАЙТА ;СКАНИРОВАНИЯ

IN A,P2 ;ВВОД БАЙТА ВОЗВРАТА

MOV R5,#4 ;ЗАГРУЗКА СЧЕТЧИКА ОПРОСОВ

ROT: RRC A ;СДВИГ БАЙТА ВОЗВРАТА

JNC DBNC ;ВЫХОД ПРИ ОБНАРУЖЕНИИ ПЕРВОЙ ;НАЖАТОЙ КЛАВИШИ

INC R4 ;ИНКРИМЕНТ SCANCODE

DJNZ R5,ROT ;ДЕКРЕМЕНТ СЧЕТЧИКА ;ОПРОСОВ И ЦИКЛ, ЕСЛИ НЕ НУЛЬ

DJNZ R7,LOOP ;ДЕКРЕМЕНТ СЧЕТЧИКА ;СКАНИРОВАНИЯ И ЦИКЛ, ЕСЛИ НЕ НУЛЬ

JMP SCAN ;НАЧАТЬ КАНИРОВАНИЕ С НАЧАЛА

После выхода из процедуры SCAN управление передается частной процедуре устранения дребезга контактов DBNC.

Устранение дребезга контактов. Устранение дребезга контактов при вводе символа с клавиатуры осуществляется, как правило, программной реализацией временной задержки 5-20 мс (в зависимости от механических характеристик клавиатуры):

DBNC : CALL DTLAY ; ЗАДЕРЖКА

Если возможно возникновения дребезга контактов и при освобождении клавиши, то процедуру DBNC необходимо вставить и после процедуры ожидания освобождения клавиши.

Ожидание освобождения клавиши. Для того чтобы при повторном обращении МК к клавиатуре не был введен код той же самой клавиши, вводится процедура ожидания освобождения. После выполнения сканирования активной осталась та линия сканирования, в которой обнаружена нажатая клавиша. Поэтому процедура ожидания освобождения нажатой клавиши сводится к считыванию и анализу байта возврата:

; ВЕРСИЯ ДЛЯ МК48

WAIT: IN A, P2 ;ВВОД БАЙТА ВОЗВРАТА

CPL A ;ИНВЕРСИЯ БАЙТА ВОЗВРАТА

JNZ WAIT ; ЕСЛИ КЛАВИША НАЖАТА, ТО ЖДАТЬ

; ВЕРСИЯ ДЛЯ МК51

WAITOP: MOV A, #0FFH

WAIT: CJNE A,P2, WAIT; ЕСЛИ КЛАВИША НАЖАТА, ;ТО ЖДАТЬ

Процедура WAITOP в том виде, в котором она приведена выше, может быть использована только в системах, защищенных от “залипания” контактов.

Обнаружить залипание контакта можно путем подсчета “неудачных” опросов. Если число неудачных опросов превысило N и клавиша не была освобождена, выдается сообщение оператору о “залипании” контакта. Число N (и соответственно разрядность счетчика) исходя из механических свойств клавиатуры.

Идентификация нажатой клавиши. Каждой клавише клавиатуры должен быть поставлен в соответствие код (ее вес), являющийся функцией номеров линии сканирования ( С ) и линии возврата ( В ), на пересечении которых нажата клавиша. Процедура идентификации нажатой клавиши KEYW может быть совмещена с процедурой сканирования (как в рассмотренном выше примере). Тогда после выхода из процедуры SCAN в регистре SCANCODE будет размещен код нажатой клавиши.

Для сложных клавиатур SCANCODE не всегда удается совместить с истинным весом клавиши. В этом случае необходима дополнительная перекодировка, которая выполняется табличным способом с использованием SCANCODE в качестве указателя.

Процедура KEYW может быть оформлена и как самостоятельная. В этом случае наиболее распространенный способ вычисления веса нажатой клавиши - аналитический в соответствии с выражением W = n x C + B, где n - количество линий возврата. Поэтому процедура KEYW реализуется на основе процедур преобразования унитарного кода в двоичный и вычисления W.

Кроме аналитического существует табличный способ определения кода нажатой клавиши.

Оформление процедуры ввода. Процедура ввода кода клавиши KEYBRD оформляется в виде линейной последовательности рассмотренных выше частных процедур:

KEYBDR: ; ВЕРСИЯ ДЛЯ МК48 И МК51

SCAN: . . . ; СКАНИРОВАНИЕ КЛАВИАТУРЫ

. . .

. . .

DBNC: CALL DELAY ; УСТРАНЕНИЕ ДРЕБЕЗГА ПРИ ;НАЖАТИИ

WAITOP: . . . ;ОЖИДАНИЕ ОСВОБОЖДЕНИЯ ;КЛАВИШИ . . .

. . .

DBNC: CALL DELAY ; УСТРАНЕНИЕ ДРЕБЕЗГА ;КОНТАКТОВ ПРИ ОСВОБОЖДЕНИИ КЛАВИШИ (МОЖЕТ ;ОТСУТСТВОВАТЬ)

KEYW : . . . ; ИДЕНТИФИКАЦИЯ НАЖАТОЙ ;КЛАВИШИ . . . ; (МОЖЕТ ОТСУТСТВОВАТЬ)