const char keypad[4][4] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
void checkKeys() {
for (uint8_t r = 0; r < 4; r++) {
// Устанавливаем текущую строку в низкий уровень
PORTD &= ~(1 << (r + 4));
for (uint8_t c = 0; c < 4; c++) {
// Проверяем состояние кнопки
if (!(PINB & (1 << c))) {
// Ждем, пока кнопка не будет отпущена
while (!(PINB & (1 << c)));
// Восстанавливаем состояние строки
PORTD |= (1 << (r + 4));
// Выводим нажатую клавишу
Serial.println(keypad[r][c]);
return; // Выходим из функции после нажатия кнопки
}
}
// Восстанавливаем состояние строки
PORTD |= (1 << (r + 4));
}
}
int main() {
init();
Serial.begin(9600);
// Настраиваем порты
DDRD |= 0b11110000;
PORTD |= 0b11110000; // Устанавливаем строки в высокий уровень
PORTB |= 0b00001111; // Включаем подтягивающие резисторы на столбцах
while (true) {
checkKeys();
}
}