搜索
bottom↓
回复: 26

关于按键问题

[复制链接]

出0入0汤圆

发表于 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里  然后在判断按键,求大神帮忙下。。感谢

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2013-5-11 16:09:50 | 显示全部楼层
在调用action前,可不可以先加个等待按键释放的语句?

出0入0汤圆

 楼主| 发表于 2013-5-11 16:34:17 | 显示全部楼层
longwu537 发表于 2013-5-11 16:09
在调用action前,可不可以先加个等待按键释放的语句?

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

出0入0汤圆

发表于 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();}
}
据我猜想,仅仅是…猜想…

出0入0汤圆

发表于 2013-5-11 16:56:29 | 显示全部楼层
芯灵 发表于 2013-5-11 16:54
void action()
{   
     while(1)

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

出0入0汤圆

 楼主| 发表于 2013-5-11 17:00:53 | 显示全部楼层
芯灵 发表于 2013-5-11 16:54
void action()
{   
     while(1)

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

出0入0汤圆

发表于 2013-5-11 17:08:51 | 显示全部楼层
小白说一句,那个keynumber是怎么处理的,看看有错没

出0入0汤圆

发表于 2013-5-11 17:28:13 | 显示全部楼层
你这段代码的问题是进入action();后keynumber的值没有被刷新(始终是2),进入action();后应该延时然后重新读取keynumber的值。
这仅仅是一个…猜想…

出0入0汤圆

 楼主| 发表于 2013-5-11 18:07:20 | 显示全部楼层
jiangkexiaozhen 发表于 2013-5-11 17:08
小白说一句,那个keynumber是怎么处理的,看看有错没

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

出0入0汤圆

 楼主| 发表于 2013-5-11 18:08:22 | 显示全部楼层
芯灵 发表于 2013-5-11 17:28
你这段代码的问题是进入action();后keynumber的值没有被刷新(始终是2),进入action();后应该延时然后重新 ...

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

出0入0汤圆

发表于 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();
}
这不是一个猜想,试一下吧

出0入0汤圆

发表于 2013-5-11 20:19:49 | 显示全部楼层
你的按键处理判断有问题

出0入0汤圆

 楼主| 发表于 2013-5-12 12:56:43 | 显示全部楼层
芯灵 发表于 2013-5-11 18:48
如果你用的是中断,再设两个变量n=0、m,中断里加一句n=~n; ,然后
void action()
{    m=n;

额 好 我试下 谢谢

出0入0汤圆

发表于 2013-5-12 15:52:01 | 显示全部楼层
本帖最后由 longwu537 于 2013-5-12 15:59 编辑

如果不用中断我会这么写
  1. main()
  2. {
  3.         init();
  4.         while(1)
  5.         {
  6.                 getkey();
  7.                 switch(key_number)
  8.                 {
  9.                         case 1:opition();break;
  10.                         case 2:
  11.                         do
  12.                         {
  13.                                 getkey();
  14.                         }while(key_number!=Null);
  15.                         action();
  16.                         break;
  17.                 }
  18.                
  19.         }
  20. }
  21. void action()
  22. {
  23.         getkey();
  24.         switch(key_number)
  25.         {
  26.                 case 1:a();break;
  27.                 case 2:b();break;
  28.         }
  29. }
复制代码

出0入0汤圆

发表于 2013-5-13 07:47:16 | 显示全部楼层
wangzeyu315 发表于 2013-5-11 18:07
我是把按键管脚直接连接到 51单片机的中断函数了,如果有按键按下 HD7279读出的数值就是key_number ...

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

出0入0汤圆

发表于 2013-5-13 07:49:55 | 显示全部楼层
case 后面要加break,否则会继续执行下面的case底下的语句

出0入0汤圆

发表于 2013-5-13 11:40:15 | 显示全部楼层
再加个标志位应该就可以了吧

出0入0汤圆

发表于 2013-5-13 11:50:10 来自手机 | 显示全部楼层
代码没错,只是二次判定的变量都是一样

出0入0汤圆

发表于 2013-5-13 13:30:12 来自手机 | 显示全部楼层
你可以增加一个按键,设定key_number2用于action函数中,或者在进入action之后,立刻将key_number清零,个人见解。

出0入0汤圆

发表于 2013-5-13 14:08:06 | 显示全部楼层
顶19楼
但是我一般有一个标志用来判断是处于那一层或者哪一个画面的
比如我先开背光,要是背光是关的,就先开背光,之后将KEY_NUMBER清零,第二次按的时候,就是正常的处理了

出0入0汤圆

 楼主| 发表于 2013-5-13 14:52:39 | 显示全部楼层
紫色绕藤 发表于 2013-5-13 13:30
你可以增加一个按键,设定key_number2用于action函数中,或者在进入action之后,立刻将key_number清零,个 ...

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

出0入0汤圆

 楼主| 发表于 2013-5-13 14:53:02 | 显示全部楼层
xiaobendan001 发表于 2013-5-13 14:08
顶19楼
但是我一般有一个标志用来判断是处于那一层或者哪一个画面的
比如我先开背光,要是背光是关的,就先 ...

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

出0入0汤圆

 楼主| 发表于 2013-5-13 14:53:27 | 显示全部楼层
zjk 发表于 2013-5-13 11:40
再加个标志位应该就可以了吧

额  应该怎么加?谢谢

出0入0汤圆

发表于 2013-5-13 17:27:01 | 显示全部楼层
wangzeyu315 发表于 2013-5-13 14:53
麻烦问下。。key_numner应该怎么清零。

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

出0入0汤圆

发表于 2013-5-14 00:29:08 来自手机 | 显示全部楼层
wangzeyu315 发表于 2013-5-13 14:52
麻烦问下。。key_number应该怎么清零?

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

出0入0汤圆

 楼主| 发表于 2013-5-14 12:41:00 | 显示全部楼层
紫色绕藤 发表于 2013-5-14 00:29
额,进入action之后,加上一句:key_number=0;

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

出0入0汤圆

 楼主| 发表于 2013-5-14 12:41:29 | 显示全部楼层
xiaobendan001 发表于 2013-5-13 17:27
在你处理完第一次后清零啊

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

本版积分规则

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

GMT+8, 2024-8-26 12:54

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

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