矩阵键盘扫描原理adt88—3,有没有升级的二代产品?

      当一个按键两端分别接一个IO口┅个IO口置高电平另一个置低电平,当按下按键时高电平IO口电平被拉低另一端还是为低电平,这时检测IO口值就是两个低电平

      把上述方法應用到矩阵键盘扫描原理上,如果把4个行引脚接P2前4位IO口(P2.0~P2.3)都置低电平,把4个列引脚接P2后4位IO口(P2.4~P2.7)都置高电平,这时P2=0xf0, 如果按下第一列第一行按鍵那么第一列的IO口电平变低,其他IO口电平不变这时保存P2值,确定了列值

      同样,用这种方法确定行值就是在保存列值后把4个行引脚置高电平,4个列引脚置低电平P2=0x0f(这时按键还处于按下的状态),确定行值最后把列值行值进行或运算得出一个保存了行值和列值的数(每个按键都有一个对应的数值)

}

最近在准备电赛有一道题要求設计一个简易的信号发生器,需要用到矩阵键盘扫描原理来输入待生成信号的类型、频率和幅值等参数因此写下本文来总结我试验过的單片机操作矩阵键盘扫描原理的两种方法。

一、矩阵键盘扫描原理的结构和原理

矩阵键盘扫描原理的实物可能长这样:
不管它们外表什么樣它们的内部结构都大同小异:

每一个矩阵键盘扫描原理有8个信号端口,其中四个与行相连剩下四个与列相连。当某一个按键按下时对应行与列的端口就通过按键短接起来了。如何利用这个特性来让STM32判断是哪个按键按下呢下面笔者总结了常见的两种方法。

二、扫描式矩阵键盘扫描原理的原理和实现

首先明确一点当STM32的GPIO配置成开漏输出+上拉电阻时,具有准双向IO的功能

利用扫描的方式判断键盘按下的基本思想为:先把行全部置低,列全部置高读取每行的电平,为高的即为按下的行;然后把列全部置低行全部置高,读取每列的电平为高的即为按下的列。代码如下:


 
 
 
 
 
 
 

三、中断式矩阵键盘扫描原理的原理和实现

同样首先明确GPIO的配置。中断方式下应该将四行配置为嶊挽输出,四列配置为输入+上拉电阻+下降沿中断模式当然,行列互换也是可以的

中断式矩阵键盘扫描原理的基本思想是,初始化时将㈣行拉低当有按键按下时,这一列对应的端口会检测到下降沿进而程序进入该列的中断服务函数,在中断服务函数中将四行拉高,嘫后依次拉低每一行同时检测该列的端口是否为低电平,如果为低电平则证明是该行该列按下。代码如下:


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

扫描法占用资源少但是當工程复杂度增高时,按键会变得很不“灵敏”;
中断法占用资源相对较多(四根中断线)但是能在工程复杂度增高的情况下,很好地保持按键的灵敏度

}

格式:PDF ? 页数:8页 ? 上传日期: 05:53:08 ? 浏览次数:39 ? ? 900积分 ? ? 用稻壳阅读器打开

全文阅读已结束如果下载本文需要使用

该用户还上传了这些文档

}

我要回帖

更多关于 adt矩阵说明书 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信