搜索
bottom↓
楼主: cowboy

小玩意,3个普通IO识别22个按键试验。有实物和程序【恢复】

  [复制链接]

出0入0汤圆

发表于 2011-9-6 23:08:01 | 显示全部楼层
cool

出0入0汤圆

发表于 2011-9-6 23:11:42 | 显示全部楼层
cool!!  mark!

出0入0汤圆

发表于 2011-9-7 04:56:52 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-7 11:22:09 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-7 15:16:33 | 显示全部楼层
没整明白你这个接地那个接地的,都是如何工作的原理是怎样的?程序写起来是不是很麻烦?

出0入0汤圆

发表于 2011-9-7 16:42:09 | 显示全部楼层
想法很创新   这次才看到耶

出0入0汤圆

发表于 2011-9-7 21:08:21 | 显示全部楼层
这个好啊,谢谢楼主的源码

出0入0汤圆

发表于 2011-9-12 15:23:22 | 显示全部楼层
AD是键盘不是更省IO口吗

出0入0汤圆

发表于 2011-9-19 21:31:04 | 显示全部楼层
今天终于搞懂了  太牛了

出0入0汤圆

发表于 2011-9-19 22:15:22 | 显示全部楼层
牛人,这论坛牛人太多了!我来对地方了!

出0入0汤圆

发表于 2011-9-20 23:21:56 | 显示全部楼层
如果有两个键同时按下则无法识别!!!这只能是修定单个按键按下的情况

出0入0汤圆

发表于 2011-9-28 16:48:05 | 显示全部楼层
lz总是能做出让人意想不到的东西来,顶下,只要有源码,一切好说。

出0入0汤圆

发表于 2011-9-29 09:46:22 | 显示全部楼层
回复【楼主位】cowboy
-----------------------------------------------------------------------

还要用其他元件啊

出0入0汤圆

发表于 2011-9-29 13:03:18 | 显示全部楼层
在IO口不够用的情况下很有用

出0入0汤圆

发表于 2011-9-29 19:19:57 | 显示全部楼层
强,做个记号

出0入0汤圆

发表于 2011-9-30 08:47:38 | 显示全部楼层
回复【楼主位】cowboy
-----------------------------------------------------------------------

code unsigned char Key_tab[64]=     //键码映射表
{//  0  1  2  3  4  5  6  7  8  9   
        22, 0, 2, 0, 0, 0, 0, 0, 4, 0, //0
         0, 0, 0, 0, 0,18, 0, 0, 0, 0, //1X
         0, 0, 0, 0, 0, 0, 3,14, 0, 0, //2X
        20,10, 6, 0, 0, 0, 0, 0, 1,19, //3X
         0, 5, 0, 0, 0,15, 0,11, 0, 0, //4X
         0,17, 0, 0,13, 8, 0,21, 0, 9, //5X
        16,12, 7, 0                    //6X
};
这个键码映射表怎么来的啊?

出0入0汤圆

发表于 2011-9-30 13:55:40 | 显示全部楼层
用镊子太麻烦了,需要改进一下,做成按键的形式比较方便!

出0入0汤圆

发表于 2011-9-30 17:30:53 | 显示全部楼层
必须顶你

出0入0汤圆

发表于 2011-9-30 21:09:17 | 显示全部楼层
MARK3个IO多按键

出0入0汤圆

发表于 2011-9-30 21:12:06 | 显示全部楼层
顶!

出0入0汤圆

发表于 2011-10-2 19:47:49 | 显示全部楼层
牛人

出0入0汤圆

发表于 2011-10-11 20:08:48 | 显示全部楼层
顶~~~~~~~~~~~~

出0入0汤圆

发表于 2011-10-11 21:16:13 | 显示全部楼层
大师级作品做个记号

出0入0汤圆

发表于 2011-10-11 21:34:54 | 显示全部楼层
回复【323楼】jeep
-----------------------------------------------------------------------

顶...............

出0入0汤圆

发表于 2011-10-11 21:57:56 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-24 13:30:39 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-24 14:50:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-24 16:52:08 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-10-24 16:54:29 | 显示全部楼层
木有看懂啊

出0入0汤圆

发表于 2011-10-24 16:54:43 | 显示全部楼层
木有看懂啊

出0入0汤圆

发表于 2011-10-31 16:20:04 | 显示全部楼层
不怎么实用,两个按键同时按下就会误码了!

出0入0汤圆

发表于 2011-10-31 17:05:47 | 显示全部楼层
好东东,顶!

出0入0汤圆

发表于 2011-10-31 19:13:32 | 显示全部楼层
好东西

出0入0汤圆

发表于 2011-10-31 21:46:35 | 显示全部楼层
MARK,太神奇了!!!)

(PS:看了网友的评论我才发现我用了STC这么久还不知道可以用AD来做按键。。。)

