本帖最后由 kyzb001 于 2011-10-20 01:19 编辑
PWM_LED调节亮度。简单的一个小程序....
先描述一下、 需要的结果:在一定时间内 LED等从亮逐渐灭,在冲灭逐渐到亮。
思路,PWM控制,控制占空比。
解决步骤:
第一步:先些一个频率合适的方波脉冲。 调整合适的占空比使得LED灯达到人眼能看到的最暗效果。
第二步:调节高脉冲时间,(注意频率不能变化)
第三步:调节整个亮灭的总时间。
基本的实现的代码如下
#define LED_WHILE_TIME 2000
//调节亮灭时间基准 总时间等于LED_WHILE_TIME*LED_FS_TIME/定时器uTicksPerSecond //(打开定时器时候设置的)
#define LED_FS_TIME 150 //调节脉宽的
#define LED_START_TIME 10
//起始,因为LED从0~x 有一段时间的电压是点不亮LED的。
void TMR_Callback(uint32_t age)
{
time_ms++;
time_200ms++;
if(time_ms<LED_FS_TIME-u32Count)
DrvGPIO_SetBit(E_GPA,2);
else
DrvGPIO_ClrBit(E_GPA,2);
if(time_200ms==LED_WHILE_TIME)
{
time_200ms=0;
if(ledflage)
{
u32Count++;
if(u32Count>=LED_FS_TIME)
ledflage=0;
}
else
{
u32Count--;
if(u32Count<=LED_START_TIME)
ledflage=1;
}
}
if(time_ms>100)
time_ms=0;
}
这个是在定时器中做的1ms的频率。 我分成了140份。 在通过定时器在设定的时间到时修改占空比。从而达到效果。
整体思路如此。 比较简单
完整工程如下:
2011.10.18.rar
(612.21 KB)
困死了,睡觉去! |