一直按着不变着

[复制链接]
 楼主| zhanglli 发表于 2021-11-20 19:57 | 显示全部楼层 |阅读模式
*************由按键传送参数程序*****************   
   if(!G_Key2)
     {
      delay_ms(10);
    while(!G_Key2)
          {   
             SendMessage(WM_KEYDOWN,KEY_2);
            }               
            if(!G_Key2)                        // 扫描到的按键能这么传参数吗????
              {
                 SendMessage(WM_KEYPRESS,KEY_2);
               }
       }
**************处理接收到的参数***********************
if (wMsg==WM_KEYDOWN)
     {
     if(WParam==KEY_1)
          G_Key_Flag++;
          if(G_Key_Flag==6)
      {
       G_Key_Flag=0;
      }
         {
           SwitchMode();
        }
        if(WParam==KEY_2)
         {
            AddValue();   
           }
     }
else if (wMsg==WM_KEYPRESS)
     {
        {
         SwitchMode();
         }
           {  
             AddValue();
            }
     }         
}
**************这是最终执行按键程序****************************
void AddValue()
{   
   
    if(G_Key_Flag==0|G_Key_Flag==1)
      
       G_Counter1++;
     if(G_Counter1==512)
         {
          G_Counter1=1;
        }
     if(G_Key_Flag==2|G_Key_Flag==3)  
      
      G_Counter2++;

     if(G_Counter2==100)
         {
          G_Counter2=1;
          }

    if(G_Key_Flag==4)         
    G_Counter3++;
      if(G_Counter3==100)
         {
          G_Counter3=1;
          }      
}
按键按下加1,一直按着不变着是为什么?
 楼主| zhanglli 发表于 2021-11-20 19:59 | 显示全部楼层
还有就是在这基础能改成按下加1,连续按着按键一直加!
jiajs 发表于 2021-11-20 20:02 | 显示全部楼层
LZ试试用状态机扫描按键吧,3个状态,1空闲,2按键延时,3是按键抬起
zwll 发表于 2021-11-20 20:03 | 显示全部楼层
你的程序貌似结构有些乱看着不是很清晰,而且在判断按键时候出现死延时这是非常不可取的做法,容易造成单片机运行程序混乱
heweibig 发表于 2021-11-20 20:05 | 显示全部楼层
一直按着,肯定不变啊
yszong 发表于 2021-11-20 20:06 | 显示全部楼层
为啥子啊
llljh 发表于 2021-11-20 20:08 | 显示全部楼层
while(!G_Key2) //一直按键,那么程序永远在这里进行死循环,只有按键松开才跳出往下执行。
           {                       //尽管会跳进中断,但是中断返回后,还是跳回来这里继续循环(除非松开按键)
                       SendMessage(WM_KEYDOWN,KEY_2);
           }                       //而你在死循环的过程中,没有变量加1,也没有刷新显示,后果就是不变。
heweibig 发表于 2021-11-20 20:09 | 显示全部楼层
用定时器弄个1s延时
      while(!G_Key2)
     {
                      SendMessage(WM_KEYDOWN,KEY_2);
                       if(1s到了)
               {
                      变量++;
                      刷新显示;
                                 秒清零;
                      }
         }
 楼主| zhanglli 发表于 2021-11-20 20:11 | 显示全部楼层
能具体些吗?   我就是不知道怎么写定时器
juventus9554 发表于 2021-11-20 20:17 | 显示全部楼层
oid time0 (void) interrupt 1
{}
定时器T0的中断函数!关于定时器的控制寄存器自己设置一下!将EA、ET0设置一下!\
 楼主| zhanglli 发表于 2021-11-20 20:18 | 显示全部楼层
定时器要怎么才在程序中起作用呢?   一定要跟中断一起吗?
zhanghqi 发表于 2021-11-20 20:21 | 显示全部楼层
连定时器都不会用,建议你看书
dengdc 发表于 2021-11-20 20:24 | 显示全部楼层
逻辑上有问题,你单步调试一下
lizye 发表于 2021-11-20 20:25 | 显示全部楼层

楼主看来对单片机知道的太少了,没关系,大家都是从一无所知开始的
chenjunt 发表于 2021-11-20 20:28 | 显示全部楼层
先看懂定时器和中断吧,你会发现程序会好写很多
jlyuan 发表于 2021-11-20 20:30 | 显示全部楼层
一般这种问题发生的原始在于程序实际的逻辑和自己想的逻辑不一致的时候
zwll 发表于 2021-11-20 20:32 | 显示全部楼层
这样的程序死悄悄
juventus9554 发表于 2021-11-20 20:33 | 显示全部楼层
楼主先单步调试一下看看问题出在哪里了
chuxh 发表于 2021-11-20 20:35 | 显示全部楼层
逻辑有问题,|是按位或啊,||?
 楼主| zhanglli 发表于 2021-11-20 20:40 | 显示全部楼层
哦,那我就知道怎么回事了,多谢大家
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1016

主题

9386

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部