小华M4核心工控板-HC32F448-测评02:按键扫描模块
[复制链接]
EVB 配置 2x2 矩阵键盘,为用户提供 4 个按键功能。
什么是键盘扫描控制模块
在51的学习中通常就会接触矩阵按键,矩阵按键扫描的实现方法之一就是逐行扫描法,小华开发板中的矩阵键盘使用的也是逐行扫描法。
在小华中逐行扫描法的实现思路就是对列进行周期性的输出低电平和高阻态,对行设置外部中断,中断触发模式是下降沿触发,内部上拉。行和列有以下的几种可能
- 列输出低电平,按键按下,此时行的电平是电平,会有一个下降沿。
- 列输出低电平,按键未按下,此时行的电平仍然被上拉到高电平。
- 列输出高阻态,按键按下,高阻态相当于断路,等于开关未按下,此时行是高电平。
- 列输出高阻态,按键未按下,行是高电平。
由此只要在行的中断回调函数中判断是哪个列此时发送了低电平就可以判断哪个矩阵中的按键按下。
为什么使用键盘扫描控制模块
按键扫描的思想大大节省了IO口,而按键扫描模块对于硬件部分没有更多的资源节省,主要是简便了软件的编写,节省了更多cpu的资源。软件列轮询放松低电平部分的代码不用占用cpu的资源,由模块独立处理。
小华开发板的键盘扫描控制模块
主控芯片最多支持8列16行的按键扫描,开发板上用了4个按键用以测试按键扫描部分的功能,上图中out代表io口的输出高阻态和低电平的引脚,in代表io口输入的引脚,输出是列,输入是行。
键盘扫描控制模块代码实现流程
初始化行按键,外部中断和上拉,配置外部中断是下降沿并且配置硬件中断滤波(按键消抖),配置NVIC,优先级不应该太高,因为在按键按下时是会一直四等按键松开。
初始化列按键,初始化按键扫描控制模块,清除中断标志状态,然后使能按键扫描外设。
编写中断服务函数,in引脚配置成了下降沿输入,和独立按键不同,如果长按会导致反复进入中断,所以在终端服务函数中需要反复检测按键是否松开。
按键功能放在了回调函数中,因此main函数只要进行初始化的调用即可。
|