出0入0汤圆

发表于 2011-11-1 20:10:23 | 显示全部楼层
mark   留着

出0入0汤圆

发表于 2011-11-3 14:45:54 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-3 17:27:19 | 显示全部楼层
很有创意!

出0入0汤圆

发表于 2011-11-3 18:00:22 | 显示全部楼层
你的东西都是不一般呀

出0入0汤圆

发表于 2011-11-3 19:41:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-4 00:58:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-4 20:56:44 | 显示全部楼层
不知道为什么,总看不到图。。我4M的啊。

出0入0汤圆

发表于 2011-11-4 22:19:14 | 显示全部楼层
回复【楼主位】cowboy
-----------------------------------------------------------------------

强大
已经用上了
不会侵犯版权吧?

出0入0汤圆

发表于 2011-11-7 13:50:01 | 显示全部楼层
太厉害了,成本最低的方案。

出0入0汤圆

发表于 2011-11-7 14:48:41 | 显示全部楼层
呵呵~一开始看不太懂,然后从前面的帖子开始看起,基本上就明白了,以后做一个出来玩玩~
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=991644&bbs_id=1006
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=1529268&bbs_page_no=1&bbs_id=1006
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=1563031&bbs_page_no=1&search_mode=3&search_text=h2feo4&bbs_id=9999
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=1600359&bbs_page_no=1&search_mode=4&search_text=Pony279&bbs_id=9999

出0入0汤圆

发表于 2011-11-7 17:44:27 | 显示全部楼层
我比较笨,花了好长时间才稍微有点明白了,刚好比较闲,分析一下,供网友参考,
cowboy哥要是发现我哪里分析不对了就指证一下:

首先从帖子http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=991644&bbs_id=1006 取个图片,先分析一下这个

这个应该先抽象地从IO口状态方面入手
当三个IO口都设置为高,即111时,通过按键,可以制造7种状态: 000, 001, 010, 011, 100, 101, 110
这就是原理图中按键K0 K1 ... K6 的作用,因为K0 - K6可以用这个方法直接扫描出来,所以后面的按键扫描可以不考虑这几个按键了

当三个IO口的状态设置为110时,就是说有一个IO口设置为低电平,这里不妨先分析I/O1为低的情况,那么可以通过按键制造出3种状态 010, 000, 100
这就是图中K8, K9, K13的作用
同理,设置为101, 011的时候各有3种状态,
这样就有 3*3 = 9个按键了

分析到这里,已经有 9 + 7 = 16 个按键了, cowboy的是22个按键, 还有6个从哪来? 先别急,这个稍后再分析

分析出各种状态了,再来从更实际的角度看看二极管在这里面起的用作是什么,
二极管嘛,单向导电,
可以先假设原理图里面的二极管全部短路了会怎么样?
这样很明显三个IO口都接在一起了,还能扫描按键吗?
可以得出一个结论,这里的二极管可以隔离三个IO口,
还有一个作用,比如D9和D7和D3,可以保证K3和K4和K6互不影响,也就是隔离那些连接着同一个IO口的并直接连着地的按键,
再有,利用单向导电性,一个IO口能被单向地被另一个拉低.也就是K7 , K8 ... K12

分析到这里,就开始脱离这个图吧,
刚刚分析完二极管,利用单向导电性,这个按键扫描可以从另一个角度去想
111的IO口设置还是只有7种状态,这个是地对三个IO口的7种影响
但是110, 101, 011的设置的分析可以从另一角度去想,因为IO这三个设置都是三个IO口互相影响的,可以利用二极管创造出更多的可能性
情况1: 1 个IO口仅被另 1 个 IO 口单向地拉低,并且不带其它的影响(区别情况2), 有 3*2 = 6 个按键 (K7 , K8 ... K12)
情况2: 1 个IO口把两个IO口同时拉低, 有 3*1 个按键 (图中的K13, K14, K15)
情况3: 1 个IO口和另一个IO口双向拉低 有 3*2/2 = 3个按键(这个情况是上图中没有利用到的)
情况4: 1 个IO口可以被其它两个IO口中的任意一个单向拉低 有 3*1 个按键(这个情况是上图中没有利用到的)
这样, 就有 7 + 6 + 3 + 3 + 3 = 22个按键了

唉,虽然理了一遍了,可我还是觉得有点混乱,或许cowboy使用映射表也是这个原因吧...

抽象分析完了,再来看看刚才那个图,该从哪里优化好呢?
D1, D2, D3 是可以去掉的, 因为地是无敌的...---------------------------------------抱歉,这里我分析错了......应该改成4个电阻(按照6楼的方案,如果是为了省二极管的话)(研究了一下cowboy的图片...22号键要把三个地方一起短了,对于常规的二脚按键来说...有作弊嫌疑,哈哈~)注意最终我给的图片的电路图也有错误,就是有一个地方(就是22号键那里)把3个IO口给短路了,稍微改动一下就行了,

