Тестовый проект опроса матричной клавиатуры
Пример работы алгоритма - https://youtu.be/Szu8I1MT_VA
Матричная клавиатура 3х4.
Микроконтроллер STM32F072. Тактирование от внутреннего источника частотой 48 МГц.
Столбцы заведены на выводы PORTA, выводы сконфигурированы как выход с открытым коллектором с подтяжкой к питанию. Строки заведены на выводы PORTB, выводы сконфигурированы как вход с подтяжкой к питанию.
Первоначальная конфигурация микроконтрллера осуществляется в функции SystemInit в файле system_stm32f0xx.c.
В программе использована операционная система реального времени FreeRTOS
в качестве защиты от дребезга контактов, используется временная задержка опроса, опрос происходит с периодом в 50 мс.
Опрос матрицы осуществляется в задаче FreeRTOS "taskPollMatrix()", во время опроса поочередно сканируются все столбцы путем установки нуля на соответствующем выводе, затем считываются значения выводов заведенных на строки, где ноль означает нажатие соответствующей кнопки, во время опроса также устанавливаются флаги, с помощью которых в дальнейшем определяются состояния короткого/длинного нажатия, и нажатие двух кнопок.
Разбор результатов опроса происходит в задаче FreeRTOS "taskKeyHandle()", которая, в свою очередь, в случае возникновения определенного события, будет вызывать необходимую функцию. В примере, по каждому из событий, загорается на короткое время один из четырех светодиодов отладочной платы.
- короткое нажатие на одну клавишу - красный светодиод
- короткое нажатие на две клавиши - зеленый светодиод
- нажатие и удержание одной клавиши в течении 1 секунды - синий светодиод
- нажатие и удержание двух клавиш в течении 1 секунды - оранжевый светодиод