};
//这样做的好处,可以同时几个LED同时渐明渐暗,而且好修改,维护
在定义好IO和建立表格之后,再建立三个函数
void LEDSlowShowInit(void) ,//渐明渐暗使能
void LEDSlowShowUnInit(void) ,//渐明渐暗,关闭
void LED_SlowShowProcess(void) ,//渐明渐暗主程序
LEDSlowShowInit:
这个函数主要实现的内容是
1 使能渐明渐暗,标志
2 设置LED的方向,是从暗到明亮还是,从明亮到暗
3 初始化PWM控制变量
LEDSlowShowUnInit
关闭渐明渐暗功能
void LED_SlowShowProcess(void)
{
unsigned int tempi, ledno;
if(gFlag_Sys & c_LedSlowShowFlag) //这里判断渐明渐暗,是否使能
{
if(gLedSlowShowPWMTmp++ >= c_SlowShowPWMStepNum) //判断是否到最大等级
{
gLedSlowShowPWMTmp = 0; //重置计数器
if(gLedSlowShowFlag & c_LedSlowShowUp) //从暗到亮
{
if(gLedSlowShowStep < c_SlowShowPWMStepNum)
gLedSlowShowStep++;
else
gLedSlowShowFlag &= ~c_LedSlowShowUp;
}
else
{
if(gLedSlowShowStep)
gLedSlowShowStep--;
else
{
gLedSlowShowFlag |= c_LedSlowShowUp;
gLedSlowShowPtr++;
if(gLedSlowShowPtr >= sizeof(T_LedSlowShow))
gLedSlowShowPtr = 0;
}
}
}
else
{
Port_IO_Config(c_LEDPort, 0, 5, C_Port_OH); //LED OFF
if(gLedSlowShowPWMTmp <= gLedSlowShowStep)
{
*P_IOB_Buffer &= ~T_LedSlowShow[gLedSlowShowPtr];
}
}
}
}
主要思想:
1 明确需求,分析PWM等级
2 对于要操作的PWM IO,进行合理分配
3 对于不同的需求,最好使用表格思维,和宏定义思维,方便程序修改和维护