Алгоритм матричной клавиатуры
Для реализации взаимодействия пользователя с микропроцессорной системой используют различные устройства ввода-вывода информации, например, кнопка, осуществляющая размыкание-замыкание контакта при нажатии. Недостаток использования такого подключения в том, что для подключения каждой кнопки требуется отдельная линия параллельного порта.
Для увеличения числа кнопок и уменьшения используемых линий ввода-вывода используют матричную клавиатуру, которая представляет собой матрицу кнопок, организованных в ряды и столбцы.
Программа микроконтроллера начинает работать при включении питания устройства и завершает работу, когда питание выключается. Для этого в программе должен быть бесконечный цикл, в теле которого происходит постоянный опрос клавиатуры. Опрос клавиатуры заключается в последовательном сканировании каждого столбца, для этого на соответствующую линию порта вывода подается логический ноль, на остальных столбцах должен быть высокий уровень, после чего с порта ввода, к которому подключены строки, считывается код.
Подключение матричной клавиатуры к микроконтроллеру 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 и использовать ее в дальнейшем при написании кода.
Таким образом, матричные клавиатуры - метод, позволяющий очень надёжно и довольно легко работать с большим количеством кнопок, задействуя при этом минимальное число выводов микроконтроллера. Благодаря большому разнообразию видов, форм, цветов и размеров, можно найти подходящую для своего проекта клавиатуру.