当前位置:首页 > 单片机 > 单片机
[导读]  最近碰到了需要扩展IO口的情况了,正在想办法从lcd1602身上挤出几个IO口,另一种可行的方法是添加专用IC,google之发现可以有更好的方法,网上流传经典IO接按键法,可以用5个IO口实现5X5矩阵键盘.参考这里:   我参照

  最近碰到了需要扩展IO口的情况了,正在想办法从lcd1602身上挤出几个IO口,另一种可行的方法是添加专用IC,google之发现可以有更好的方法,网上流传经典IO接按键法,可以用5个IO口实现5X5矩阵键盘.参考这里:

   我参照着实验了一番,并用protues仿真看看;用上面的例子,如图:


  原理还是采用的是查询的方法进行扫描的,请看其描述:

  用3个IO口作行扫描,2个IO作列检测(为方便描述,我们约定:设置某一IO口输出为“0”――称其 为“扫某IO口”)。用行线输出扫键码,列线检测是否有按键的查询方法进行扫键。扫键流程:在行线依次输出011,101,110扫键值,行线每输出一个 扫键值,列线检测一次。当列线检测到有按键时,结合输出的扫键值可以判断相应的按键。

  仿真的时候用atmel89c51单片机,选取P1口的0-4,就是不通过,当列作为输入状态(为1时),某IO置0时,接通交叉的按钮,列却没有变化,依旧为高电平.什么原因呢?百思不得其解,用一个小实验,将按钮接行的一端直接接到地,则列状态改变,那么也就是这个上拉电阻的问题咯, 突然想到,P1口内是已经内置了上拉电阻的,能够实际输出高电平,那么再接一个上拉电阻就是白搭了,于是去掉上拉电阻部分,功能正常.为再次验证,将端口接到P0口的0-4,电路依旧按照上图所示,功能正常,验证正确.

  经典接按钮一文中并没有提及是在什么单片机中实现的,只是提供了一个原理,实际当中需要注意IO口的上拉电阻问题,不过这个原理确实是蛮经典的,设计不错.


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