Здесь используется опрос клавиатуры «змейкой», то есть подается логический 0 на строку клавиатуры и проверяются по очереди состояния линий ввода микроконтроллера подключенных к столбцам клавиатуры, если логический 0 не обнаружен ни на одном столбце, то переходят к проверке следующей строки клавиатуры. Как только обнаружено нажатие кнопки, по смещению (счетчику) key_code в таблице sym_set находится код нажатой кнопки. Таблица используется для настройки программы на конкретный вид клавиатуры (размещение на ней кнопок).
Защита от автоповтора (при длительном удержании кнопки) и от дребезга, реализована на основе стека нажатых кнопок (при прощлых опросах клавиатуры) key1, key2 и key_code. Если при опросе клавиатуры нажатие кнопки не обнаружено, то код кнопки key_code=12. При каждом опросе клавиатуры, перед выходом из подпрограммы keyboard, проводится процедура key1=key2, key2=key_code. Кнопка считается нажатой, если key1=12 и key2 не=12 и key2=key_code.
Существует так же матричный метод опроса клавиатуры, его алгоритм описан в документе AVR240: 4×4 Keypad-Wake up on Keypress на сайте www.atmel.com . Описанный выше алгоритм при большем времени выполнения по сравнению с матричным опросом требует меньшего количества команд на реализацию и работает при фиксированной конфигурации порта: младшая тетрада порта — выход, старшая — вход.
На схеме не показана схема сброса (обычная интегрирующая цепочка см. описание МК) и питание микроконтроллера.
keyboard.mic — сама программа (в кодировке win-txt)
Схема электрическая:
Алгоритм работы:
keyboard.mic — сама программа (в кодировке win-txt)
Схема электрическая:
Алгоритм работы:
От редакции (Sanchos):
Если это использовать в том виде в котором нарисовано, то никаких проблем не будет.
Если вы не уверены в том, что не будут нажаты одновременно две и более кнопок или если этот же порт используется ещё и для индикации то в каждую линию матрици нужно припаять резюк сопротивлением 220 — 510 ом (они ограничат сквозные токи).
Не опрашивайте кнопки слишком часто — появляется неустойчивость к дребезгу контактов.
Источник: sanchos-iz.narod.ru