led篇第四章渐明渐暗的灯

led篇第四章渐明渐暗的灯

ID:34724111

大小:74.03 KB

页数:9页

时间:2019-03-10

led篇第四章渐明渐暗的灯_第1页
led篇第四章渐明渐暗的灯_第2页
led篇第四章渐明渐暗的灯_第3页
led篇第四章渐明渐暗的灯_第4页
led篇第四章渐明渐暗的灯_第5页
资源描述:

《led篇第四章渐明渐暗的灯》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、LED篇第四章----渐明渐暗的灯看着学习板上的LED按照我们的意愿开始闪烁起来,你心里是否高兴了,我相信你会的。但是很快你就会感觉到太单调,总是同一个频率在闪烁,总是同一个亮度在闪烁。如果要是能够由暗逐渐变亮,然后再由亮变暗该多漂亮啊。嗯,想法不错,可以该从什么地方入手呢。在开始我们的工程之前,首先来了解一个概念:PWM。PWM(PulseWidthModulation)是脉冲宽度调制的英文单词的缩写。下面这段话是通信百科中对其的定义:脉冲宽度调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。脉宽调

2、制是开关型稳压电源中的术语。这是按稳压的控制方式分类的,除了PWM型,还有PFM型和PWM、PFM混合型。脉宽调制式开关型稳压电路是在控制电路输出频率不变的情况下,通过电压反馈调整其占空比,从而达到稳定输出电压的目的。读起来有点晦涩难懂。其实简单的说来,PWM技术就是通过调整一个周期固定的方波的占空比,来调节输出电压的平均当电压,电流或者功率等被控量。我们可以用一个水龙头来类比,把1S时间分成50等份,即每一个等份20MS。在这20MS时间里如果我们把水龙头水阀一直打开,那么在这20MS里流过的水肯定是最多的,如果我们把水阀打开15MS,剩下的5MS关闭水阀,那么流出的水相比刚才2

3、0MS全开肯定要小的多。同样的道理,我们可以通过控制20MS时间里水阀开启的时间的长短来控制流过的水的多少。那么在1S内平均流出的水流量也就可以被控制了。当我们调整PWM的占空比时,就会引起电压或者电流的改变,LED的明暗状态就会随之发生相应的变化,听起来好像可以通过这种方法来实现我们想要的渐明渐暗的效果。让我们来试一下吧。大家都知道人眼有一个临界频率,当LED的闪烁频率达到一定的时候,人眼就分辨不出LED是否在闪烁了。就像我们平常看电视一样,看起来画面是连续的,实质不是这个样子,所有连续动作都是一帧帧静止的画面在1S的时间里快速播放出来,譬如每秒24帧的速度播放,由于人眼的视觉暂

4、留效应,看起来画面就是连续的了。同样的道理,为了让我们的LED在变化的过程中,我们感觉不到其在闪烁,可以将其闪烁的频率定在50Hz以上。同时为了看起来明暗过渡的效果更加明显,我们在这里定义其变化范围为0~99(100等分).即最亮的时候其灰度等级为99,为0的时候最暗,也就是熄灭了。于是乎我们定义PWM的占空比上限为99,下限定义为0#defineLED_PWM_LIMIT_MAX99#defineLED_PWM_LIMIT_MIN0假定我们LED的闪烁频率为50HZ,而亮度变化的范围为0~99共100等分。则每一等分所占用的时间为1/(50*100)=200us即我们在改变LED

5、的亮灭状态时,应该是在200us整数倍时刻时。在这里我们用单片机的定时器产生200us的中断,同时每20MS调整一次LED的占空比。这样在20MS*100=2S的时间内LED可以从暗逐渐变亮,在下一个2S内可以从亮逐渐变暗,然后不断循环。由于大部分的内容都可以在中断中完成,因此,我们的大部分代码都在Timer.c这个文件中编写,主函数中除了初始化之外,就是一个空的死循环。Timer.c内容如下。#include#include"MacroAndConst.h"#defineLEDP0//定义LED接口#defineLED_ON()LED=0x00;//所有LED亮

6、#defineLED_OFF()LED=0xff;//所有LED熄灭#defineLED_PWM_LIMIT_MAX99#defineLED_PWM_LIMIT_MIN0staticuint8s_u8TimeCounter=0;//中断计数staticuint8s_u8LedDirection=0;//LED方向控制0:渐亮1:渐灭staticint8s_s8LedPWMCounter=0;//LED占空比voidTimer0Init(void){TMOD&=0xf0;TMOD

7、=0x01;//定时器0工作方式1TH0=0xff;//定时器初始值(200us中断一次)TL0=0x4

8、7;TR0=1;ET0=1;}voidTime0Isr(void)interrupt1{staticint8s_s8PWMCounter=0;TH0=0xff;//定时器重新赋初值TL0=0x47;if(++s_u8TimeCounter>=100)//每20MS调整一下LED的占空比{s_u8TimeCounter=0;//如果是渐亮方向变化,则占空比递增if((s_s8LedPWMCounter<=LED_PWM_LIMIT_MAX)&&(0==s_u8LedDi

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。