武洋洋 发表于 2012-4-6 22:13:17

AT89S52驱动LED灯闪烁失败,求解????

,这是我是用的LED驱动电路。
以下是我使用的LED灯1S闪烁的程序:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led1=P1^0;
uchar num;
void main()
{
        TMOD=0x01;       
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        EA=1;       
        ET0=1;       
        TR0=1;       
        while(1);
}
void T0_time() interrupt 1
{
        TH0=(65536-45872)/256;       
        TL0=(65536-45872)%256;
        num++;          
        if(num==20)       
        {
                num=0;       
                led1=~led1;       
        }
}
但是真正工作的时候,LED灯只是亮了,但没有闪烁,求解????????????????

电子蔡鸟 发表于 2012-4-6 22:27:22

将 if(num==20) 改成 if(num==100)或者更大试试...

arndei 发表于 2012-4-6 22:28:29

本帖最后由 arndei 于 2012-4-6 22:30 编辑

楼主图上是P0口,程序里是P1口;P0口是开漏输出,要加上拉电阻的

turf456 发表于 2012-4-6 22:29:03

三极管用的不好

zyyn123 发表于 2012-4-6 22:33:57

看你接的是哪个接口了,P0口要接上拉电阻的。

Sullivan 发表于 2012-4-7 08:18:44

电路的问题。这是射随,虽说射随输入阻抗高也没高到这个份上。
1,P0是否上拉,1K左右强上拉或直接用推挽端口。
2,10K电阻去掉,射随不需要Rb

lryxr2507 发表于 2012-4-7 08:43:21

void T0_time() interrupt 1
{
      TH0=(65536-45872)/256;      
      TL0=(65536-45872)%256;
      num++;         
      if(num==1)      
      {      
                led1=0;         
      }
   if(num==20)
   {
      led1=1;
    }
if(num==40)
{
    num=0;   
}
}

lryxr2507 发表于 2012-4-7 08:49:47

arndei 正解!

renwocai 发表于 2012-4-7 12:07:55

turf456 发表于 2012-4-6 22:29 static/image/common/back.gif
三极管用的不好

同意。。。

tingfenghu 发表于 2012-4-7 12:30:47

三极管不是这样用吧?这样是射极跟随器.

rclong 发表于 2012-4-7 12:34:58

NPN也好 PNP也好 把负载串接在集电极上

wszyjsw2 发表于 2012-4-7 13:40:07

rclong 发表于 2012-4-7 12:34 static/image/common/back.gif
NPN也好 PNP也好 把负载串接在集电极上

为什么?求解

rclong 发表于 2012-4-7 15:37:13

wszyjsw2 发表于 2012-4-7 13:40 static/image/common/back.gif
为什么?求解

单电源系统(0~5V,0~3.3V)里
如果三极管基集接IO口
要让三极管做电流放大作用 或者饱和导通作用
这样接才能保证

.titrwh 发表于 2012-4-7 15:42:21

wszyjsw2 发表于 2012-4-7 13:40 static/image/common/back.gif
为什么?求解

这个三极管的基本用法,共射接法才能放大饱和,你用射随接法输出电压为基极电压-0.7.                                                                  

surelost2013 发表于 2012-4-7 15:43:23

rclong 发表于 2012-4-7 15:37 static/image/common/back.gif
单电源系统(0~5V,0~3.3V)里
如果三极管基集接IO口
要让三极管做电流放大作用 或者饱和导通作用


就是把D?和R?串在VCC与C,把三极管看成一个受控的开关。

w843387990 发表于 2012-4-7 15:43:31

先看硬件再看软件

rclong 发表于 2012-4-7 15:52:39

surelost2013 发表于 2012-4-7 15:43 static/image/common/back.gif
就是把D?和R?串在VCC与C,把三极管看成一个受控的开关。

NPN管就是串在VCC与C之间
驱动继电器 小型直流电机 都可以用这个办法

我个人偏向于使用PNP管 负载串在C与GND间
这样做能是IO为低电平时导通 上电复位阶段不容易误动作 而且低电平驱动能力较强
http://www.eefocus.com/data/09-01/4155_1231159270/1231405156.jpg

zbn2010 发表于 2012-4-8 20:22:47

这个图其实是可以工作的。至于不闪要检查程序和实际接的io口是不是弄错了。

linjpxt 发表于 2012-4-8 21:08:12

比较楼上的接法跟楼主位的接法,各有好处.
楼主的接法是三极管关闭延迟比较小,基极电流也小,但输出电压为基极电压减0.7V,这个要考虑上去,而P0口主要是没有接上接电阻.
楼上的三极管处于开关状态,所以延迟相对大了一点,一般场合都没什么问题的.
页: [1]
查看完整版本: AT89S52驱动LED灯闪烁失败,求解????