Основы программирования микроконтроллеров ATMega128 и 68hc908. Китаев Ю.В. - 56 стр.

UptoLike

Составители: 

9.2 НАСТРОЙКА РЕГИСТРОВ СПЕЦИАЛЬНЫХ ФУНКЦИЙ МОДУЛЯ
КЛАВИАТУРЫ
Одним из наиболее распространенных устройств ввода команд и
данных в цифровую систему является клавиатура. В стенде 12-кнопочная
клавиатура (4 ряда по 3 кнопки) подключена к выводам PTA1-PTA7 порта A.
Считывать код можно путем опроса клавиатуры или по запросу прерывания.
Схема подключения выводов клавиатуры к выводам PTA приведена на
рис.2.2.
Линии порта А (PTAi/ KBDi), имеющие альтернативную функцию для
подключения клавиатуры могут индивидуально настраиваться на ввод или
вывод. В отличие от многих других МК, эти линии могут быть
запрограммированы таким образом, что появление нуля или отрицательного
перепада на них вызовет прерывание. Таким образом, появляется
возможность обойтись без периодического сканирования клавиатуры (опроса
или поллинга) и высвободить время, требуемое на опрос для решения других
задач. Этот метод используется в лабораторной работе.
Рис.2.2. Подключение клавиатуры
В этом случае алгоритм определения нажатой клавиши включает
подачу нулей на все столбцы KBD3..1 и записи единиц на входах KBD7..4.
Если не нажата ни одна из клавиш, на всех входах PTA7..4 будет высокий
потенциал (код F). В момент замыкания контактов любой клавиши нулевой
сигнал (перепад 1-->0) поступит на один из входов PTA7..4 и вызовет
прерываниезапрос модуля KBI08” см. таблицу 2.3. В примере нажата
кл.”5”, поэтому на входах PTA7..4 будет зафиксированн код 1101=13. В
обработчике прерывания последовательно подавая единицу на выходы
PTA3..1 зафиксируем момент, когда ноль на входе (в примере PTA5) снова
сменится на единицу. Теперь можно вычислить номер нажатой клавиши по
формуле keynum=col+row*3 (0..11) в таблице key ASCII кодов клавиш (char
key[ ] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '*', '0', '#',''};). В примере номер столбца
col=1 и номер строки row=1, поэтому keynum=4 будет соответствовать
клавише “5” (элементы массивов, в т.ч. key в Си всегда индексированы с
нуля).
56