找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2200|回复: 7
打印 上一主题 下一主题
收起左侧

单片机控制电机正反转,程序1判断到了break就停止循环了

[复制链接]
跳转到指定楼层
楼主
为什么程序1判断到了break就停止循环了  但是加了一段返回的语句就一直循环大佬们求正解



IMG20190725161932.jpg (9.54 KB, 下载次数: 43)

IMG20190725161932.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:405193 发表于 2019-7-25 19:53 | 只看该作者
我认为2的里面jiang=1; 可能调用到了别的程序了,别的程序继续满足了if(num==4)又循环了,这样就没有直接运行下面的break.
回复

使用道具 举报

板凳
ID:553625 发表于 2019-7-26 10:43 | 只看该作者
yong761228 发表于 2019-7-25 19:53
我认为2的里面jiang=1; 可能调用到了别的程序了,别的程序继续满足了if(num==4)又循环了,这样就没有直接运 ...

那有什么办法解决没有  感觉自己对编程比较小白
回复

使用道具 举报

地板
ID:590652 发表于 2019-7-26 11:16 | 只看该作者
break;是跳出循环,如果你的就一个大循环那么就直接跳出循环,把所有的程序都执行完了,自然就不会循环了啊,我猜你复位一下应该又可以按一下,然后遇到break;就又停下来了,返回语句不懂了,你可能把break;改成continue;建议程序不要这样写,用switch语句写会更好
回复

使用道具 举报

5#
ID:589552 发表于 2019-7-26 11:34 | 只看该作者
你这程序只列了一小部分吧。  都没看到循环体系啊。 if语句不是while语句,不会自己循环,执行完了继续往下走。 你得把整体一点的程序列出来,才好分析。
回复

使用道具 举报

6#
ID:553625 发表于 2019-7-26 15:10 | 只看该作者
C51oo 发表于 2019-7-26 11:34
你这程序只列了一小部分吧。  都没看到循环体系啊。 if语句不是while语句,不会自己循环,执行完了继续往下 ...

#include <reg52.h>
#include <intrins.h>

sbit KEY_UP=P1^3;
sbit KEY_DW=P1^4;
sbit DIR_UP=P3^2;
sbit DIR_DW=P3^3;
sbit CON_ECU=P3^4;

void DelayUs2x(unsigned char t);
void DelayMs(unsigned char t);
void Delay_ms(unsigned char t);

void main()
{
                KEY_UP=1;
                KEY_DW=1;
                DIR_UP=0;
                DIR_DW=0;
                CON_ECU=1;
       
                while(1)
                {
        if(KEY_UP==0)
                                {       
                                           Delay_ms(5);
                                           if(KEY_UP==0)
                                                {
                                                                CON_ECU=0;
                                                                Delay_ms(10);
                                                          DIR_UP=1;
                                                                DelayMs(10);
                                                          CON_ECU=1;
                                                          Delay_ms(10);
                                                          DIR_UP=0;
                                                          
                                                                DelayMs(190);
                                                       
                                                                DIR_DW=1;
                                              Delay_ms(10);
                                                          DIR_DW=0;
                                                }
                                                    
                                }
                               
        if(KEY_DW==0)
                                {      
                                                                DelayMs(10);
                                                                if(KEY_DW==0)
                                {
                                                                DIR_DW=1;
                                                                Delay_ms(10);
                                                                DIR_DW=0;
                                                       
                                                                DelayMs(190);
                                                                DelayMs(190);
                                                                DelayMs(190);
                                                                DIR_UP=1;
                                                          Delay_ms(10);
                                                                DIR_UP=0;
                                }                
                        }
                }
  }


       
       
void DelayUs2x(unsigned char t)
{   
                while(--t);
}

void DelayMs(unsigned char t)
{   
                while(t--)
                {

                                DelayUs2x(245);
                                DelayUs2x(245);
                }
}

void Delay_ms(unsigned char t)               
{
        unsigned char i,j,k;
  for(k=0;k<t;k++)
        {
                _nop_();
                i = 2;
                j = 199;
                do
                {
                        while (--j);
                } while (--i);
        }
}



看这个  我想改成触发一次电机就只转一次 如果这个信号一直维持也只转设定的那几十毫秒,再次触发同样,怎么搞啊
回复

使用道具 举报

7#
ID:398075 发表于 2019-7-26 17:01 | 只看该作者
建议直接去掉break,
回复

使用道具 举报

8#
ID:553625 发表于 2019-7-26 22:03 | 只看该作者
281433001 发表于 2019-7-26 17:01
建议直接去掉break,

这个没加break啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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