电气机械键盘办公技巧教程(自学单片机第二十六篇:矩阵按键)
- 办公技巧
- 2023-09-07 17:30:05
- 0
之前说了端口可以复用,我们既可以通过端口输出,也可以通过端口进行输入。但是不是所有的端口都可以用来如此复用的,实际情况是你无法找到哪么多可以合适使用的复用端口,总不能强制吧?
那有没有另一种方式可以来使得端口数不变,但是设备却增加呢?当然是有的,我们之前十六篇的文章说过,输出时可以通过动态扫描的方式来扩展设备数目。既然输出可以完成,那么反推输入也是可以完成的。前辈们已经为我们铺就了康庄大道,我们顺着走就可以了。
不再赘述如何实现扫描了,我们直接就按键来说明问题吧。
与LED的排布方式相同,我们操作输入也是一样,也采用矩阵的方式来进行。先为一行通电,然后检查哪一个动作,接着再给另一行通电,如此循环,最终把得到的数值作为键值,送到判断语句中,执行相应的操作,输出预定的动作。
首先看下矩阵按键。
这个是我绘制的4*4矩阵按键的电路图,接下来我们会使用这个矩阵来操作按键的扫描。首先当然是说下矩阵按键的规则,我们可以看到,每个按键的两端都连接着两根线,第一行的按键右端连接在了一起,第一列的按键左端连接在了一起,跟之前的LED类似。之前我们称之为点阵,这个也属于点阵。
比如我们查看某一个按键的位置,一行一列就是:h1l1,通过这些坐标我们就可以确定出任意一个唯一的按键位置。三行三列:h3l3,我们把这些开关的引线接入单片机,用P1端口来进行检测。
同时为了检查方便,我们让P0输出一些状态的LED灯。这是我们第一次尝试使用P0,因为P0口的结构原因,使用这个端口时,需要使用上拉电阻作为信号的高电位。实际操作中,这个电阻选择要依据负载LED的工作电流综合确定。我们稍作修改,来说明下实际LED的接线方式,以防有些同学造成错误的理解。上图中的电路仅仅是为了仿真,实际电路这么连接是有可能出现损坏的。
我们实际的电路需要这样连接,至于电阻的大小,可以自己安装选择的二极管型号来确定,上拉电阻选择4.7K就可以,大家都是这么选的。随大流总归是不会出错的。
我们还是先说下按键的扫描,1-4行我们接到了P1.0-3,1-4列我们接到了P1.4-7.假设先扫描列,就是先让P1.0=0,然后扫描看是那一列按键按下了,此时P1.4-7会有一个或多个端口为低电位,这时低电位的io对应的就是开关的位置。
我们先单独写一个一行开关的程序。
然后仿真一下
我们可以两行同时进行吗?显然是不可以的,因为当一列其中一个按下时,其他的都是处于低电位,就无法得知是哪一行按下的了,于是就需要我们一行一行的去扫描,让同一时间只有一行的按键可以接地,这样我们读取到有按键按下时,就把行号也带入其中,记下开关和行号,就可以知道有那个开关按下了,这些开关都有自己的位置,这些位置可以转换成我们用io表示的八位地址,我们称这个为键值,例如一行一列就是当P1.0为0时P1.4也为0,就是0xee(1110 1110),这个0xee就是键值。
我把所有的键值总结了一下,就我这个电路图而言,这十六个键的键值如下。
接下来我们就可以来分析程序了,我们需要先扫描一行,然后顺序进行二三四行,每扫描一行,一旦遇到按键按下,就把键值保存下来,然后继续扫描,直到四行扫描完毕,然后依据键值进行相应的计算来输出。
我们看下程序:
为了效果直观,我们直接对键值进行了输出。
通过仿真我们观测一下仿真电路.
打开仿真后,所有的LED都点亮,因为默认P0是高电位,我们的上拉电阻起的作用。P1口会出现闪烁的低电位信号。此时我们按下二行三列的按键测试下。
显示的键值与我们按下的按键位置是一致的。说明我们的程序是没有问题的,至少理论上如此,为什么这么说呢,因为还要经受住现实测试的考验才行。
矩阵按键,我们在使用中会经常用到,因为可以通过较少的端口,实现较多的开关数量,节省成本,便于控制。
大家可以想下,如果我们这个按键矩阵,使用到实际电路,会出现什么问题?结合我们之前的一些知识。下篇操作中再说。
高考加油呀!
本文由 京廊文化根据互联网搜索查询后整理发布,旨在分享有价值的内容,本站为非营利性网站,不参与任何商业性质行为,文章如有侵权请联系删除,部分文章如未署名作者来源请联系我们及时备注,感谢您的支持。
本文链接: /bangong/32455.html