找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于一个if的程序执行问题

查看数: 4763 | 评论数: 24 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-7-7 15:15

正文摘要:

我是用if判断按键来实现电机的转动,但是有一个按键呢功能是要电机转几秒停几秒的反复的,如果我把这个按键按下了,它就会执行这段程序,即使有其他按键按下了还是会执行这段程序,怎么改呢??

回复

ID:257407 发表于 2018-7-9 16:00
我是貔貅 发表于 2018-7-8 09:32
代码贴上去了,我的意思是,K4按下了,就无法打断它的运行了

你这段代码,当你按下那个键就会调用这个函数,知道执行结束退出这个函数。如果你想在中途按键生效,我认为你可以加return语句,按下一个键返回一个值,不按就返回0,根据你返回值执行相应操作,但是这种比较麻烦。如果你不介意的话,也可以用goto语句跳转,当你按下那个键就直接跳到那里,但是goto语句要尽量避免,所以不建议使用,只是我觉得不改变你函数结构的情况下goto简单一点
ID:362355 发表于 2018-7-8 17:20
1174375244 发表于 2018-7-8 16:01
意思是按下那个功能键过后,其他键都失效了吗?你可以看看是不是if判键语句是无限循环,如果是无限循环了程 ...

就是必须得K4那段程序跑完了,其他按键才能有效,中途即使有其他按键按下,也没用
ID:362355 发表于 2018-7-8 16:43
maxuewen 发表于 2018-7-8 14:52
在K4按键对应的执行程序中设置某个状态变量的值,在按键识别程序中,如果识别到按键并且这个状态变量的值不 ...

能直接改下程序吗??
ID:257407 发表于 2018-7-8 16:01
意思是按下那个功能键过后,其他键都失效了吗?你可以看看是不是if判键语句是无限循环,如果是无限循环了程序就在if里面运行,其它的功能都失效了。如果不是无限循环再找找其它原因吧
ID:367321 发表于 2018-7-8 14:52
在K4按键对应的执行程序中设置某个状态变量的值,在按键识别程序中,如果识别到按键并且这个状态变量的值不满足则执行对应按键的执行代码
ID:362355 发表于 2018-7-8 13:48
ahahaha1331 发表于 2018-7-8 11:39
试着把naturemode()改短一些,
naturemode()
{         

我主函数就是不断扫描键盘的,但那个函数改短就无法完成我要的功能啊。。。
ID:367222 发表于 2018-7-8 11:39
试着把naturemode()改短一些,
naturemode()
{         
         m=100;
         delay(1000);
         m=0;
         delay(3000);
       }
主函数开头加个while(1),每完成一个周期检测key状态
ID:362355 发表于 2018-7-8 11:24
HOSS 发表于 2018-7-8 09:54
那你在进入K4之后将K4拉高呢

没用,而且K4按下后里面的内容不能循环反复运行,也就是电机不能有规律的运行
ID:367180 发表于 2018-7-8 09:54
那你在进入K4之后将K4拉高呢
ID:362355 发表于 2018-7-8 09:32
代码贴上去了,我的意思是,K4按下了,就无法打断它的运行了
ID:362355 发表于 2018-7-8 09:30
  1. /*------------自然风模式----------------*/
  2. void naturemode()
  3. {         
  4.          m=100;
  5.          delay(1000);
  6.          m=0;
  7.          delay(3000);
  8.          m=100;
  9.          delay(1000);
  10.          m=0;
  11.          delay(3000); //前8秒
  12.          m=100;
  13.          delay(2000);
  14.          m=0;
  15.          delay(2000);
  16.          m=100;
  17.          delay(2000);
  18.          m=0;
  19.          delay(2000);        //又8秒
  20.          m=100;
  21.          delay(3000);
  22.          m=0;
  23.          delay(1000);
  24.          m=100;
  25.          delay(3000);  
  26.          m=0;
  27.          delay(1000);   //又8秒
  28.          m=100;
  29.          delay(8000);
  30.        
  31.          
  32. }

  33. ......

  34. /*----------键盘扫描函数----------------*/
  35. void keyscan()  
  36. {  
  37.   if(K1==0)     
  38.   {
  39.     delay(5);      //消除抖动
  40.          if(K1==0)
  41.          {
  42.                   m=100;
  43.      }
  44.   }
  45.   if(K2==0)
  46.   {
  47.     delay(5);
  48.          if(K2==0)
  49.          {
  50.                  m=0;
  51.          }
  52.   }
  53.     if(K3==0)
  54.   {
  55.     delay(5);
  56.          if(K3==0)
  57.          {
  58.             m=50;
  59.          }
  60.   }
  61.   if(K4==0)
  62.   {
  63.     delay(5);
  64.          if(K4==0)
  65.          {
  66.                  naturemode(); //自然风模式
  67.          }
  68.   }   
  69. }
复制代码



ID:191417 发表于 2018-7-8 00:23
if (zhuan=1)
{
zhuan=0;
}
else
{
zhuan=1;
}
ID:191417 发表于 2018-7-8 00:21
if (z=1)
ID:362355 发表于 2018-7-7 21:52
本帖最后由 我是貔貅 于 2018-7-8 09:27 编辑
yousunny 发表于 2018-7-7 19:30
同上:
表述不明,没看懂你要表达什么,可以说


      

复制代码
ID:148256 发表于 2018-7-7 21:10
可以定义一个状态吧,表示按键是否已按下,在中断中写入状态,每次在大循环中检测该状态,按下就执行代码,释放就不执行
ID:342822 发表于 2018-7-7 20:22
转几秒停几秒!
用循环语句来实现,在循环中加条件判断如果某键按下随时退出。
ID:342822 发表于 2018-7-7 20:15
图片看不清~~~~~~~~~~~~~~
ID:308437 发表于 2018-7-7 19:30
同上:
表述不明,没看懂你要表达什么,可以说清楚点吗
ID:366691 发表于 2018-7-7 18:41
你是用if(按键1)来判断的吧?然后进入if之后就再也出不来了?给IF加停止条件啊!不然会永远死循环的。
ID:363376 发表于 2018-7-7 17:33
加一判断的条件,只要转几秒停几秒转的按键生效了其他按键就失效,执行完了几秒停几秒转再使其他键生效
ID:164602 发表于 2018-7-7 16:53
在电机转动程序中,加一个判断,只要有按键发生,就跳出这段程序,即要加一个按键的判断。
ID:366893 发表于 2018-7-7 16:31
表述不明,没看懂你要表达什么,可以说清楚点吗

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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