标题: 单片机 灯一直亮,不能闪烁,求大神告诉程序哪错了 新人 [打印本页]

作者: Dpjaihaozhe    时间: 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();
  }
  }
灯一直亮,不能闪烁,求大神告诉哪错了


作者: cjjcjj1    时间: 2017-6-3 18:18
提示: 作者被禁止或删除 内容自动屏蔽
作者: Dpjaihaozhe    时间: 2017-6-3 18:58
cjjcjj1 发表于 2017-6-3 18:18
延时时间太短了

一般时间设置多少
作者: yzwzfyz    时间: 2017-6-3 19:21
延时时间大于视觉残留时间就可以了。
作者: ttwwtt    时间: 2017-6-3 21:01
这个只能是延时时间太短了,其实数码管闪烁的原因就是延时时间加上人眼睛的视觉残留效应引起的,所以修改一下延时时间就行,一般20毫秒就可以
作者: Dpjaihaozhe    时间: 2017-6-3 21:23
yzwzfyz 发表于 2017-6-3 19:21
延时时间大于视觉残留时间就可以了。

谢谢,我也是江都的
作者: Dpjaihaozhe    时间: 2017-6-3 21:26
cjjcjj1 发表于 2017-6-3 18:18
延时时间太短了

谢谢,大神回复
作者: 看见客    时间: 2017-6-3 21:35
应该把a设置上百最好
作者: qwer121    时间: 2017-6-3 21:38
延时时间问题
作者: zl2168    时间: 2017-6-4 08:32
Dpjaihaozhe 发表于 2017-6-3 18:58
一般时间设置多少

至少0.1s
作者: STC89C51    时间: 2017-6-4 10:28
延时时间太短了,刷新太快,小于人眼视觉残留时间了,可是将延时时间加长,延时时间至少为0.1s
作者: laozang    时间: 2017-6-4 12:36
延时时间太短了,人眼分辨的时间30ms往上,不然会有视觉停留,感觉不到led的变化的
作者: 51Lovers    时间: 2017-6-4 15:20
视觉残留理论上是200ms,刷新数码管要小于200ms才不会闪烁。
作者: Words丶    时间: 2017-6-4 16:26
延时太短了 肉眼分别不了 换成10000 就能看到效果了
作者: tyuyuiuiuiugfgf    时间: 2017-6-4 16:59
延时时间大于视觉残留时间就可以了
作者: 蜕变    时间: 2017-6-5 08:53
修改延迟函数,延迟太短~
作者: lids    时间: 2017-6-5 11:32
延时太短,视觉暂留,你看到的就是一直亮着的,加大延时
作者: 吴启金    时间: 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);   }   }
作者: 吴启金    时间: 2017-6-5 11:50
qwer121 发表于 2017-6-3 21:38
延时时间问题

                                                          
#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);
  }
  }
作者: xuemei645876017    时间: 2017-6-5 12:50
在延时函数里,你让for循环就是ab的乘积最少10000次
作者: peng19970426    时间: 2017-6-5 14:10
延时时间太短1所以看不到,加大延时的时间即可哟
作者: 沉默的墓碑    时间: 2017-6-5 14:10
延迟太短,建议延长
作者: dyalexamor    时间: 2017-6-5 14:52

