| 本帖最后由 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份。 在通过定时器在设定的时间到时修改占空比。从而达到效果。
 整体思路如此。 比较简单
 完整工程如下:
 
 困死了,睡觉去!
 |