找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机 灯一直亮,不能闪烁,求大神告诉程序哪错了 新人

  [复制链接]
跳转到指定楼层
楼主
ID:207448 发表于 2017-6-3 17:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
sbit led=P2^0;
void delay500us(void)   //误差 0us
{
    unsigned char a,b;
    for(b=71;b>0;b--)
        for(a=2;a>0;a--);
}
  void main()
  {
  while(1)
  {
  led=0;
  delay500us();
  led=1;
  delay500us();
  }
  }
灯一直亮,不能闪烁,求大神告诉哪错了

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

使用道具 举报

沙发
ID:82765 发表于 2017-6-3 18:18 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

板凳
ID:207448 发表于 2017-6-3 18:58 | 只看该作者
cjjcjj1 发表于 2017-6-3 18:18
延时时间太短了

一般时间设置多少
回复

使用道具 举报

地板
ID:123289 发表于 2017-6-3 19:21 | 只看该作者
延时时间大于视觉残留时间就可以了。
回复

使用道具 举报

5#
ID:207497 发表于 2017-6-3 21:01 | 只看该作者
这个只能是延时时间太短了,其实数码管闪烁的原因就是延时时间加上人眼睛的视觉残留效应引起的,所以修改一下延时时间就行,一般20毫秒就可以
回复

使用道具 举报

6#
ID:207448 发表于 2017-6-3 21:23 | 只看该作者
yzwzfyz 发表于 2017-6-3 19:21
延时时间大于视觉残留时间就可以了。

谢谢,我也是江都的
回复

使用道具 举报

7#
ID:207448 发表于 2017-6-3 21:26 | 只看该作者
cjjcjj1 发表于 2017-6-3 18:18
延时时间太短了

谢谢,大神回复
回复

使用道具 举报

8#
ID:207499 发表于 2017-6-3 21:35 | 只看该作者
应该把a设置上百最好
回复

使用道具 举报

9#
ID:207511 发表于 2017-6-3 21:38 | 只看该作者
延时时间问题
回复

使用道具 举报

10#
ID:111634 发表于 2017-6-4 08:32 | 只看该作者
Dpjaihaozhe 发表于 2017-6-3 18:58
一般时间设置多少

至少0.1s
回复

使用道具 举报

11#
ID:137239 发表于 2017-6-4 10:28 | 只看该作者
延时时间太短了,刷新太快,小于人眼视觉残留时间了,可是将延时时间加长,延时时间至少为0.1s
回复

使用道具 举报

12#
ID:207636 发表于 2017-6-4 12:36 | 只看该作者
延时时间太短了,人眼分辨的时间30ms往上,不然会有视觉停留,感觉不到led的变化的
回复

使用道具 举报

13#
ID:187614 发表于 2017-6-4 15:20 | 只看该作者
视觉残留理论上是200ms,刷新数码管要小于200ms才不会闪烁。
回复

使用道具 举报

14#
ID:207705 发表于 2017-6-4 16:26 | 只看该作者
延时太短了 肉眼分别不了 换成10000 就能看到效果了
回复

使用道具 举报

15#
ID:207718 发表于 2017-6-4 16:59 | 只看该作者
延时时间大于视觉残留时间就可以了
回复

使用道具 举报

16#
ID:182522 发表于 2017-6-5 08:53 | 只看该作者
修改延迟函数,延迟太短~
回复

使用道具 举报

17#
ID:140489 发表于 2017-6-5 11:32 | 只看该作者
延时太短,视觉暂留,你看到的就是一直亮着的,加大延时
回复

使用道具 举报

18#
ID:207954 发表于 2017-6-5 11:50 | 只看该作者
                                                            #include<reg51.h> sbit led=P2^0;  void delay500us(unsigned char ms)  //误差 0us {    unsigned char i;         while(ms--)         {                 for(i = 0; i < 120; i++);         } }   void main()   {   while(1)   {   led=0;   delay500us(1000);   led=1;   delay500us(1000);   }   }
回复

使用道具 举报

19#
ID:207954 发表于 2017-6-5 11:50 | 只看该作者

                                                          
#include<reg51.h>
sbit led=P2^0;

void delay500us(unsigned char ms)  //误差 0us
{
   unsigned char i;
        while(ms--)
        {
                for(i = 0; i < 120; i++);
        }
}
  void main()
  {
  while(1)
  {
  led=0;
  delay500us(1000);
  led=1;
  delay500us(1000);
  }
  }
回复

使用道具 举报

20#
ID:207985 发表于 2017-6-5 12:50 | 只看该作者
在延时函数里,你让for循环就是ab的乘积最少10000次
回复

使用道具 举报

21#
ID:203107 发表于 2017-6-5 14:10 | 只看该作者
延时时间太短1所以看不到,加大延时的时间即可哟
回复

使用道具 举报

22#
ID:207997 发表于 2017-6-5 14:10 | 只看该作者
延迟太短,建议延长
回复

使用道具 举报

23#
ID:208024 发表于 2017-6-5 14:52 | 只看该作者

延时时间太短了
回复

使用道具 举报

24#
ID:170270 发表于 2017-6-5 15:11 | 只看该作者
闪的太快了 人家区别不出来了
回复

使用道具 举报

25#
ID:204643 发表于 2017-6-5 15:22 | 只看该作者
延时时间短了些
回复

使用道具 举报

26#
ID:208085 发表于 2017-6-5 16:50 | 只看该作者
延时太短,灯光的闪烁眼睛捕捉不到,延长时间就可以了
回复

使用道具 举报

27#
ID:208123 发表于 2017-6-5 18:15 | 只看该作者
延时应该长一点人的视觉残留效应
回复

使用道具 举报

28#
ID:24714 发表于 2017-6-6 10:16 | 只看该作者
灯在闪,只是你看不清楚,它的亮度低于正常的发光亮度
回复

使用道具 举报

29#
ID:208588 发表于 2017-6-6 21:56 | 只看该作者
用for循环让delay500us()多运行几次,50微秒的闪烁频率眼睛是分辨不出来的
回复

使用道具 举报

30#
ID:209421 发表于 2017-6-9 08:51 | 只看该作者
延迟设置为50000试试
回复

使用道具 举报

31#
ID:209619 发表于 2017-6-9 18:09 | 只看该作者
延时时间太短,人的肉眼无法看到变化,加大延时时间20毫秒以上就可以了
回复

使用道具 举报

32#
ID:209647 发表于 2017-6-9 19:37 | 只看该作者
延时短。一般500ms吧
回复

使用道具 举报

33#
ID:209659 发表于 2017-6-9 20:40 | 只看该作者
延时函数都写成delay500us(2000);   这样就会每隔一秒闪烁
回复

使用道具 举报

34#
ID:209691 发表于 2017-6-9 22:15 | 只看该作者
人的视觉停留时间为50ms到200ms,所以延时程序要改到50ms以上
回复

使用道具 举报

35#
ID:209744 发表于 2017-6-10 09:47 | 只看该作者
看你的程序是由于延时时间太短造成的,你可以借助示波器看一下波形你就会知道。应该还有一个现象就是你这个灯的亮度会比正常灯的亮度要低。因为灯不是一直工作,是间歇性工作的。
回复

使用道具 举报

36#
ID:209782 发表于 2017-6-10 12:02 | 只看该作者
延时太短了~还可以用led取反加延时,可以简化一下~
void delayms(unsigned int z)
{
    int x,y;   
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}
while(1)
{
    led=~led;
    delayms(1000);
}
回复

使用道具 举报

37#
ID:209833 发表于 2017-6-10 14:52 | 只看该作者
延时太短 建议加长就行了
回复

使用道具 举报

38#
ID:209876 发表于 2017-6-10 16:35 | 只看该作者
把a改成13000,b改成13000,就行了
回复

使用道具 举报

39#
ID:209876 发表于 2017-6-10 16:36 | 只看该作者

一般设置a=13000,b=13000
回复

使用道具 举报

40#
ID:192284 发表于 2017-6-10 17:54 | 只看该作者
延时这么短的时间,灯熄灭你也看不到啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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