利用二极管的单向导通性设计多按键扫描,但是占用极少IO口

今天把手头的罗技手持摇杆拆了,发现里面按键扫描有二极管存在,就想不通了,于是就上网搜索,找到一个关于利用二极管的单向导通性设计多按键扫描,哈哈,学到一招:


我们分析一下图四(未画出,课本上最普通的扫描法):当IO1输出“0”时,按下K11或K11’键都能被IO2检测到,但IO2检测却无法区别K11和K11’键!同理,不管扫哪个IO口,都有两个对称的键不能区分。我们假想,如果能把对称键区分开来,我们就能正常地去判断按键。我们在思考:有没有单向导通性器件?有!见图五!

  利用二极管的单向导通性设计多按键扫描,但是占用极少IO口_第1张图片

图五

  很巧妙的思路!利用二极管的单向导通性,区别两个对称键。扫键思路:对逐个IO口扫键,其他四个IO口可以分别检测其所在的四个按键。这样,就不会有分析图五时提到的注意点。

  够酷吧!等等,大家先别满足现状,我们再看一下图六,是不是有点启发?对,我们再分析一下“用5个IO口对地衍生的5个键”。看图六:

  利用二极管的单向导通性设计多按键扫描,但是占用极少IO口_第2张图片

图六

  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 ――省掉二极管


你可能感兴趣的:(电路)