51单片机(STC89C52RC) IO扩展实验
扫描二维码
随时随地手机看文章
最近碰到了需要扩展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口的上拉电阻问题,不过这个原理确实是蛮经典的,设计不错.