左右两个电路作用一样,区别是左边CPU的输入端常态为高电位,按下按键时为低电位;右边的常态为低电位,按下按键是高电位。
图中将按键按行列矩阵的方式排列,其中的每一行公用一根行线,每一列公用一根列线。以此图为例,16个按键,按一对一方式连接的话需要16个端口,而按这样的矩阵方式链接只需要8个端口,所需端口数大量减少。按键数Knum=line*row,而端口数Pnum=line+row,其中的line和row分别代表行数和列数。
扫描可以有两种实现的方法,一种是全行全列扫描,一种是逐行全列扫描。
上面的例子其实就是全行全列扫描方式,见流程框图。
其特点是,一个流程就能到是否有按键按下,并能确定按下按检测行列值,检测步骤简单迅速。但作为行列接口的Px,Py必须是双向的,亦即同时具有输入输出功能,单片机的端口基本都能满足。[page]
但如果端口非双向,或按键数量大,端口数紧张需进一步减少端口时,也许就需要别的方式来解决。
由图可以看出,同样按键数,增加一个138译码器之后,CPU所用端口数就减为5了。
Px口的3位只需输出0到7,译码器输出就能得到和前面一样的行扫描信号。这时候的程序处理流程,和上面的略有不同,主要是行的表示上不同。上面是行数的对应位表示对应行,下面的是行数的对应值就是对应行。程序框图如所示。
逐行扫描还有另外一个用处,就是当系统中有需要动态扫描的装置比如LED数码管或点阵时,行扫描线就可以为其提供动态扫描信号,这样也是为了减少端口使用数量,达到信号复用并减少代码量的目的。
除了上面提到的几种按键电路,还有一种按键电路,使用更少的端口数量,如图
该电路同矩阵式按键电路一样,所不同的是行列端口使用的是同一个端口,并且矩阵的一条对角线上按键由二极管代替。如此图所示,
按键数Knum=Pnum*(Pnum-1),其中Pnum就是使用的端口数。
以4个端口数为例,
一对一连接方式只能是4个按键;
不带译码器最多4个按键,
使用2-4译码器或3-8译码器方式最多8个按键
而这种电路可以达到12个按键。此电路程序部分和不带译码器的一样,只是注意对角线上被二极管替代的地方没有按键。
上一篇:FIFO程序设计解析(队列指针)
下一篇:快速排序+二分查找与哈希表
推荐阅读最新更新时间:2024-03-16 14:28