再对比看看cowboy漂亮的图,噢,D10, D11, D12都反过来,阳极脱离地, 都接在一起
然后K0, K1, K2 直接分别一端连IO口,另一端连地
那K7 - K16怎么办?分析一下,这个属于情况2的. 那么,K7 是IO2单向拉低IO3的,并在D8两端可以吧?
同理K8 (IO1单向拉低IO3) 可以并在D6两端, 以此类推...

嗯,这样硬件上基本一致了
继续,
刚才说到情况3和情况4在图里面是没有的,那么利用这个图怎么制造出来呢?
先看情况3:
1 个IO口和另一个IO口双向拉低, 这个简单, 直接在IO口之间都跨接按键就行了
再看情况4:
1 个IO口可以被其它两个IO口中的任意一个单向拉低,
这个...我再从刚才的图分析大家估计就更凌乱了,直接看cowboy的硬件图吧

(原文件名:1.jpg)
就是三个按键分别并在中间的三个二极管上
比如,最顶上的触点和中间的触点连在一起的时候, 另外两个IO口都可以把最上面的那个IO口拉低...

最后大概就是这样子

(原文件名:3.jpg)



基本原理分析就到这里了...程序我就不分析了...没认真看...看别人的程序还是比较辛苦的...我比较懒...呃,大家不要喷我...

编程原因:修正错误
抽象分析完了,再来看看刚才那个图,该从哪里优化好呢?
D1, D2, D3 是可以去掉的, 因为地是无敌的...---------------------------------------抱歉,这里我分析错了......应该改成4个电阻(按照6楼的方案,如果是为了省二极管的话)(研究了一下cowboy的图片...22号键要把三个地方一起短了,对于常规的二脚按键来说...有作弊嫌疑,哈哈~)注意最终我给的图片的电路图也有错误,就是有一个地方(就是22号键那里)把3个IO口给短路了,稍微改动一下就行了,

出0入0汤圆

发表于 2011-11-7 17:49:28 | 显示全部楼层
如果没有特别要求,单片机又没配AD,
感觉还是16个按键的条理更清晰一点,
可能是我理解得不到位,分析不清楚吧...

出0入0汤圆

发表于 2011-11-8 16:20:36 | 显示全部楼层
不错 收藏了

出0入0汤圆

发表于 2011-11-8 23:01:04 | 显示全部楼层
很有创意啊,学习。

出0入0汤圆

发表于 2011-11-9 15:30:38 | 显示全部楼层
挺有创意的,这就是玩电子的乐趣哈。

出0入0汤圆

发表于 2011-11-13 23:55:17 | 显示全部楼层
收藏了!

出0入0汤圆

发表于 2011-11-14 00:04:28 | 显示全部楼层

出0入0汤圆

发表于 2011-11-14 00:13:48 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-11-28 22:17:10 | 显示全部楼层
太强大了

出0入0汤圆

发表于 2011-11-29 05:54:35 | 显示全部楼层
回复【楼主位】cowboy
-----------------------------------------------------------------------
mark!

出0入0汤圆

发表于 2011-11-29 10:05:44 | 显示全部楼层
mark~~

出0入0汤圆

发表于 2011-11-29 20:36:23 | 显示全部楼层
maik

出0入0汤圆

发表于 2011-11-29 20:41:22 | 显示全部楼层
太强大了

出0入0汤圆

发表于 2011-11-30 01:19:44 | 显示全部楼层
恩,好贴,收藏先

出0入0汤圆

发表于 2011-12-2 14:09:49 | 显示全部楼层
利用二极管可以隔离两个按键之间相互干扰的功能, 可以每个按键都通过二极管接外部中断
这样按下键也后就触发了中断, 如果有OS, 就在中断里装载按键扫描任务
这样就可以很好的提高实时性了, 对编程会省事很多, 而且对系统的效率也有所提高~~~~
不过不省二极管了, 呵呵

出0入0汤圆

发表于 2011-12-2 14:14:01 | 显示全部楼层
回复【360楼】Pony279 霍斯
-----------------------------------------------------------------------

不过这个方法只对有一端有接地的按键管用了, 这样也有7个按键呀~对很多场合已经适用了~呵呵~

实在不行就4个IO口, 就有15个按键了,
从实时性和系统效率上看, 这样至少也会比矩阵键盘好用些

出0入0汤圆

发表于 2011-12-11 22:57:14 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-12 10:14:41 | 显示全部楼层
顶啊

出0入0汤圆

发表于 2011-12-12 12:41:39 | 显示全部楼层
回复【楼主位】cowboy
-----------------------------------------------------------------------

恩   好

