打印

如何识别5个任意组合的按键

[复制链接]
2744|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dce|  楼主 | 2007-1-20 16:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我做一个数据采集系统,终端是一个有5个按键的东西,每个键都是按键按一下有效(只能按一次),这5个按键有可能每个都按一下,也有可能只按其中任意几个,现在我是用1H表示1号键,2H表决2号键,4H表示3号键,8H表示4号,10H表示5号。如终端按了1号和2号键,就向主机送3H这个数,以此类推,问题是我的主机怎么去识别这个3H表示1键和2键,不可能把5键所有组合列一个表吧?有没有什么简单一点的办法?

相关帖子

沙发
sirius_cx| | 2007-1-20 16:18 | 只看该作者

可以考虑这样做

按照楼主的意思应该是只是用到按键组合里面的少数几个,这样的话,只要列表使用到的几个键值就可以了,其他的按键组合没有相应处理就当作无效的按键


仅供参考

使用特权

评论回复
板凳
一级菜鸟| | 2007-1-20 16:18 | 只看该作者

换个编码

按位与就行,分离出bit4-bit0的各位,就知道某个键被按下了

使用特权

评论回复
地板
dce|  楼主 | 2007-1-20 16:28 | 只看该作者

一级菜鸟,能不能再说明白点。谢谢

sirius_cx:5个键的组合太多了

使用特权

评论回复
5
一级菜鸟| | 2007-1-20 16:44 | 只看该作者

呵呵,俺干活干累了

Key=送进来的键值

C:
while(1)
{
    if (Key & 0b00000001)
        //键1被按下
        .
        .
    if (Key & 0b00000010)
        //键2被按下
        .
        .
    if (Key & 0b00000100)
        //键3被按下
        .
        .
    if (Key & 0b00001000)
        //键4被按下
        .
        .
    if (Key & 0b00010000)
        //键5被按下
        .
        .
}



ASM

    MOV A,KEY
    ANL A,#000000001B
    JNZ xxx   ;键1被按下
    MOV A,KEY
    ANL A,#000000010B
    JNZ xxx   ;键2被按下
    MOV A,KEY
    ANL A,#000000100B
    JNZ xxx   ;键3被按下
    MOV A,KEY
    ANL A,#000001000B
    JNZ xxx   ;键4被按下
    MOV A,KEY
    ANL A,#000010000B
    JNZ xxx   ;键5被按下

当然,你最好设置一个变量来与,做一个循环,左移这个变量,然后比较,程序就短很多,俺懒得写,你自己看了。

使用特权

评论回复
6
americ| | 2007-1-20 17:07 | 只看该作者

1H表示1号键,2H表决2号键,4H表示3号键,8H表示4号,10H表示5号

错误!!


5号键发送 10H   还是   16H   ????????



如果是10H   就不要考虑 区分 “其中任意几个”

因为,2号键与4号键按下,是不是一样10H???

如果相同,根本无法区分。
---先从原理上搞清楚吧。


使用特权

评论回复
7
一级菜鸟| | 2007-1-20 17:20 | 只看该作者

LS弄错了,2号键与4号键按下是0AH

使用特权

评论回复
8
dce|  楼主 | 2007-1-20 17:22 | 只看该作者

多谢一级菜鸟!!

使用特权

评论回复
9
dce|  楼主 | 2007-1-20 17:26 | 只看该作者

americ我用的是16进制

使用特权

评论回复
10
conwh| | 2007-1-20 22:40 | 只看该作者

最多用个编码器

使用特权

评论回复
11
sharpxcb| | 2007-1-24 21:21 | 只看该作者

按鍵组合与长短的识别

   楼主有空到这个地方去看看:
相关链接:http://www.mymcu-ic.com/bbs/bbs.asp?t=72&p=1&id=19363&s=default

使用特权

评论回复
12
dce|  楼主 | 2007-1-25 17:16 | 只看该作者

多谢sharpxcb

使用特权

评论回复
13
winhiwang| | 2007-1-25 18:08 | 只看该作者

用每一位代表一个按键的办法最简单可行

使用特权

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

本版积分规则

dce

8

主题

22

帖子

0

粉丝