标题: 单片机一个按键怎么控制数码管多种状态?第一次按下和第2次按执行不同的动作 [打印本页]

作者: 过去已成往事    时间: 2020-12-4 13:02
标题: 单片机一个按键怎么控制数码管多种状态?第一次按下和第2次按执行不同的动作
一个按键怎么控制数码管多种状态,比如按下按键第一次,数码管开始自动计时(0-99),按下第二次,数码管停止,按下第三次,数码管清零。用定时器。
作者: 51hei团团    时间: 2020-12-4 16:39
可以用检测执行动作状态的办法,比如第一个动作和第2个动作都未执行过,则执行动作1
第一个动作已经执行过了,标志位置1,第2个动作未执行,此时按键则执行2,
以此类推,由于论坛不允许直接提供代码,自行整理一下吧
作者: minileo5    时间: 2020-12-4 16:51
用一个变量计数?a=0时按下开始计时a+1,a=1时按下暂停a+1,a=2时按下数码管清零a置零。
作者: sunny北城    时间: 2020-12-4 17:10
定义一个全局变量,在按键每次按下时执行的函数里面改变这个变量的值,通过判断这个值来实现不同功能,注意在程序里对变量使用完后进行初始化
作者: xqleft    时间: 2020-12-4 20:42
if(WORK_NUM==0)
{
   
}
else if(WORK_NUM==1)
{
  
}
else
{
        
}
这里就有三个模式,就这么简单.你把你需要功能分别写进不同的模式就可以了
作者: 1922323908    时间: 2020-12-4 20:54
添加一个flag作为标志,然后判断flag的值就可以实现你想要的模式
作者: robinsonlin    时间: 2020-12-5 18:41
1、通过定时器采集时间。
2、在主程序中设定标志位。
3、判断按键动作,改变标志位数值。
4、标志位数值满足条件后,执行相应操作。
作者: TTQ001    时间: 2020-12-6 02:04
创建一个布尔变量,第一次按下该键时,将该变量设置为true,然后执行第一操作; 再次按下该键时,检查该变量,如果该变量为true,则表示第二次按下,执行第二操作,将变量重置为false。 如果变量为false,则表示这是第一次按下,然后执行第一操作。
作者: 千江水    时间: 2020-12-6 10:04
设置一个flag,当你按键按下的时候,flag++;
作者: 千江水    时间: 2020-12-6 10:07
你需要设置一个变量flag,当按键按下的时候,flag++,if(flag>=4)flag=0;然后if(flag== 1){数码管开始自动计时}else if(flag==2){数码管停止}else if(flag == 3){数码管清零}
作者: 17803856022    时间: 2020-12-7 11:41
一个按键设置多种模式,然后进行条件判断即可
作者: univers    时间: 2020-12-7 11:49
一个变量累加不就可以了么,很简单。
作者: hejianmin    时间: 2020-12-7 11:50
要标致位处理
作者: 权威人物    时间: 2020-12-7 12:03
按键处理不论的话
if(key)
{
    keyNUM++;   if(keyNUM>3)
{
   keyNUM=0;//或者1,根据需求
}
}
switch(keyNUM)
{
      case 1://第一下按下需处理的
      break;

case 2 :      break;

case 3:      break;


default:      break;

}



作者: jjwangxu2008    时间: 2020-12-7 14:10
状态机················




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1