出0入0汤圆

发表于 2012-1-2 23:30:01 | 显示全部楼层
这个搞法比较有创意
会不会误按呢?

出0入0汤圆

发表于 2012-2-4 11:49:30 | 显示全部楼层
学习了

出0入0汤圆

发表于 2012-2-4 12:28:23 | 显示全部楼层
MARK

出0入0汤圆

发表于 2012-2-4 14:43:02 | 显示全部楼层
方案很好。学习了。

出0入0汤圆

发表于 2012-2-4 15:58:21 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-5 17:44:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-6 11:50:17 | 显示全部楼层
原来3个IO可以控制这么多按键啊 开眼界了

出0入0汤圆

发表于 2012-2-13 14:07:43 | 显示全部楼层
2^3=8;
照之前的思维,最多能控制8种状态。
看到LZ貌似用到了另一条IO,那么就是4条:
2^4=16;
最多也就16种状态,怎么想也不能达到22种状态,难道这里边还有其它状态?
PWM状态?不会吧?
牛人!!
必须顶一个!~!!

出0入0汤圆

发表于 2012-2-16 22:47:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-24 18:28:57 | 显示全部楼层
用在产品上不知可靠不?

出0入0汤圆

发表于 2012-3-25 11:01:17 | 显示全部楼层
这个要顶的, 节省 IO。。

出0入0汤圆

发表于 2012-3-25 11:21:32 | 显示全部楼层
挺好玩儿

出0入0汤圆

发表于 2012-4-16 15:28:55 | 显示全部楼层
这个看了很久,还是不大明白,多个按键同时按下,会不会短路

出0入0汤圆

发表于 2012-4-17 10:47:36 | 显示全部楼层
牛人。真不错。

出0入0汤圆

发表于 2012-4-17 13:11:23 | 显示全部楼层
必须学习。。。。。。

出0入0汤圆

发表于 2012-7-25 20:56:54 | 显示全部楼层
请问LZ,如果用MSP430扫描键盘,需要在IO口上加上吗?

出0入0汤圆

发表于 2012-7-25 22:28:26 | 显示全部楼层
Mark一下......

出0入0汤圆

发表于 2012-7-26 13:29:30 | 显示全部楼层
有一个问题,你的那个数码管的PCB是买现成的还是自己找厂家做的呢?

出0入0汤圆

发表于 2012-8-25 15:05:24 | 显示全部楼层
犀利!。。。。。

出0入0汤圆

发表于 2012-11-7 20:40:31 | 显示全部楼层
强悍!学习了

出0入0汤圆

发表于 2012-11-7 20:57:46 | 显示全部楼层
t e s t! !

出0入0汤圆

发表于 2012-11-7 20:58:32 | 显示全部楼层
                   3个IO接识别22键测试程序                         *   这是什么情况

出0入0汤圆

发表于 2012-12-14 17:29:13 | 显示全部楼层
好东西,学习一下

出0入0汤圆

发表于 2012-12-15 10:59:03 | 显示全部楼层
为什么楼主位的源程序是乱码呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-4-14 21:47:39 | 显示全部楼层
真好学习

出0入0汤圆

发表于 2013-6-29 09:27:56 | 显示全部楼层
很强大,以后弄个试试

出0入0汤圆

发表于 2013-6-29 09:30:20 | 显示全部楼层
楼主牛X,学习

出0入0汤圆

发表于 2013-6-29 09:30:50 | 显示全部楼层
真厉害

出0入0汤圆

发表于 2013-6-29 15:18:35 | 显示全部楼层
顶,是自己想的吗.够创意

出0入0汤圆

发表于 2013-6-29 16:17:03 | 显示全部楼层
3个IO就能识别二十多个,真牛。第一次看见

出0入0汤圆

发表于 2013-6-29 21:00:27 | 显示全部楼层
顶楼主!!!!!!!!!!!!!!

出0入0汤圆

发表于 2013-6-29 22:30:43 | 显示全部楼层
终于明白其中的原理

出0入0汤圆

发表于 2013-6-30 10:58:26 | 显示全部楼层
深表震惊……本来看到一个用5个IO口扫25个键已经有够震惊的了,现在……
但是可靠性还是很重要的,如果同时按下两个键可能会造成误识别,这样的设计还是不要的罢。
不过楼主的逻辑思维果然够强悍。

出0入0汤圆

发表于 2013-6-30 12:30:42 | 显示全部楼层
太有才了。

出0入0汤圆

发表于 2013-6-30 13:33:41 | 显示全部楼层
不错,标记一下

出0入0汤圆

发表于 2013-6-30 15:41:54 | 显示全部楼层
楼主强人呀,顶一个.

出0入0汤圆

发表于 2013-7-1 15:11:13 | 显示全部楼层
非常不错。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-9 00:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表