Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Ввод информации с матричной клавиатуры




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

Наиболее широкое распространение получили матричные клавиатуры. Клавиатуры, построенные данным способом, представляют матрицу двоичных переключателей требуемой размерности (рисунок 4.10).

Линии порта P1 используются для выбора одной из строк клавиатуры, а линии порта P2 – для опроса состояний клавиш этой строки. Каждая клавиша в такой матрице имеет свой номер, соответствующий ее местоположению. Диоды, включенные в данную схему, обеспечивают защиту от замыкания между собой строк в случае одновременного нажатия более чем одной клавиши в разных строках и тем самым снижают нагрузку на активный выход порта Р1.

 

Рисунок 4.10 – Схема построения матричной клавиатуры

 

Обслуживание матричной клавиатуры состоит из последовательности процедур:

– сканирования матрицы клавиш;

– устранения дребезга контактов при нажатии клавиши (для некоторого типа клавиатур может отсутствовать);

– ожидания отпускания клавиши;

– устранения дребезга контактов при отпускании клавиши (для некоторого типа клавиатур может отсутствовать);

– идентификации кода нажатой клавиши.

Программа обслуживания клавиатуры может быть реализована следующим образом (листинг 4.15):

 

Листинг 4.15 – Программа обслуживания клавиатуры

; Назначение регистров в программе:
; R0 – счетчик линий (хранит код, посылаемый в линии стробирования)
; R1 – код предыдущего нажатия
; R2 – счетчик повторений ; Программа не отслеживает нажатие нескольких клавиш ; одновременно в разных строках матрицы.
  .ORG 0000H ;Адрес основной программы
  JMP BEGIN ;Переход к основной программе
  .ORG 000BH ;Адрес обработчика прерываний от;таймера T0
  JMP TIMER0 ;Переход к процедуре обработчика;прерываний
; Начало основной программы
BEGIN:    
  MOV IE, #00H ;Запрет всех прерываний
  MOV TMOD, #02H ;Настройка таймера в режим;перезагрузки
  MOV TL0, #FFH ;Инициализация
  MOV TH0, #FFH ;таймера
  MOV R0, #11111110B ;Иницализация счетчика линий
  MOV P1, R0 ;Активация строки
  MOV P2, #FFH ;Настройка порта P2 на ввод
  MOV IE, #82H ;Разрешение прерываний от;таймера
  SETB TR0 ;Разрешение счета таймера
;Цикл ожидания нажатия
WAIT:    
  CJNE A, #FFH, OK ;Если клавиша нажата (А!=FFh),
    ;то переход к обработке нажатия,
    ;иначе переход к ожиданию
  JMP WAIT  
;Обработчик нажатия
;О том, какая комбинация нажата, судится по R0 и A соответственно
OK:    
  ;...  
  MOV A, #FFH  
  JMP WAIT  
;Обработка прерываний от таймера
TIMER0:    
  MOV A, P2 ;Чтение кода из порта P2
  ANL A, #0FH ;Выделение значащих бит 0 – 3
  CJNE A, #0FH, PRESSED ;Если клавиша нажата
    ;(A!=0Fh),
    ;то перейти на метку PRESSED
    ;иначе осуществляем сдвиг;сканирующего нуля
  MOV A, R0 ;Сдвиг нуля в счетчике
  RL A ;линий на одну
  MOV R0, A ;позицию
  CJNE A, #F7H, NO_INIT ;Проверка предельного
    ;положения нуля
  MOV R0, #FEH  
NO_INIT:    
  MOV A, #FFH ;Клавиша не нажата
  RETI ;Возврат в основную программу
;Обработка нажатия клавиши
PRESSED:    
  MOV R1, A; ;Помещаем в R1 код предыдущего;нажатия
;Исключение дребезга
;Если в течение цикла проверки дребезга зафиксирован
;одинаковый код, то он считается истинным
  MOV R2, #20 ;Инициализация счетчика;повторений
BNC_DWN:    
  MOV A, P2 ;Чтение кода из порта P2
  ANL A, #0FH ;Выделение значащих бит 0 – 3
  CJNE A, 01, FLS_STRT ;Если считан другой код
    ;(A!=R1),
    ;то выходим из обработки;нажатия
  DJNZ R2, BNC_DWN ;Реализация цикла проверки
    ;дребезга
  PUSH A ;Помещение в стек считанного;кода
;Ожидание отпускания клавиш с исключением дребезга
;Если в течение цикла ни одна клавиша не нажата,
;то предположение, что все клавиши отпущены, истинно
BNC_UP_ERR:    
  MOV R2, #20 ;Инициализация счетчика;повторений
BNC_UP:    
  MOV A, P2 ;Чтение кода из порта P2
  ANL A, #0FH ;Выделение значащих бит 0 – 3
  CJNE A, #0FH, BNC_UP_ERR ;Если клавиша нажата
    ;(A!=0Fh),
    ;то снова инициализируем счетчик,
    ;иначе исключаем дребезг
  DJNZ R2, BNC_UP ;Реализация цикла проверки
    ;дребезга
  POP A ;Извлечение из стека считанного;кода
  RETI ;Выход из прерывания (в А хранится;считанный код)
;Выход из обработки нажатия, клавиша не нажата
FLS_STRT:    
  MOV A, #FFH  
  RETI  
       

Контрольные вопросы

1 Как настроить порт на ввод данных? Отдельный разряд порта?

2 Что подразумевается под событием для микроконтроллера?

3 Почему при регистрации импульса целесообразно использовать разряды 2 и 3 порта P3.

4 Каким образом можно организовать счет импульсов за интервал времени между двумя событиями?

5 Как организуется счет времени?

6 Чем отличается реальная кнопка от идеальной? Каким образом возможно подавление дребезга? Какой из этих способов предпочтительнее?

7 Как организуется регистрация коротких импульсов?

8 Каков алгоритм обработки матричной клавиатуры? Необходимо ли при этом обработка дребезга?






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных