标题: 关于if语句带延时的 立即跳出循环 [打印本页]

作者: 溧阳科燕    时间: 2018-1-15 14:46
标题: 关于if语句带延时的 立即跳出循环

QQ图片20180115101007_看图王.png (56.4 KB, 下载次数: 97)

如图

如图

作者: lhl139679    时间: 2018-1-15 15:41
用外部中断试试
作者: 树叶的人生    时间: 2018-1-15 16:36
这种延时是阻塞延时,当执行这个延时函数时,CPU一直在这执行延时函数中自增语句,不会去执行其他操作,所以即便在你两个KEY的状态发生改变时,CPU也不知道,因为它忙着执行延时呢,所以这样写实现不了,可以尝试将判断KEY状态的语句放到中断函数中,不过这样估计你硬件连接就要改改了,要将KEY连接到51单片机的中断引脚上。
作者: wulin    时间: 2018-1-15 16:44
直接在这个位置使用有条件的for循环延时,否则跳出循环。
作者: 你像风儿来了    时间: 2018-1-15 17:03
在Delay()这个函数最后加上按键检测
作者: 12445567    时间: 2018-1-15 17:09
用单片机中断试试
作者: 12445567    时间: 2018-1-15 17:10
用单片机中断试试
作者: likunlun    时间: 2018-1-15 17:21
写个专用延时函数,在函数里进行IO判断,如果状态符合,立即退出
作者: ahshmj    时间: 2018-1-15 17:57
每次延时500(或更少),延时完后检测按键,如此循环12次(或不需12次)
作者: yzwzfyz    时间: 2018-1-15 20:22
办法多多,在延时程序中做文章。
作者: 无痕1234    时间: 2018-1-16 09:53
改成一个while语句试试,循环结束的条件改成while的
作者: helloworld1123    时间: 2018-1-16 14:33
你把按键检测函数放到中断函数,,,进入中断函数的时间比延时函数短,,,可以试一试
作者: scmianyangzly    时间: 2018-1-16 15:57
改写延时函数吧!!
作者: bro0310    时间: 2018-1-16 20:09
本帖最后由 bro0310 于 2018-1-16 20:15 编辑

void delay(uint cnt)
{
     uint i=0,j=0;
     for (i=0; (i<cnt)&&KEY1&&KEY2; i++)
           for (j=0; j<1827; j++)
            ;
}

作者: bro0310    时间: 2018-1-16 20:12
void Delay(uint cnt)
{
     uint i=0,j=0;
     for(i=0; (i<cnt)&&KEY1&&KEY2; i++)
         for(j=0; j<1827; j++)
         ;
}
作者: Trump1438    时间: 2019-1-31 15:07
你像风儿来了 发表于 2018-1-15 17:03
在Delay()这个函数最后加上按键检测

好想法!非常具有开创性
作者: IconTry    时间: 2019-2-1 15:21
应该有挺多方法方法实现的,但是要是不想做太大修改的话,可以修改下延时,像 bro0310 兄弟写的,不过可能把附加判断条件放在延时二级循环里实时性应该会相对更高一点~

void Delay(uint del)
{
        uint i, j;
        for(i=0; i<del; i++)
                for(j=0; (j<1827)&&KEY1&&KEY2; j++);
}
作者: wmzscj    时间: 2020-11-6 09:44
这个方法好,想了好久都没写成功,今天终于参考这个写好了,谢谢
作者: amandv    时间: 2020-11-6 10:49
return是退出子程序用的。退出循环用break;
作者: B001    时间: 2020-11-6 15:17
我觉得这个最好用中断,如果硬件上不支持中断,那就改用状态机,通过不同的状态切换实现延时,不需要delay函数而实现delay的效果。
作者: luzhongyi86    时间: 2020-11-6 18:44
用中断或延时里面判断
作者: taotie    时间: 2020-11-6 19:05
地雷里加判断退出




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