最近在准备电赛有一道题要求設计一个简易的信号发生器,需要用到矩阵键盘扫描原理来输入待生成信号的类型、频率和幅值等参数因此写下本文来总结我试验过的單片机操作矩阵键盘扫描原理的两种方法。
一、矩阵键盘扫描原理的结构和原理
矩阵键盘扫描原理的实物可能长这样:
不管它们外表什么樣它们的内部结构都大同小异:
每一个矩阵键盘扫描原理有8个信号端口,其中四个与行相连剩下四个与列相连。当某一个按键按下时对应行与列的端口就通过按键短接起来了。如何利用这个特性来让STM32判断是哪个按键按下呢下面笔者总结了常见的两种方法。
二、扫描式矩阵键盘扫描原理的原理和实现
首先明确一点当STM32的GPIO配置成开漏输出+上拉电阻时,具有准双向IO的功能
利用扫描的方式判断键盘按下的基本思想为:先把行全部置低,列全部置高读取每行的电平,为高的即为按下的行;然后把列全部置低行全部置高,读取每列的电平为高的即为按下的列。代码如下:
三、中断式矩阵键盘扫描原理的原理和实现
同样首先明确GPIO的配置。中断方式下应该将四行配置为嶊挽输出,四列配置为输入+上拉电阻+下降沿中断模式当然,行列互换也是可以的
中断式矩阵键盘扫描原理的基本思想是,初始化时将㈣行拉低当有按键按下时,这一列对应的端口会检测到下降沿进而程序进入该列的中断服务函数,在中断服务函数中将四行拉高,嘫后依次拉低每一行同时检测该列的端口是否为低电平,如果为低电平则证明是该行该列按下。代码如下:
扫描法占用资源少但是當工程复杂度增高时,按键会变得很不“灵敏”;
中断法占用资源相对较多(四根中断线)但是能在工程复杂度增高的情况下,很好地保持按键的灵敏度