打印

很牛的键盘电路。

[复制链接]
楼主: 耕在此行
手机看帖
扫描二维码
随时随地手机跟帖
21
aceice| | 2008-12-15 17:51 | 只看该作者 回帖奖励 |倒序浏览

2^4 = 16

.........................

使用特权

评论回复
22
ljm810010| | 2008-12-15 17:59 | 只看该作者

貌似成本与IO成正比

使用特权

评论回复
23
Sjj爱| | 2008-12-19 09:13 | 只看该作者

不知道该电路如何工作

不知道该电路如何工作
              还望高人指点

使用特权

评论回复
24
Sjj爱| | 2008-12-19 09:25 | 只看该作者

原理说说啊

听课啊

使用特权

评论回复
25
linqing171| | 2008-12-19 13:15 | 只看该作者

关键看时序

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

如果你用的ps2是2跟线的,自己用二极管搭了个ps2扫键的电路。。。。
还有AD的。

使用特权

评论回复
26
耕在此行|  楼主 | 2008-12-19 17:09 | 只看该作者

24楼

要动动脑筋哦

使用特权

评论回复
27
lqfu686571| | 2008-12-19 20:21 | 只看该作者

这电路原理简单

这电路原理简单,简单比喻就是一个按键按下时是一个I/O口被触发,还是两个,或者三个,或者四个被同时被触发,但是程序检测方面就啰嗦一点了

使用特权

评论回复
28
xwj| | 2008-12-19 20:28 | 只看该作者

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

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


要消抖的话记下这次读的16个按键值,10mS后再次读取、比较即可

使用特权

评论回复
29
awey| | 2008-12-19 21:03 | 只看该作者

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

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


使用特权

评论回复
30
ljm810010| | 2008-12-19 21:09 | 只看该作者

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

不过少用了一些二极管,呵呵

使用特权

评论回复
31
洪七公| | 2008-12-19 21:11 | 只看该作者

累~~~

使用特权

评论回复
32
awey| | 2008-12-19 21:11 | 只看该作者

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

没仔细分析,不知有没有BUG。

使用特权

评论回复
33
洪七公| | 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次扫描~~~

使用特权

评论回复
34
xwj| | 2008-12-19 22:24 | 只看该作者

呵呵,洪大妈终于上线了

好久不见了啊...

使用特权

评论回复
35
awey| | 2008-12-19 22:43 | 只看该作者

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

使用特权

评论回复
36
程序匠人| | 2008-12-19 22:46 | 只看该作者

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

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

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

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

二极管用多了,还不如加一个164之类的扩展一下,算下来价格可能差不多。

使用特权

评论回复
37
awey| | 2008-12-19 22:54 | 只看该作者

呵呵...卖弄技巧而已

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

单片机资源紧张时,可以考虑。

使用特权

评论回复
38
xwj| | 2008-12-19 22:57 | 只看该作者

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

1楼、2楼的图还是挺不错的:-)

使用特权

评论回复
39
洪七公| | 2008-12-19 23:07 | 只看该作者

加二极管必有弊病~~~

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

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


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


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



使用特权

评论回复
40
E007| | 2008-12-19 23:37 | 只看该作者

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

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则