单片机/MCU论坛
直播中

se10941

7年用户 18经验值
私信 关注
[问答]

51单片机的问题

在闭合开关之后,程序从第一步执行到第六步。如果开关一直闭合,程序从第一步执行到第六步,再从第一步执行第六步,如此循环。当我断开开关之后,无论程序执行到哪一步,他都能接着执行完第六步之后,才停下。这个程序该怎么写

回帖(10)

李帅

2017-12-7 02:03:19
while(GetSwitch() == 1)
{
    step1();
    step2();
    step3();
    step4();
    step5();
    step6();
}
举报

一个人

2017-12-7 10:27:21
1 0 0 2 9 2 5 0 9 4   
举报

人中狼

2017-12-7 10:31:35
先检测一次开关,如果是闭合的,就从一到六运行一次,完成后,检测开关,如果闭合则返回,再次从一到六运行一次,如果断开,则退出。
因为不要求在一到六的循环中退出,所以可以在一次循环后判断开关状态,来决定是否继续循环。
第一次的开关判断是防止一开始开关就是断开的,这时就不需要执行循环了
举报

se10941

2017-12-7 21:27:23
引用: 人中狼 发表于 2017-12-7 10:31
先检测一次开关,如果是闭合的,就从一到六运行一次,完成后,检测开关,如果闭合则返回,再次从一到六运行一次,如果断开,则退出。
因为不要求在一到六的循环中退出,所以可以在一次循环后判断开关状态,来决定是否继续循环。
第一次的开关判断是防止一开始开关就是断开的,这时就不需要执行循环了 ...

while(1)
{
if (开关闭合)
{
    一;
    二;
    三;
    四;
    五;
    六;
    if(开关断开)
       {
          break;
        }
}
}                       这样写断开之后就进不去循环了  
                        这个写不行,断开之后就进不去循环了。
举报

se10941

2017-12-7 22:02:14
引用: ST_Lover 发表于 2017-12-7 10:27
1 0 0 2 9 2 5 0 9 4

我没钱 你别来了
举报

一个人

2017-12-8 09:30:01
引用: se10941 发表于 2017-12-7 22:02
我没钱 你别来了

厉害了, CNMLGB               
举报

人中狼

2017-12-8 09:39:04
按你所写的描述,最后一步的判断开关断开可以不用了,主体是while,本身是一个循环,里面用if判断开关闭合,当闭合是一次执行六个操作,执行完后返回while,所以这里的if虽然是判断开关闭合,其实同时也判断了开关不闭合的状态。
举报

se10941

2017-12-9 20:18:30
引用: 人中狼 发表于 2017-12-8 09:39
按你所写的描述,最后一步的判断开关断开可以不用了,主体是while,本身是一个循环,里面用if判断开关闭合,当闭合是一次执行六个操作,执行完后返回while,所以这里的if虽然是判断开关闭合,其实同时也判断了开关不闭合的状态。 ...

我想做一个控制器,按下开关的时候线路1给出一个12伏的电压打开mos管,在t1秒后,电压为0,关闭mos管;在t2秒后,线路2给出12伏的电压打开mos管,t3秒电压为0,关闭mos管;以此类推,直到线路20.若开关还是闭合的,就从线路1到线路20循环.若中途断开,那程序会继续执行到线路20再退出.t1,t2,t3""""""都是可调的.   我还想再做一个调节器,能够来调t1,t2,t3"""""     指导我一下  谢谢
举报

se10941

2017-12-10 19:07:29
引用: 人中狼 发表于 2017-12-8 09:39
按你所写的描述,最后一步的判断开关断开可以不用了,主体是while,本身是一个循环,里面用if判断开关闭合,当闭合是一次执行六个操作,执行完后返回while,所以这里的if虽然是判断开关闭合,其实同时也判断了开关不闭合的状态。 ...

之前的问题都解决了  只剩下最后一个问题    关闭单片机  再次开启,所有t1,t2,都变成初始值,而不是之前调节好的值。这该怎么处理。
举报

wzy52088

2017-12-10 20:38:09
可以将参数保存到EEPROM里面去,重启也是记忆的。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分