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
- IO口扫键归纳
- IO流归纳总结
- java之IO流归纳整理
- 归纳
- 对Java.io中一些类的归纳,层次结构图
- 【转载】J2SE知识点归纳笔记(七)---Java IO Part 2:获取键盘输入与IO流体系图
- JAVA初入门——基本类型,类,构造函数,异常处理,IO,集合问题归纳
- linux设备驱动归纳总结(三):5.阻塞型IO实现
- linux设备驱动归纳总结(五):2.操作硬件——IO内存
- linux设备驱动归纳总结(五):3.IO静态映射
- linux设备驱动归纳总结(三):.阻塞型IO实现
- linux设备驱动归纳总结(三):5.阻塞型IO实现
- linux设备驱动归纳总结(五):2.操作硬件——IO内存
- linux设备驱动归纳总结(五):3.IO静态映射
- linux设备驱动归纳总结(三):5.阻塞型IO实现
- linux设备驱动归纳总结(五):2.操作硬件——IO内存
- linux设备驱动归纳总结(五):3.操作硬件——IO静态映射
- linux设备驱动归纳总结(三):5.阻塞型IO实现
- 【区间dp】hdu5396 Expression
- Android中定时执行任务的3种实现方法
- SVN图标总结及冲突解决
- 循环语句
- Javaweb学习总结(一)--数据库连接池
- IO口扫键归纳
- 面试常考题:不调用库函数,怎样实现字符串操作函数?
- 【iOS开发】canOpenURL: failed for URL
- 程序员必备面试题
- 动态内存管理
- oracle表重命名
- 单链表常见面试题
- C++的特性——继承
- Oracle常用函数:nvl/nullif/case when/wm_concat/replace