Статична матрична клавіатура
Матричні клавіатури, на зразок показаної 12-клавішної, зазвичай опитують «динамічно», за допомогою сканування.
Процес опитування складається з послідовного видавання імпульсів на лінії, наприклад, COL0…COL2 і зчитування стану ліній ROW0…ROW3 та, при виявленні натискання, комбінування номерів чи масок цих ліній у скан-код клавіші. Це вимагає наче небагато команд і часу (та енергії) на їх виконання, але…
Якщо у пристрої вже й так використовується динамічна індикація, то таке опитування клавіатури може використовувати той же цикл і ті ж лінії сканування, що використовуються для індикатора, тому опитування клавіатури практично не вимагає додаткових ресурсів.
При необхідності знати стан кожного ключа незалежно, допускаючи довільне натискання багатьох клавіш, то без сканування не обійтися — але тоді послідовно з кожним ключем потрібно встановити діод.
В інших випадках можна обійтися без сканування, «статично», просто зчитуючи стан входів. Нічого не дається надурняк, тут якась кількість внутрішніх ресурсів мікроконтролера розмінюється на декілька транзисторів-резисторів (втім, сумарною вартістю меншою, ніж одна кнопка). Чи вартий того такий розмін, чи ні — вирішувати розробнику, але знати про таку можливість точно варто.
Тут при натисканні однієї клавіші одна з ліній ROW0…ROW3 підключається до бази транзистора, на ній встановлюється невелика напруга, яка зчитується як «0». Транзистор відкривається і подає сигнал «0» на відповідну лінію COL0…COL2. Таким чином, на лініях ROW0…ROW3, COL0…COL2 відразу формується код цієї клавіші.
Використання для опитування клавіатури лише входів дає перевагу у тому разі, коли через нестачу виводів мікроконтролера або необхідність віднесення клавіатури на деяку відстань. У такому випадку часто використовують регістри зсуву і послідовний інтерфейс SPI, але сканування клавіатури потребувало б двох регістрів — перетворювач послідовного коду у паралельний для сканування ліній COL та перетворювач паралельного коду у послідовний для зчитування ліній ROW. При статичному зчитуванні достатньо одного регістра:
Вільний восьмий вхід можна використати для додаткової клавіші-модифікатора або для розширення клавіатури до 15 (3*5) або 16 (4*4) клавіш.
p.s. Швидше за все, зараз у подібній ситуації сам я замість регістра зсуву використав би «аналогове» підключення матриці та якийсь малоногий мікроконтролер, який передавав би код натискання/відпускання лише при зміні стану клавіатури. Але нещодавно наштовхнувся на одному з форумів на свіже обговорення підключення через регістр восьми кнопок, от і згадалося. Вирішив зафіксувати.