Всем привет.
Подключил матричную клавиатуру 4х4 к порту B pic18f252. С помощью такого блока
VARr1 = InKey ' Сканировать клавиатуру и присвоить код нажатой клавиши переменной VAR1
DelayMS 20 ' Bключить антидребезговую защиту на 100 мсек
KEY = LookUp VARr1,[1,2,3,"A",4,5,6,"B",7,8,9,"C","*",0,"#","D"] ' Конвертировать содержимое VAR1
все нормально читается.
Сейчас возникла потребность получать данные о нажатии клавиш через прерывание.
Попробовал через такой блок:
RBIE = 1 'разрешено прерывание по изменению уровня сигнала на входах PORTB.4-PORTB.7
Klav_prer:
Context Save
If RBIF =1 Then 'если произошло прерывание по PORTB.4-PORTB.7
KEY=0
KEY=PORTB
EndIf
RBIF =0 'сбросить Флаг внешнего прерывания по PORTB.4-PORTB.7
Context Restore 'возврат из обработчика прерывания
пока ни чего не выходит. Если выводы клавиатуры подключенные к PORTB.0-PORTB.3 повесить на массу,
то нажатие клавиш читается,но естественно только с 4-х кнопок PORTB.4-PORTB.7.
Вопрос. Возможно ли использовать прерывание для работы с матричной клавиатурой?Добавлено (30.04.2018, 14:43)
---------------------------------------------
Прошу прощения за "панику", проблема решилась.
Context Save
If RBIF =1 Then 'если произошло прерывание по PORTB.4-PORTB.7
'--------------------------------------
'//////// Опрос клавиатуры ////////////
'--------------------------------------
VARr1 = InKey ' Сканировать клавиатуру и присвоить код нажатой клавиши переменной VAR1
DelayMS 10 ' Bключить антидребезговую защиту на 100 мсек
KEY = LookUp VARr1,[1,2,3,"A",4,5,6,"B",7,8,9,"C","*",0,"#","D"] ' Конвертировать содержимое VAR1
PORTB = %11110000
EndIf
RBIF =0 'сбросить Флаг внешнего прерывания по PORTB.4-PORTB.7
Context Restore 'возврат из обработчика прерывания