很牛的键盘电路。

[复制链接]
17928|94
aceice 发表于 2008-12-15 17:51 | 显示全部楼层

2^4 = 16

.........................
ljm810010 发表于 2008-12-15 17:59 | 显示全部楼层

貌似成本与IO成正比

Sjj爱 发表于 2008-12-19 09:13 | 显示全部楼层

不知道该电路如何工作

不知道该电路如何工作
              还望高人指点
Sjj爱 发表于 2008-12-19 09:25 | 显示全部楼层

原理说说啊

听课啊
linqing171 发表于 2008-12-19 13:15 | 显示全部楼层

关键看时序

如果你一个周期就能确定是哪个键按下,那么4根线最多能接4个按键。
如果你要扫描两次才能判断是哪个键按下,那么。。。。。
如果你要扫描NNNNNN次才能判断是哪个键盘按下。

如果你用的ps2是2跟线的,自己用二极管搭了个ps2扫键的电路。。。。
还有AD的。
 楼主| 耕在此行 发表于 2008-12-19 17:09 | 显示全部楼层

24楼

要动动脑筋哦
lqfu686571 发表于 2008-12-19 20:21 | 显示全部楼层

这电路原理简单

这电路原理简单,简单比喻就是一个按键按下时是一个I/O口被触发,还是两个,或者三个,或者四个被同时被触发,但是程序检测方面就啰嗦一点了
xwj 发表于 2008-12-19 20:28 | 显示全部楼层

偶前面就说了:要分5次去读

首先输出高(或设为弱上拉输入),读取4个IO状态,获得4个按键状态;
然后,依次将一个IO置低,读取其他3个IO
共4次读取12个按键


要消抖的话记下这次读的16个按键值,10mS后再次读取、比较即可
awey 发表于 2008-12-19 21:03 | 显示全部楼层

即兴画了个三线16键的图给你们玩

三个IO口只需要置为输入和低电平两种状态。


ljm810010 发表于 2008-12-19 21:09 | 显示全部楼层

翻版我2楼的3线19键?^_^

不过少用了一些二极管,呵呵
洪七公 发表于 2008-12-19 21:11 | 显示全部楼层

累~~~

awey 发表于 2008-12-19 21:11 | 显示全部楼层

这个图读键的程序比较简单

没仔细分析,不知有没有BUG。
洪七公 发表于 2008-12-19 22:09 | 显示全部楼层

无BUG,4次扫描~~俺来仔细分析一下~~~

GND实际是恒为低电平的虚拟“IO0”,3线为IO1,IO2,IO3.
实际是4线~~~

依次扫描顺序:(K后第1个数字为扫描发送者,其后数字为扫描接收者)
1.IO1=IO2=IO3=1 (7个键)
  K0123 (GND发送0,IO1IO2IO3读000)
  K012  (GND发送0,IO1IO2IO3读001)
  K013  (GND发送0,IO1IO2IO3读010)
  K023  (GND发送0,IO1IO2IO3读100)
  K01   (GND发送0,IO1IO2IO3读011)
  K02   (GND发送0,IO1IO2IO3读101)
  K03   (GND发送0,IO1IO2IO3读110)
2.IO1=0,IO2=IO3=1 (3个键)
  K123  (IO1发送0,IO2IO3读00)
  K12   (IO1发送0,IO2IO3读01)
  K13   (IO1发送0,IO2IO3读10)
3.IO2=0,IO1=IO3=1 (3个键)
  K213  (IO2发送0,IO1IO3读00)
  K21   (IO2发送0,IO1IO3读01)
  K23   (IO2发送0,IO1IO3读10)
4.IO3=0,IO1=IO2=1 (3个键)
  K321  (IO3发送0,IO1IO2读00)
  K31   (IO3发送0,IO1IO2读01)
  K32   (IO3发送0,IO1IO2读10)

哈哈~~~3IO(隐藏了GND~~~),16键(7+3+3+3+3),4次扫描~~~
xwj 发表于 2008-12-19 22:24 | 显示全部楼层

呵呵,洪大妈终于上线了

好久不见了啊...
awey 发表于 2008-12-19 22:43 | 显示全部楼层

把老叫花子引出来了?不容易,哈哈...

程序匠人 发表于 2008-12-19 22:46 | 显示全部楼层

省钱省到这个份上,就不得不考虑二极管的成本了吧

其实按键的扩展方式有很多,像这种单纯追求用最少的IO口实现最多的按键数量,只是在孤立看问题时才有意义。而在实际项目中。可以有更多更灵活的方式。

比如,如果有富余的AD口,可以考率用AD方式去读按键,一个ad口就可以搞定许多按键了。(另一个贴子里正在讨论)

再比如,如果有LED显示电路,可以把按键与LED扫描电路复用口线,也能起到节省IO口的作用,而且有可能更省钱。当然,按键也可以与其他一些口线复用,视具体情况而定。

二极管用多了,还不如加一个164之类的扩展一下,算下来价格可能差不多。
awey 发表于 2008-12-19 22:54 | 显示全部楼层

呵呵...卖弄技巧而已

实际应用中,可以取舍,比如用3个IO口做9个按键的,只要三个二极管,还是很划算的。

单片机资源紧张时,可以考虑。
xwj 发表于 2008-12-19 22:57 | 显示全部楼层

呵呵,技巧就是拿来卖弄的:-)

1楼、2楼的图还是挺不错的:-)
洪七公 发表于 2008-12-19 23:07 | 显示全部楼层

加二极管必有弊病~~~

它们都具有特定的优先级,

如楼主图的7,8,9,0


awey的K0123,K0XX,K0X,K1XX,K2XX,K3XX


所以它们都不支持组合键(多键),有些遗憾,不过一般可以用长压键来替代。



E007 发表于 2008-12-19 23:37 | 显示全部楼层

需要多次扫描,且有优先级

只用上拉电阻,其它不要任何元件(当然得要按键啦),且IO口线是类似标准51的双向口,无需三态,那么N条IO口线可以做的键盘最大数量是: 1+2+3+...+N , n>0.有兴趣的可以研究下~,这个支持部分组合键.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部