Алгоритм матричной клавиатуры
Для реализации взаимодействия пользователя с микропроцессорной системой используют различные устройства ввода-вывода информации, например, кнопка, осуществляющая размыкание-замыкание контакта при нажатии. Недостаток использования такого подключения в том, что для подключения каждой кнопки требуется отдельная линия параллельного порта.
Для увеличения числа кнопок и уменьшения используемых линий ввода-вывода используют матричную клавиатуру, которая представляет собой матрицу кнопок, организованных в ряды и столбцы.
Программа микроконтроллера начинает работать при включении питания устройства и завершает работу, когда питание выключается. Для этого в программе должен быть бесконечный цикл, в теле которого происходит постоянный опрос клавиатуры. Опрос клавиатуры заключается в последовательном сканировании каждого столбца, для этого на соответствующую линию порта вывода подается логический ноль, на остальных столбцах должен быть высокий уровень, после чего с порта ввода, к которому подключены строки, считывается код.
Подключение матричной клавиатуры к микроконтроллеру AVR ATmega32
Матричная клавиатура – несколько, в нашем случае девять, взаимосвязанных кнопок, которые подключаются к выводам микроконтроллера таким образом: к первой ножке подключается первая строка, ко второй – вторая и так далее. Столбцы так же подключаются к свободным ножкам порта.
Рассмотрим код программы, в которой определяется номер нажатой клавиши:
unsigned char key_tab[3] = {0b11111110, // массив столбцов
0b11111101, // (место, где стоит 0,
0b11111011, // соответствующий
}; // столбец-1,2,3)
unsigned char scan_key(void) // Функция опроса клавиатуры
{
unsigned char key_value = 0; // в данной функции определяется
unsigned char i; // номер нажатой клавиши
for(i = 0;i < 3;i++) // и присваивается
{ // переменной key_value.
PORTD = key_tab[i]; // В PIND будет находиться
switch (PIND & 0b11111000) // двоичное число,
{ // в котором на месте нулей
case 0b11110000: // будет номер строки
key_value = 1 + i * 3; // и столбца нажатой клавиши.
return (key_value);
case 0b11101000:
key_value = 2 + i * 3;
return (key_value);
case 0b11011000:
key_value = 3 + i * 3;
return (key_value);
default:
break;
}
}
return (key_value);
}
После выполнения этой части кода можно получить номер нажатой кнопки в переменной key_value и использовать ее в дальнейшем при написании кода.
Таким образом, матричные клавиатуры - метод, позволяющий очень надёжно и довольно легко работать с большим количеством кнопок, задействуя при этом минимальное число выводов микроконтроллера. Благодаря большому разнообразию видов, форм, цветов и размеров, можно найти подходящую для своего проекта клавиатуру.