找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3511|回复: 24
收起左侧

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

  [复制链接]
ID:362355 发表于 2018-7-7 15:15 来自手机 | 显示全部楼层 |阅读模式
我是用if判断按键来实现电机的转动,但是有一个按键呢功能是要电机转几秒停几秒的反复的,如果我把这个按键按下了,它就会执行这段程序,即使有其他按键按下了还是会执行这段程序,怎么改呢??
回复

使用道具 举报

ID:366893 发表于 2018-7-7 16:31 | 显示全部楼层
表述不明,没看懂你要表达什么,可以说清楚点吗
回复

使用道具 举报

ID:164602 发表于 2018-7-7 16:53 | 显示全部楼层
在电机转动程序中,加一个判断,只要有按键发生,就跳出这段程序,即要加一个按键的判断。
回复

使用道具 举报

ID:362355 发表于 2018-7-7 17:29 来自手机 | 显示全部楼层
hayden 发表于 2018-7-7 16:31
表述不明,没看懂你要表达什么,可以说清楚点吗

就是按键K4按下了,如果其他按键按下,不能直接切换过去了,怎么改??(m是电机的占空比)
1530955584432-1800147721.jpg
15309556234851880717620.jpg
回复

使用道具 举报

ID:363376 发表于 2018-7-7 17:33 | 显示全部楼层
加一判断的条件,只要转几秒停几秒转的按键生效了其他按键就失效,执行完了几秒停几秒转再使其他键生效
回复

使用道具 举报

ID:366691 发表于 2018-7-7 18:41 | 显示全部楼层
你是用if(按键1)来判断的吧?然后进入if之后就再也出不来了?给IF加停止条件啊!不然会永远死循环的。
回复

使用道具 举报

ID:308437 发表于 2018-7-7 19:30 | 显示全部楼层
同上:
表述不明,没看懂你要表达什么,可以说清楚点吗
回复

使用道具 举报

ID:342822 发表于 2018-7-7 20:15 | 显示全部楼层
图片看不清~~~~~~~~~~~~~~
回复

使用道具 举报

ID:342822 发表于 2018-7-7 20:22 | 显示全部楼层
转几秒停几秒!
用循环语句来实现,在循环中加条件判断如果某键按下随时退出。
回复

使用道具 举报

ID:148256 发表于 2018-7-7 21:10 | 显示全部楼层
可以定义一个状态吧,表示按键是否已按下,在中断中写入状态,每次在大循环中检测该状态,按下就执行代码,释放就不执行
回复

使用道具 举报

ID:362355 发表于 2018-7-7 21:52 | 显示全部楼层
本帖最后由 我是貔貅 于 2018-7-8 09:27 编辑
yousunny 发表于 2018-7-7 19:30
同上:
表述不明,没看懂你要表达什么,可以说


      

复制代码
回复

使用道具 举报

ID:191417 发表于 2018-7-8 00:21 | 显示全部楼层
if (z=1)
回复

使用道具 举报

ID:191417 发表于 2018-7-8 00:23 | 显示全部楼层
if (zhuan=1)
{
zhuan=0;
}
else
{
zhuan=1;
}
回复

使用道具 举报

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:362355 发表于 2018-7-8 09:32 | 显示全部楼层
代码贴上去了,我的意思是,K4按下了,就无法打断它的运行了
回复

使用道具 举报

ID:367180 发表于 2018-7-8 09:54 | 显示全部楼层
那你在进入K4之后将K4拉高呢
回复

使用道具 举报

ID:362355 发表于 2018-7-8 11:24 来自手机 | 显示全部楼层
HOSS 发表于 2018-7-8 09:54
那你在进入K4之后将K4拉高呢

没用,而且K4按下后里面的内容不能循环反复运行,也就是电机不能有规律的运行
回复

使用道具 举报

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 13:48 来自手机 | 显示全部楼层
ahahaha1331 发表于 2018-7-8 11:39
试着把naturemode()改短一些,
naturemode()
{         

我主函数就是不断扫描键盘的,但那个函数改短就无法完成我要的功能啊。。。
回复

使用道具 举报

ID:367321 发表于 2018-7-8 14:52 | 显示全部楼层
在K4按键对应的执行程序中设置某个状态变量的值,在按键识别程序中,如果识别到按键并且这个状态变量的值不满足则执行对应按键的执行代码
回复

使用道具 举报

ID:257407 发表于 2018-7-8 16:01 | 显示全部楼层
意思是按下那个功能键过后,其他键都失效了吗?你可以看看是不是if判键语句是无限循环,如果是无限循环了程序就在if里面运行,其它的功能都失效了。如果不是无限循环再找找其它原因吧
回复

使用道具 举报

ID:362355 发表于 2018-7-8 16:43 来自手机 | 显示全部楼层
maxuewen 发表于 2018-7-8 14:52
在K4按键对应的执行程序中设置某个状态变量的值,在按键识别程序中,如果识别到按键并且这个状态变量的值不 ...

能直接改下程序吗??
回复

使用道具 举报

ID:362355 发表于 2018-7-8 17:20 来自手机 | 显示全部楼层
1174375244 发表于 2018-7-8 16:01
意思是按下那个功能键过后,其他键都失效了吗?你可以看看是不是if判键语句是无限循环,如果是无限循环了程 ...

就是必须得K4那段程序跑完了,其他按键才能有效,中途即使有其他按键按下,也没用
回复

使用道具 举报

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

你这段代码,当你按下那个键就会调用这个函数,知道执行结束退出这个函数。如果你想在中途按键生效,我认为你可以加return语句,按下一个键返回一个值,不按就返回0,根据你返回值执行相应操作,但是这种比较麻烦。如果你不介意的话,也可以用goto语句跳转,当你按下那个键就直接跳到那里,但是goto语句要尽量避免,所以不建议使用,只是我觉得不改变你函数结构的情况下goto简单一点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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