PWM控制LED渐亮渐灭 2007-08-01 16:58
|
|
|
111流水灯实验通过单片机控制LED的渐亮渐灭,通常在做流水灯时只用到I/O口的两种状态, 就是输出“1”或“0”,对于本实验板的发光二极管,采用了共阳联接(参见 原理图 ),当I/O口输出“0”时,LED就亮,为“1”时,LED就熄。问题来了,既然I/O口只能输出两种状态,如何实现渐亮或渐灭?这就要借助PWM(Pulse width modulation 脉冲宽度调制) |
| 1.PWM简介 |
|
111要理解PWM 先要了解其中两个重要参数,周期T(调制频率f=1/T)和占空比,图1分别标示10%,50%,90%占空比的脉冲信号,对 于固定的模拟信号输入值,例如,9V,占空比10%代表模拟输出值为9x10%=0.9V,同样道理; 50%占空比相当于模拟输出值为4.5V,而 90%占空比相当于模拟输出值为8.1V,下面举个现实例子来说明,参见图2电路,输入电压为9V,电路中有一个开关和一个小灯炮,如 果我们合上开关50ms, 在此时间隔内,灯炮将得到9V的供电,然后再断开开关50ms,在此时间间隔内,灯炮将没有供电,如果我们在 一秒内重复上述开合动作10次,我们可以看到灯炮的亮度与接在4.5V电源时一样。我们定义此种状态为:50%占空比,10Hz的调制频 率(因每秒重复10次)。调制频率也是一个重要的参数,可以想象,图2的电路,如果合上开关持续5秒,断开开关持续5秒,此时的 占空比也是50%,但你是看不到灯炮像接在4.5V电源时的效果的,只能看到灯亮,然后灭,是不连续的。所以说要实现PWM控制,必须 同时满足调制频率和占空比两个参数才可以。 |
图1 |
图2 |
| 2.单片机程序 |
|
111经过以上的介绍,我想大家的思路都出来了吧,在调制频率足够小的前提下,不同的占空对应于不同的电压输出,而不同的电压 对应不同的LED亮度,这样,我们可以通过改变占空比,就可以实现LED的渐亮渐灭控制了。以下C51程序是运用PWM来控制LED( P1_0口)的渐亮渐灭. |
| #include <at89x51.h> #define uchar unsigned char #define uint unsigned int uchar percent,light,times;//percent,times:占空比控制;light:控制渐亮渐灭 void delay();//延时函数 void pulse() interrupt 1 using 0 //定时器0中断服务程序 { TH0 = -500/256; } void main() delay(); } void delay() { |
| 111keil c 程序下载 | hex文件下载 |