找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于if语句带延时的 立即跳出循环

  [复制链接]
跳转到指定楼层
楼主
20黑币

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

如图

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

使用道具 举报

沙发
ID:265458 发表于 2018-1-15 15:41 | 只看该作者
用外部中断试试
回复

使用道具 举报

板凳
ID:192284 发表于 2018-1-15 16:36 | 只看该作者
这种延时是阻塞延时,当执行这个延时函数时,CPU一直在这执行延时函数中自增语句,不会去执行其他操作,所以即便在你两个KEY的状态发生改变时,CPU也不知道,因为它忙着执行延时呢,所以这样写实现不了,可以尝试将判断KEY状态的语句放到中断函数中,不过这样估计你硬件连接就要改改了,要将KEY连接到51单片机的中断引脚上。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:213173 发表于 2018-1-15 16:44 | 只看该作者
直接在这个位置使用有条件的for循环延时,否则跳出循环。
回复

使用道具 举报

5#
ID:148552 发表于 2018-1-15 17:03 | 只看该作者
在Delay()这个函数最后加上按键检测
回复

使用道具 举报

6#
ID:249463 发表于 2018-1-15 17:09 | 只看该作者
用单片机中断试试
回复

使用道具 举报

7#
ID:249463 发表于 2018-1-15 17:10 | 只看该作者
用单片机中断试试
回复

使用道具 举报

8#
ID:57717 发表于 2018-1-15 17:21 | 只看该作者
写个专用延时函数,在函数里进行IO判断,如果状态符合,立即退出
回复

使用道具 举报

9#
ID:7485 发表于 2018-1-15 17:57 | 只看该作者
每次延时500(或更少),延时完后检测按键,如此循环12次(或不需12次)
回复

使用道具 举报

10#
ID:123289 发表于 2018-1-15 20:22 | 只看该作者
办法多多,在延时程序中做文章。
回复

使用道具 举报

11#
ID:235676 发表于 2018-1-16 09:53 | 只看该作者
改成一个while语句试试,循环结束的条件改成while的
回复

使用道具 举报

12#
ID:276559 发表于 2018-1-16 14:33 | 只看该作者
你把按键检测函数放到中断函数,,,进入中断函数的时间比延时函数短,,,可以试一试
回复

使用道具 举报

13#
ID:276604 发表于 2018-1-16 15:57 | 只看该作者
改写延时函数吧!!
回复

使用道具 举报

14#
ID:230118 发表于 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++)
            ;
}
回复

使用道具 举报

15#
ID:230118 发表于 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++)
         ;
}
回复

使用道具 举报

16#
ID:472325 发表于 2019-1-31 15:07 | 只看该作者
你像风儿来了 发表于 2018-1-15 17:03
在Delay()这个函数最后加上按键检测

好想法!非常具有开创性

评分

参与人数 2黑币 +18 收起 理由
sheng7533967 + 8 很给力!
zhengchong60 + 10 很给力!

查看全部评分

回复

使用道具 举报

17#
ID:474552 发表于 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++);
}
回复

使用道具 举报

18#
ID:736350 发表于 2020-11-6 09:44 | 只看该作者
这个方法好,想了好久都没写成功,今天终于参考这个写好了,谢谢
回复

使用道具 举报

19#
ID:414556 发表于 2020-11-6 10:49 | 只看该作者
return是退出子程序用的。退出循环用break;
回复

使用道具 举报

20#
ID:592183 发表于 2020-11-6 15:17 | 只看该作者
我觉得这个最好用中断,如果硬件上不支持中断,那就改用状态机,通过不同的状态切换实现延时,不需要delay函数而实现delay的效果。
回复

使用道具 举报

21#
ID:387641 发表于 2020-11-6 18:44 来自手机 | 只看该作者
用中断或延时里面判断
回复

使用道具 举报

22#
ID:342822 发表于 2020-11-6 19:05 | 只看该作者
地雷里加判断退出
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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