延时时间太短了
作者: 依然是你    时间: 2017-6-5 15:11
闪的太快了 人家区别不出来了
作者: sicelex    时间: 2017-6-5 15:22
延时时间短了些
作者: lancong    时间: 2017-6-5 16:50
延时太短,灯光的闪烁眼睛捕捉不到,延长时间就可以了
作者: cherishqwer    时间: 2017-6-5 18:15
延时应该长一点人的视觉残留效应
作者: qwert55n    时间: 2017-6-6 10:16
灯在闪,只是你看不清楚,它的亮度低于正常的发光亮度
作者: lovexeon    时间: 2017-6-6 21:56
用for循环让delay500us()多运行几次,50微秒的闪烁频率眼睛是分辨不出来的
作者: 13852833337    时间: 2017-6-9 08:51
延迟设置为50000试试
作者: 梅花    时间: 2017-6-9 18:09
延时时间太短,人的肉眼无法看到变化,加大延时时间20毫秒以上就可以了
作者: 223342105    时间: 2017-6-9 19:37
延时短。一般500ms吧
作者: 666到家    时间: 2017-6-9 20:40
延时函数都写成delay500us(2000);   这样就会每隔一秒闪烁
作者: 1546306199    时间: 2017-6-9 22:15
人的视觉停留时间为50ms到200ms,所以延时程序要改到50ms以上
作者: 鸵鸟不会飞    时间: 2017-6-10 09:47
看你的程序是由于延时时间太短造成的,你可以借助示波器看一下波形你就会知道。应该还有一个现象就是你这个灯的亮度会比正常灯的亮度要低。因为灯不是一直工作,是间歇性工作的。
作者: 仙尘猫爷爷    时间: 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);
}
作者: 欣然相惜    时间: 2017-6-10 14:52
延时太短 建议加长就行了
作者: 123456x    时间: 2017-6-10 16:35
把a改成13000,b改成13000,就行了
作者: 123456x    时间: 2017-6-10 16:36
zl2168 发表于 2017-6-4 08:32
至少0.1s

一般设置a=13000,b=13000
作者: 树叶的人生    时间: 2017-6-10 17:54
延时这么短的时间,灯熄灭你也看不到啊
作者: tomorrow1    时间: 2017-6-10 20:22
延时太短了
作者: renh12    时间: 2017-6-11 10:25
1. 端口配置是否正确    2. 延时时间是否太短
作者: dragon19790000    时间: 2017-6-11 18:36
延时问题,加大延时,一秒
作者: 秦@    时间: 2017-6-11 22:59
延时时间太短肉眼不能看不出来效果,100ms左右,根据你的需求调整时间
作者: zyb8548345113    时间: 2017-6-11 23:17
延迟时间太短
作者: zyb8548345113    时间: 2017-6-11 23:18
修改延迟时间
作者: huhulala    时间: 2017-6-12 11:02
闪烁的延时一般用毫秒就好,微秒太快,人的视觉转换不过来,就会看到灯一直亮着
作者: 追命三狼    时间: 2017-6-12 11:17
给a和b都乘以一个10就行
作者: 屁哥帅帅    时间: 2017-6-12 14:52
延时太短
作者: liujunsudu    时间: 2017-6-12 15:44
好像是由于延时时间太短造成的,你可以借助示波器看一下波形你就会知道
作者: wangamin    时间: 2017-6-12 16:15
延时函数时间设置太短了
作者: 李紫宸    时间: 2017-6-12 20:41
void delay(uchar z)
{uchar i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);}

作者: 李紫宸    时间: 2017-6-12 20:42
修改延时时间
作者: 何qiaoqiao    时间: 2017-6-13 10:02
延时问题吧
作者: 老蒋家的木头    时间: 2017-6-13 10:41
眼睛反应不过来啊

作者: 骑士必胜    时间: 2017-6-13 12:12
延时时间太短了
作者: 随风消逝    时间: 2017-6-13 12:43
延时太短
作者: mas    时间: 2017-6-13 13:10
延时太短;再说你的延时程序是什么哦,看不懂
作者: year1987    时间: 2017-6-13 14:56
修改延时参数至500ms,500us对于肉眼来说太快了,分辨不出来是否闪烁,一般来讲要延时时间要大于200ms,肉眼才可以有效分辨
作者: luciferlike    时间: 2017-6-14 11:17
DELAY時間太短其實你上示波器應該就看的到ON OFF 只是你眼睛看不到
DELAY來個100ms應該又可以看出來
作者: 13705132095    时间: 2017-6-14 11:50
修改一下delay后面的时间
作者: 啦啦啦啦。    时间: 2017-6-14 13:44
你可以把延时时间改为1000
作者: gyt    时间: 2017-6-14 16:04
灯坏了么
作者: 一世顾你    时间: 2017-6-14 19:11
延时太短
作者: hhy961228    时间: 2017-6-14 20:40
灯是一直闪烁的,但人眼有识别的时间,如果灯闪烁时间比人眼识别时间还短的话,那当然看得就是一直亮了




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