IO口扫键归纳

来源:互联网 发布:网络兼职能信吗 编辑:程序博客网 时间:2024/06/05 03:14

分享快乐!快乐分享!


每次做案子,都要考虑IO口是否足够,一般都用直接IO按键,或者矩阵按键。


其实,除了这2种以外,还有许许多多的按键矩阵方式。站在巨人肩膀上确实感觉良好,现在就把巨人的肩膀记下,免得忘了。


假如有5个IO口,最简单直接的就是IO直接按键。

方法1:


简单粗暴又准确。直接读端口状态,低电平则对应端口按键按下,高电平则无按下。


然而,这种只能5个按键,假如大于5个,就要用到按键矩阵了。


较常使用的按键矩阵是直接用IO口 n×m 去使用


例如,5个IO口,可以是2×3=6个

方法2:



较常用,也较简单,如图中所示,IO4和IO5为输入口,IO1~3为输出口,3个输出口依次输出011,101,110 ,每次输出时读取输入口的状态,即可得到按键状态。其实也是方法1的延伸,把IO口当做地去使用。


一般用到上面2种就够了,但是假如按键要更多,但IO不足,BOSS也不愿换其他IO口更多的芯片呢?


OK,那就把地线也作为输出,把3个输出口作为输入,这样就又多了3个按键可以使用了。需注意的是:原输出口作为输入,需加上拉电阻。


实际上就是之前方法1+方法2,扫键顺序也是一样,先扫直接按键SW11、SW21、SW31,再按矩阵扫键去扫剩余按键。


继续,更多奇思妙想


把按键加到10个!

方法3:


扫键流程:IO1输出0,检测IO2~5;IO2输出0,检测IO3~5;……以此类推。实际上是方法2的延伸。


好吧,继续,又可以拼接在一起了,把方法1和方法3加在一起,就形成了下面的按键图,可以有15个按键!


好啦,扫键方法我也不多说了,跟之前拼接的一样,先方法1,后方法3


方法3空出了一大片,那就再用个方法3不上呗。于是就出现了这个:


OK,20个,爽了吧?其实,一点都不爽,贪心生烦恼。看看,对称的按键,容易出问题。


其实,这跟多键触发的“井”字状况类似,无法分辨出对称按键是哪个按下。解决方法也类似,添加二极管即可

解决方法如下:


OK,问题解决了。


由此还可以引申出25个按键,呃~算了,越多就越麻烦复杂,而且添加的二极管也不少,估计BOSS应该会直接换芯片了,所以这里我就不写了。有兴趣或者有时间,可以看看参考的这篇巨人的文章:

http://www.elecfans.com/dianlutu/187/20150928384941_a.html

0 0
原创粉丝点击