Вот вам мой модуль для обслуживания клавиатуры 2х3 с автоповтором.
Отличия от того, что я описывал выше.
- сканирующие линии имеют активный высокий (а не низкий) уровень, соответственно стоят pull-down, а не pull-up резисторы как на сканирующих, так и на считывающих линиях;
- матрица не 2х4, а 2х3, но легко расширяется до 2Х4 изменением одной константы MAX_KEY_NUM. Если же нужно 4Х4, то кроме этого нужно некоторые переменные объявить как unsigned int, а не unsigned char;
- допускает одновременное нажатие нескольких кнопок. При этом коды нажатых кнопок помещаются в буфер в порядке их сканирования;
- допускается нажатие любой кнопки при уже нажатой одной или нескольких;
- имеет автоповтор последней нажатой клавиши с задержкой и паузой.
Еще раз обращаю внимание, что пример для MSP430, а не AVR. Сканирующие линии эмулируют сигналы с активной единицей и Z-состоянием в качестве лог.нуля.
P.S. Функция сканирования вызывается из прерывания с периодом 10ms.
Прикрепленные файлы
kbd.zip ( 2.56 килобайт )
Кол-во скачиваний: 225