Алгоритм матричной клавиатуры

Материал из me-robotics wiki

Для реализации взаимодействия пользователя с микропроцессорной системой используют различные устройства ввода-вывода информации, например, кнопка, осуществляющая размыкание-замыкание контакта при нажатии. Недостаток использования такого подключения в том, что для подключения каждой кнопки требуется отдельная линия параллельного порта.

Для увеличения числа кнопок и уменьшения используемых линий ввода-вывода используют матричную клавиатуру, которая представляет собой матрицу кнопок, организованных в ряды и столбцы.

Программа микроконтроллера начинает работать при включении питания устройства и завершает работу, когда питание выключается. Для этого в программе должен быть бесконечный цикл, в теле которого происходит постоянный опрос клавиатуры. Опрос клавиатуры заключается в последовательном сканировании каждого столбца, для этого на соответствующую линию порта вывода подается логический ноль, на остальных столбцах должен быть высокий уровень, после чего с порта ввода, к которому подключены строки, считывается код.

Подключение матричной клавиатуры к микроконтроллеру AVR ATmega32

Подключение матричной клавиатуры к микроконтроллеру 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 и использовать ее в дальнейшем при написании кода.

Таким образом, матричные клавиатуры - метод, позволяющий очень надёжно и довольно легко работать с большим количеством кнопок, задействуя при этом минимальное число выводов микроконтроллера. Благодаря большому разнообразию видов, форм, цветов и размеров, можно найти подходящую для своего проекта клавиатуру.