新闻  |   论坛  |   博客  |   在线研讨会
用PWM控制LED
0750long | 2009-04-24 14:49:25    阅读:1829   发布文章

 

 

看我们以前做的流水灯呀,什么的,都是一直亮,有没有想过,让LED渐明渐暗呢?

   好,今天 ,我就教大家一个方法来实现渐明渐暗的LED.这里我们要用到的就是PWM技术,这个在工业上用的很广,希望大家,能通过我的贴子,对PWM有一定的了解。

这里我先给大家简单的说说什么PWM?

PWM的全称是Pulse Width Modulation(脉冲宽度调制)随着电子技术的发展,出现了多种PWM技术,其中包括:相电压控制PWM、脉宽PWM法、随机PWM、SPWM法、线电压控制PWM等,而本文介绍的是在镍氢电池智能充电器中采用的脉宽PWM法。它是把每一脉冲宽度均相等的脉冲列作为PWM波形,通过改变脉冲列的周期可以调频,改变脉冲的宽度或占空比可以调压,采用适当控制方法即可使电压与频率协调变化。可以通过调整PWM的周期、PWM的占空比而达到控制充电电流的目的。

更多的PWM资料大家可以去我的BLOG看看。

网址:http://home.cepark.com/?6136 

我主要是通过程例给大家说如何来控制。。

该程序的硬件电路:就是在P0.0接一个LED.

我们来看程序:

#include <reg52.h>

#define uchar unsigned char

#define uint unsigned int

uchar count,temp;

sbit led=P0^0;    //上面是调函数,申明部分。

void main()

{

 TMOD=0x01;      //用到了定时器0,工作方式1.

 TH0=(65536-500)/256;

 TL0=(65536-500)%256;    //给定时器赋初值,

 EA=1;

 ET0=1; 

 TR0=1;        //上面是打看定时器1中断

 count=1;

 temp=1;       //给我们定义的变量赋初值。

 

 while(1)       //主程序的大循环。

  {  

 

if(count==45)      //当count加到45时,进入这个IF语句。

{

  count=0;

  temp++;    //同时temp加1.

}

if(count<=temp)      //这里就是我们为什么能加渐明渐亮的关键。

{

led=0;        //count,temp这两个变量都会变,只是一个快一个慢

}

else led=1;

    

if(temp==45)        

     temp=0;

 

  }

}

void into() interrupt 1          //这是定时中断,服务程序,定时时间到了。Count加1

{

 TH0=(65536-500)/256;

 TL0=(65536-500)%256;

 count++;

}

下面我来结合上面的程序,说说它是如何实现PWM的。

     大家做过,数码管的动态扫描的话,就一定看到过如里没有写好,不应该亮的数码管亮了,只是亮度不高,为什么会亮,为什么会亮度不高呢?

   因为,他点亮的时间很短,只有几个机器周期,那我们想,如里我们能控制它,不就能实现,明暗不同的LED啦。。!!

 

  对我们就是这样做的,我们这里是用的周期不变,只是高低电平时间变的方面来实现,

 我们再来看看主函数中的大循环中的内容。

if(count==45)                       ①

{

  count=0;

  temp++;

}

if(count<=temp)                     ②

{

led=0;

}

else led=1;

    

if(temp==45)

     temp=0;

一开始,count,temp都是1。中断一次count加1,为2,判断①,不满足,来到②,led=1.灭。

当count加了45次后,temp加1,这时,led能亮的时间为count=1,和count=2;

当再次count加了45次后,temp再加1.led能亮的时间为count=1,count=2,count=3.

这样下去,led亮的时间会越来越长,temp=45后,再重来。!!

   这面,led亮与不亮的时间,就在不断的变化,从而达到了我们的目的。

  大家,可以用PROTEUS来仿真用其中的示波器看到占空比的变化。。很有趣的。!!

呵呵。。。。不难吧。。!!想明白了不难。。可是我刚写这个的时候,还是写了1个小时。。。

   大家可以试试,让亮从暗到明,再从明到暗,还有做一个由明到暗的流水灯,!

我也会把这两个程序写出来。。发在bbs.cepark.com.  大家可以参考下。。!!

     呵呵,我是小雨,希望,大家能和我一起成长!!!!

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客