发新帖我要提问
12
返回列表
打印

请教一个独立按键的问题

[复制链接]
楼主: xppx1987
手机看帖
扫描二维码
随时随地手机跟帖
21
feng-mengqi| | 2012-12-6 13:24 | 只看该作者 回帖奖励 |倒序浏览
怎么定义都行

使用特权

评论回复
22
xinyu1982| | 2012-12-6 14:10 | 只看该作者
换了您这种方法还是只有一个按键有效,现把自己按您说的方式修改的程序贴出来,看到底哪儿出错了?
//端口定义
#define io_key_1 RB0
#define io_key_2 RA1

#define BIT0        0x01
#define BIT1        0x02
//定义长按键的TICK 数,以及连发间隔的TICK 数
#define KEY_LONG_PERIOD 20
#define KEY_CONTINUE_PERIOD 5
//定义按键返回值状态(按下,长按,连发,释放)
#define KEY_DOWN 0x80
#define KEY_LONG 0x40
#define KEY_CONTINUE 0x20
#define KEY_UP 0x10
//定义按键状态
#define KEY_STATE_INIT 0
#define KEY_STATE_WOBBLE 1
#define KEY_STATE_PRESS 2
#define KEY_STATE_LONG 3
#define KEY_STATE_CONTINUE 4
#define KEY_STATE_RELEASE 5
//键值读取函数
static uchar KeyScan(void)
{
        uchar k=0;
        if(io_key_1 == 0)
        {
                k|=BIT0;
        }
        if(io_key_2 == 0)
        {
                k|=BIT1;
        }
        return k;
}

使用特权

评论回复
23
lzqxs89| | 2012-12-6 23:31 | 只看该作者
个人觉得你得先看看原来程序中按键的键值是怎么处理的!

使用特权

评论回复
24
xppx1987|  楼主 | 2012-12-11 16:00 | 只看该作者
谢谢各位,是编译器把局部变量优化了~

使用特权

评论回复
25
shuiqinghan2012| | 2017-4-25 09:53 | 只看该作者
你这个属于没理解底层硬件连接和二进制吧,你想连续的四个IO,它在寄存器里也是连续在一起的,最初都为1,也就是1111B,此处B表示二进制,你按下了第一个键,也就是1110B=0x0e,你如果不使用连续的IO,像你说的“两个按键到P00和P11端口上的话”那地址上已经不是连续的了,你如果还像实现这样的键值,那就需要做移位处理,让其每个按键的值都存在一起,比如放在同一个数组,但如果你能实现这一步,那就说明你完全理解了底层的东西,那样你也不需要做这一步了,你会想到更简单的方式实现。

总结:个人认为你这个问题属于对底层理解不透,尤其是寄存器值和二进制,另一个你出现此问题,完全是想照搬别人的程序,但你的硬件又不同。

使用特权

评论回复
26
shuiqinghan2012| | 2017-4-25 09:54 | 只看该作者
shuiqinghan2012 发表于 2017-4-25 09:53
你这个属于没理解底层硬件连接和二进制吧,你想连续的四个IO,它在寄存器里也是连续在一起的,最初都为1, ...

啊呀,这贴都快5年了,估计是楼主看不到了,希望对后面的人有用

使用特权

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

本版积分规则