利用二极管的单向导通性设计多按键扫描,但是占用极少IO口
2016-04-22 11:18
816 查看
今天把手头的罗技手持摇杆拆了,发现里面按键扫描有二极管存在,就想不通了,于是就上网搜索,找到一个关于利用二极管的单向导通性设计多按键扫描,哈哈,学到一招:
我们分析一下图四(未画出,课本上最普通的扫描法):当IO1输出“0”时,按下K11或K11’键都能被IO2检测到,但IO2检测却无法区别K11和K11’键!同理,不管扫哪个IO口,都有两个对称的键不能区分。我们假想,如果能把对称键区分开来,我们就能正常地去判断按键。我们在思考:有没有单向导通性器件?有!见图五!
![](http://www.elecfans.com/uploads/allimg/150928/104015N14-4.png)
图五
很巧妙的思路!利用二极管的单向导通性,区别两个对称键。扫键思路:对逐个IO口扫键,其他四个IO口可以分别检测其所在的四个按键。这样,就不会有分析图五时提到的注意点。
够酷吧!等等,大家先别满足现状,我们再看一下图六,是不是有点启发?对,我们再分析一下“用5个IO口对地衍生的5个键”。看图六:
![](http://www.elecfans.com/uploads/allimg/150928/104015M18-5.png)
图六
25个键!5个IO口扫出25个键!先别激动,我们再分析一下它的可行性,分析通得过才能真正使用。假设扫键流程:先扫对地的5个键,再如图五扫键。先扫对地5个键,判断没有按键,接着对逐一对IO口进行扫键。但当对某一IO口扫键时,如果有对地的键按下,这时有可能会误判按键,因为对地键比其他键有更高的响应优先级。例如:扫IO1,IO1输出“0”,恰好此时K62按下,IO2检测到有按键,那就不能判断是K11还是K62。我们可以在程序上避免这种按键误判:若IO2检测到有按键,那下一步就去判断是否有对地键按下,如果没有,那就可以正确地判断是K11了。
编辑点评:我们小结扫键个数S: S = (N-1)*N + N ――启用二极管; S = (N-1)*N /2 + N ――省掉二极管
我们分析一下图四(未画出,课本上最普通的扫描法):当IO1输出“0”时,按下K11或K11’键都能被IO2检测到,但IO2检测却无法区别K11和K11’键!同理,不管扫哪个IO口,都有两个对称的键不能区分。我们假想,如果能把对称键区分开来,我们就能正常地去判断按键。我们在思考:有没有单向导通性器件?有!见图五!
![](http://www.elecfans.com/uploads/allimg/150928/104015N14-4.png)
图五
很巧妙的思路!利用二极管的单向导通性,区别两个对称键。扫键思路:对逐个IO口扫键,其他四个IO口可以分别检测其所在的四个按键。这样,就不会有分析图五时提到的注意点。
够酷吧!等等,大家先别满足现状,我们再看一下图六,是不是有点启发?对,我们再分析一下“用5个IO口对地衍生的5个键”。看图六:
![](http://www.elecfans.com/uploads/allimg/150928/104015M18-5.png)
图六
25个键!5个IO口扫出25个键!先别激动,我们再分析一下它的可行性,分析通得过才能真正使用。假设扫键流程:先扫对地的5个键,再如图五扫键。先扫对地5个键,判断没有按键,接着对逐一对IO口进行扫键。但当对某一IO口扫键时,如果有对地的键按下,这时有可能会误判按键,因为对地键比其他键有更高的响应优先级。例如:扫IO1,IO1输出“0”,恰好此时K62按下,IO2检测到有按键,那就不能判断是K11还是K62。我们可以在程序上避免这种按键误判:若IO2检测到有按键,那下一步就去判断是否有对地键按下,如果没有,那就可以正确地判断是K11了。
编辑点评:我们小结扫键个数S: S = (N-1)*N + N ――启用二极管; S = (N-1)*N /2 + N ――省掉二极管
相关文章推荐
- 剑指offer面试题 斐波那契数列
- Ceilometer Polling Performance Improvement
- 大话sizeOf()
- UIImageView 的contentMode属性 浅析
- asp.net使用placeHolder(转载)
- 粘性动画以及果冻效果
- ORACLE 10.2.0.5RAC仲裁盘损坏后重建
- struct2json -- C结构体与 JSON 快速互转库V1.0发布
- React入门及环境搭建
- Java程序猿学习的建议(转)
- mysql建表---级联删除
- 通过grub-install命令把grub安装到u盘-总结
- Select count(*)和Count(1)的区别和执行方式
- eclipse打开项目中文件所在的目录
- [JAVA]翁恺老师零基础学java语言第五周素数例题中continue的困惑
- Python开发之快速搭建自动回复微信公众号功能
- mac小知识之如何查看wifi密码
- CSS各种常用布局
- 通过grub-install命令把grub安装到u盘
- 通过grub-install命令把grub安装到u盘