wangzeyu315 发表于 2013-5-11 15:37:59

关于按键问题

main()
{
    init();
    while(1)
    {
          switch(key_number)
          case 1:opition();
          case 2:action();
    }
}
void action()
{
      switch(key_number)
      case 1:a();
      case 2:b();
}

我想做一个分级的菜单,比如我按2 然后会跳入action的函数。但是我遇到个情况就是,当按2了然后直接跳入b()的函数去了。
我想先跳进action里然后在判断按键,求大神帮忙下。。感谢

longwu537 发表于 2013-5-11 16:09:50

在调用action前,可不可以先加个等待按键释放的语句?

wangzeyu315 发表于 2013-5-11 16:34:17

longwu537 发表于 2013-5-11 16:09 static/image/common/back.gif
在调用action前,可不可以先加个等待按键释放的语句?

请问大神,应该怎么加。。小白见笑了

芯灵 发表于 2013-5-11 16:54:05

void action()
{   
   while(1)
        {
        switch(key_number)
                {
      case 2:;
      default:break;
                }
        }
                switch(key_number){
      case 1:a();
      case 2:b();}
}
据我猜想,仅仅是…猜想…

芯灵 发表于 2013-5-11 16:56:29

芯灵 发表于 2013-5-11 16:54 static/image/common/back.gif
void action()
{   
   while(1)


刚刚又看了下,这个猜想有问题,不用试了

wangzeyu315 发表于 2013-5-11 17:00:53

芯灵 发表于 2013-5-11 16:54 static/image/common/back.gif
void action()
{   
   while(1)


0.0不是只有主函数里才有while(1)的吗。。

jiangkexiaozhen 发表于 2013-5-11 17:08:51

小白说一句,那个keynumber是怎么处理的,看看有错没

芯灵 发表于 2013-5-11 17:28:13

你这段代码的问题是进入action();后keynumber的值没有被刷新(始终是2),进入action();后应该延时然后重新读取keynumber的值。
这仅仅是一个…猜想…

wangzeyu315 发表于 2013-5-11 18:07:20

jiangkexiaozhen 发表于 2013-5-11 17:08 static/image/common/back.gif
小白说一句,那个keynumber是怎么处理的,看看有错没

我是把按键管脚直接连接到 51单片机的中断函数了,如果有按键按下 HD7279读出的数值就是key_number

wangzeyu315 发表于 2013-5-11 18:08:22

芯灵 发表于 2013-5-11 17:28 static/image/common/back.gif
你这段代码的问题是进入action();后keynumber的值没有被刷新(始终是2),进入action();后应该延时然后重新 ...

- - 这个猜想貌似对。。但是怎么再重新读数值呢。。

芯灵 发表于 2013-5-11 18:48:18

如果你用的是中断,再设两个变量n=0、m,中断里加一句n=~n; ,然后
void action()
{    m=n;
   whlie(m==n);
      switch(key_number)
      case 1:a();
      case 2:b();
}
这不是一个猜想,试一下吧

weldking 发表于 2013-5-11 20:19:49

你的按键处理判断有问题

wangzeyu315 发表于 2013-5-12 12:56:43

芯灵 发表于 2013-5-11 18:48 static/image/common/back.gif
如果你用的是中断,再设两个变量n=0、m,中断里加一句n=~n; ,然后
void action()
{    m=n;


额 好 我试下 谢谢

longwu537 发表于 2013-5-12 15:52:01

本帖最后由 longwu537 于 2013-5-12 15:59 编辑

如果不用中断我会这么写main()
{
        init();
        while(1)
        {
                getkey();
                switch(key_number)
                {
                        case 1:opition();break;
                        case 2:
                        do
                        {
                                getkey();
                        }while(key_number!=Null);
                        action();
                        break;
                }
               
        }
}
void action()
{
        getkey();
        switch(key_number)
        {
                case 1:a();break;
                case 2:b();break;
        }
}

jiangkexiaozhen 发表于 2013-5-13 07:47:16

wangzeyu315 发表于 2013-5-11 18:07 static/image/common/back.gif
我是把按键管脚直接连接到 51单片机的中断函数了,如果有按键按下 HD7279读出的数值就是key_number ...

我的意思是你走一下keynumber的数据流程,看一下是否有数据变更

cc224 发表于 2013-5-13 07:49:55

case 后面要加break,否则会继续执行下面的case底下的语句

zjk 发表于 2013-5-13 11:40:15

再加个标志位应该就可以了吧

benqme 发表于 2013-5-13 11:50:10

代码没错,只是二次判定的变量都是一样

紫色绕藤 发表于 2013-5-13 13:30:12

你可以增加一个按键,设定key_number2用于action函数中,或者在进入action之后,立刻将key_number清零,个人见解。

xiaobendan001 发表于 2013-5-13 14:08:06

顶19楼
但是我一般有一个标志用来判断是处于那一层或者哪一个画面的
比如我先开背光,要是背光是关的,就先开背光,之后将KEY_NUMBER清零,第二次按的时候,就是正常的处理了

wangzeyu315 发表于 2013-5-13 14:52:39

紫色绕藤 发表于 2013-5-13 13:30 static/image/common/back.gif
你可以增加一个按键,设定key_number2用于action函数中,或者在进入action之后,立刻将key_number清零,个 ...

麻烦问下。。key_number应该怎么清零?

wangzeyu315 发表于 2013-5-13 14:53:02

xiaobendan001 发表于 2013-5-13 14:08 static/image/common/back.gif
顶19楼
但是我一般有一个标志用来判断是处于那一层或者哪一个画面的
比如我先开背光,要是背光是关的,就先 ...

麻烦问下。。key_numner应该怎么清零。

wangzeyu315 发表于 2013-5-13 14:53:27

zjk 发表于 2013-5-13 11:40 static/image/common/back.gif
再加个标志位应该就可以了吧

额应该怎么加?谢谢

xiaobendan001 发表于 2013-5-13 17:27:01

wangzeyu315 发表于 2013-5-13 14:53 static/image/common/back.gif
麻烦问下。。key_numner应该怎么清零。

在你处理完第一次后清零啊

紫色绕藤 发表于 2013-5-14 00:29:08

wangzeyu315 发表于 2013-5-13 14:52
麻烦问下。。key_number应该怎么清零?

额,进入action之后,加上一句:key_number=0;

wangzeyu315 发表于 2013-5-14 12:41:00

紫色绕藤 发表于 2013-5-14 00:29 static/image/common/back.gif
额,进入action之后,加上一句:key_number=0;

谢谢啊。。已经弄好了~~

wangzeyu315 发表于 2013-5-14 12:41:29

xiaobendan001 发表于 2013-5-13 17:27 static/image/common/back.gif
在你处理完第一次后清零啊

谢谢~~弄好了~
页: [1]
查看完整版本: 关于按键问题