找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于51单片机 我觉得这个程序的意思应该是亮一阵然后暗,为什么这个循环会有闪烁

  [复制链接]
跳转到指定楼层
楼主
ID:278709 发表于 2018-1-22 19:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题:我觉得这个程序的意思应该是亮一阵然后暗,为什么这个循环会有闪烁,这个程序的执行顺序是什么?谢谢。
#include"reg52.h"
sbit led1=P2^0;
unsigned int a;
void main()
{
  a=50000;
led1=0;
while(a--);//问题:这里的循环不是起延长时间的作用吗?使led1一直亮,之后就暗吗?为什么会闪烁
led1=1;
  a=50000;
while(a--);
}

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

使用道具 举报

沙发
ID:261288 发表于 2018-1-22 21:23 | 只看该作者
因延时比较短,视觉效果是闪烁的。
回复

使用道具 举报

板凳
ID:7485 发表于 2018-1-22 21:31 | 只看该作者
led1=0(亮),延时(大约是0.5S),然后led1=1(灭)延时(大约是0.5S),不就是闪烁吗?

你的程序少了一句(红色的行)

void main()

{
while(1)
{
  a=50000;
led1=0;
while(a--);
  a=50000;
while(a--);
}
}
回复

使用道具 举报

地板
ID:278299 发表于 2018-1-22 21:38 | 只看该作者
这是用来延时的,也可以用嵌套的for循环,都有延时的作用
回复

使用道具 举报

5#
ID:247467 发表于 2018-1-23 08:43 | 只看该作者
修改合适的延迟时间,看看咋样
回复

使用道具 举报

6#
ID:62355 发表于 2018-1-23 09:04 | 只看该作者
你这里延时做的不太对,就是上面说,时间太短了,建议用定时器做,闪烁问题不太能理解 应该有while(1)的,我没有看到 但是时间上必须要改动。也可以做一个延时循环 之后调用他。比如delayms(int a)这个函数定义个毫秒级延时,调用它,这样你能知道你延时的时间。再不懂你就模拟调试 将LED 这个IO接口的逻辑和代码一起贴出来。
回复

使用道具 举报

7#
ID:278811 发表于 2018-1-23 09:39 | 只看该作者
延时比较短,所以就变成闪烁啦。楼主可以试试把a的值再调整大一些,就可以看到一阵亮一阵灭的效果啦
回复

使用道具 举报

8#
ID:278860 发表于 2018-1-23 11:27 | 只看该作者
你的发光二极管的接法是共阴还是共阳的呢?
回复

使用道具 举报

9#
ID:278709 发表于 2018-1-23 11:45 | 只看该作者
ahshmj 发表于 2018-1-22 21:31
led1=0(亮),延时(大约是0.5S),然后led1=1(灭)延时(大约是0.5S),不就是闪烁吗?

你的程序少了 ...

很感谢回答,想再问一下为什么不加大循环while(1)也可以闪烁,如果没有while(1)大循环,这个程序为什么会循环啊,这里的while(a--)不是只起延时的作用吗,不会让整个程序再循环啊,怎么会一直闪烁呢
回复

使用道具 举报

10#
ID:278709 发表于 2018-1-23 11:48 | 只看该作者
流逝记忆 发表于 2018-1-23 09:04
你这里延时做的不太对,就是上面说,时间太短了,建议用定时器做,闪烁问题不太能理解 应该有while(1)的 ...

非常感谢。由于是刚学,今天刚学到延时函数,感谢耐心回答
不过,while(a--)明显比for循环的嵌套简单的多啊,为什么调用的延时函数里面写的都是for循环的嵌套?
回复

使用道具 举报

11#
ID:278709 发表于 2018-1-23 11:49 | 只看该作者
天下1213 发表于 2018-1-23 08:43
修改合适的延迟时间,看看咋样

好,我没注意时间,下次一定注意。感谢耐心回答
回复

使用道具 举报

12#
ID:278709 发表于 2018-1-23 11:50 | 只看该作者
哦哦哦哦哦 发表于 2018-1-23 09:39
延时比较短,所以就变成闪烁啦。楼主可以试试把a的值再调整大一些,就可以看到一阵亮一阵灭的效果啦

可是我都没有加while(1)的大循环,他为什么会循环闪烁呢
回复

使用道具 举报

13#
ID:278709 发表于 2018-1-23 11:52 | 只看该作者
leesin 发表于 2018-1-23 11:27
你的发光二极管的接法是共阴还是共阳的呢?

低电平亮,应该是共阳
回复

使用道具 举报

14#
ID:276587 发表于 2018-1-23 13:36 来自手机 | 只看该作者
一直再循环里面如果你把后面去掉了,那就是延时了就灭了
回复

使用道具 举报

15#
ID:278919 发表于 2018-1-23 14:20 | 只看该作者
不是循环执行,while的等待时间太短,需要插入一些语句或延长计数值。
回复

使用道具 举报

16#
ID:278932 发表于 2018-1-23 14:58 | 只看该作者
while是循环当然是闪烁了。。
回复

使用道具 举报

17#
ID:278932 发表于 2018-1-23 15:26 | 只看该作者
a--,亮了接着减1,然后暗减1,亮循环进行成闪烁了,要不改成定时才行
回复

使用道具 举报

18#
ID:278954 发表于 2018-1-23 15:31 | 只看该作者
因延时比较短,视觉效果是闪烁的。
回复

使用道具 举报

19#
ID:278954 发表于 2018-1-23 15:32 | 只看该作者

因延时比较短,视觉效果是闪烁的。
回复

使用道具 举报

20#
ID:62355 发表于 2018-1-23 16:14 | 只看该作者
pinenut 发表于 2018-1-23 11:48
非常感谢。由于是刚学,今天刚学到延时函数,感谢耐心回答
不过,while(a--)明显比for循环的嵌套简单 ...

现在你用us级延时 ms 级延时 s级延时 你会发现嵌套比while(a--)好用。
回复

使用道具 举报

21#
ID:278982 发表于 2018-1-23 16:17 | 只看该作者
不能依靠这么高速运行单片机,来做减数运算,得出来的时间,你的肉眼是无法分辨的
回复

使用道具 举报

22#
ID:278982 发表于 2018-1-23 16:21 | 只看该作者
应该写延时子程序
回复

使用道具 举报

23#
ID:278709 发表于 2018-1-24 19:29 | 只看该作者
pinenut 发表于 2018-1-23 11:45
很感谢回答,想再问一下为什么不加大循环while(1)也可以闪烁,如果没有while(1)大循环,这个程序为什 ...

为什么不加while(1)大循环还是闪烁
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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