Ответ: Я бы сделал так (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Assm 20 января 2004 г. 17:43
В ответ на: задача следующая... отправлено Kovrov 20 января 2004 г. 16:24

1) берем 2 порта (например "А" - условно стобцы и "Б" - условно строки) и вешаем на них матрицу.
2) линии этих портов притягивает резюками к земле.
3) порт "А" программируем на вывод - порт "Б" - на ввод.
4) сканируем порт "А" бегущей "1" и читаем состояние порта "Б".
5) как только обнаружим "1" в любом разряде порта "Б", запоминаем столбец матрицы на котором это случилось, меняем направление работы портов и уточняем строку сканированием "1"-й порта "Б".
6) "1" должна пробежать все линии порта "Б" (на случай если какая из клавиш данного столбца матрицы ещё нажата).
7) затем результаты запоминаем во флагах клавиш (64 бита - т.е. 8 байт статуса клавиатуры под это дело).
8) после этого вспоминаем, на каком столбце матрицы остановили сканирование (см. п.5))
9) опять меняем направление работы портов.
10) продолжаем сканирование до последнего столбца.
11) по прерыванию таймера на чинаем просмотр матрицы опять

З.Ы. Ещё стоит потрудиться над программным подавлением дребезга (я бы сделал многократный опрос с онкрементом байта статуса кнопки, если она нажата и декрементом, если она не нажата, и сравнение с порогом). Правда при этом понадобится уже 64 БАЙТА и не бита памяти. Реализация функции автоповтора так же не помешает (естественно для служебный кнопок автоповтор не должен работать).

В результате сего действа на момент окончания сканированияимеем карту состояния матрицы отображённую в байтах статуса. Кстати одним битом в байте статуса можно пожертвовать и использовать его как флаг - признак служебной клавиши. По опыту реализации подобного алгоритма берусь утверждать, что даже 64 хватит для достаточно точного определения состояния самой "лохматой" кнопки.

Пользуйтесь :)

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru