#include "singleLed.h"
#define TRUE 1
#define FALSE 0
Bright_t Br_t;
/** 函数名:BrightLampParams_Init
* 功能 :单色灯初始化
* 输入 :
* 输出 :
* 编写人:XMW
*/
Bright_t* BrightLampParams_Init(void)
{
Br_t.Mode = LedOnMode;
Br_t.BrightPara.FastTimeCount = 500; //ms单位
Br_t.BrightPara.SlowTimeCount = 2000; //ms单位
Br_t.BrightPara.FlashBrightValue = 600; //
Br_t.BrightPara.FastBreathTimeCount = 4000; //ms单位
Br_t.BrightPara.SlowBreathTimeCount = 6000; //ms单位
Br_t.BrightPara.darkTimeCount = 1000;
Br_t.BrightPara.holdTimeCount = 1000;
Br_t.BrightPara.BrightMinValue = 400;
Br_t.BrightPara.BrightMaxValue = 900;
Br_t.BrightPara.BrightMin = 150;
Br_t.BrightPara.BrightMax = 800;
Br_t.BrightPara.dataBrightValue = 600;
Br_t.BrightPara.dataFlashCount = 300;
Br_t.BrightPara.dataFlashNum = 0;
return &Br_t;
}
/** 函数名:BrightIsOn
* 功能 :单色灯亮灭状态
* 输入 :
* 输出 :
* 编写人:XMW
*/
unsigned short BrightIsOn(void)
{
if((Br_t.PwmSetCh1 > 0))
{
return TRUE;
}
return FALSE;
}
/** 函数名:BrigthBreath
* 功能 :常灭模式
* 输入 :
* 输出 :
* 编写人:XMW
*/
void BrightOff(void)
{
Br_t.BrightPara.TimerEnableFlag = FALSE;
Br_t.PwmSetCh1 = 0;//Br_t.BrightPara.BrightMinValue;
Br_t.PwmSetCh2 = 0;//Br_t.BrightPara.BrightMinValue;
}
/** 函数名:BrigthBreath
* 功能 :常亮模式
* 输入 :
* 输出 :
* 编写人:XMW
*/
void BrightOn(uint16_t BrightValue)
{
Br_t.BrightPara.TimerEnableFlag = FALSE;
Br_t.PwmSetCh1 = BrightValue;
Br_t.PwmSetCh2 = BrightValue;
}
/** 函数名:BrigthBreath
* 功能 :闪烁模式
* 输入 :
* 输出 :
* 编写人:XMW
*/
void BrithFlash(uint16_t timecount)
{
Br_t.BrightPara.TimerEnableFlag = TRUE;
if(Br_t.BrightPara.TimerTick < timecount)
{
return;
}
Br_t.BrightPara.TimerTick = 0;
if(BrightIsOn())
{
BrightOff();
}else
{
BrightOn(Br_t.BrightPara.FlashBrightValue);
}
}
/** 函数名:BrigthBreath
* 功能 :呼吸模式
* 输入 :
* 输出 :
* 编写人:XMW
*/
void BrigthBreath(uint16_t timecount)
{
unsigned short t1 = timecount / 2;
unsigned int t2,t3,t4;
float value;
Br_t.BrightPara.TimerEnableFlag = TRUE;
unsigned int Tsum = 0;
//1.计算总时间
Tsum = Br_t.BrightPara.darkTimeCount + t1 + //暗区时间
Br_t.BrightPara.holdTimeCount;
t2 = Br_t.BrightPara.darkTimeCount + t1;
t3 = t2 + Br_t.BrightPara.holdTimeCount;
t4 = t3 + t1;
Tsum = t4;
if(Br_t.BrightPara.TimerTick >= Tsum)
{
Br_t.BrightPara.TimerTick = 0;
}
if(Br_t.BrightPara.TimerTick > 0 && Br_t.BrightPara.TimerTick < Br_t.BrightPara.darkTimeCount)
{
value = Br_t.BrightPara.BrightMin;
}
else if(Br_t.BrightPara.TimerTick >= Br_t.BrightPara.darkTimeCount && Br_t.BrightPara.TimerTick<= t2)
{
value = (float)((Br_t.BrightPara.BrightMax - Br_t.BrightPara.BrightMin) / pow(t1,1.4f)) \
* pow((Br_t.BrightPara.TimerTick-Br_t.BrightPara.darkTimeCount),1.4f) + Br_t.BrightPara.BrightMin;
}
else if(Br_t.BrightPara.TimerTick > t2 && Br_t.BrightPara.TimerTick< t3)
{
value = Br_t.BrightPara.BrightMax;
}
else if(Br_t.BrightPara.TimerTick >= t3 && Br_t.BrightPara.TimerTick<= t4)
{
value = (float)((Br_t.BrightPara.BrightMin - Br_t.BrightPara.BrightMax ) / pow(t1,1.4f)) \
* pow((Br_t.BrightPara.TimerTick - t3),1.4f) + Br_t.BrightPara.BrightMax;
if(value < Br_t.BrightPara.BrightMin )
{
value = Br_t.BrightPara.BrightMin;
}
}
Br_t.PwmSetCh1 = (unsigned short)value;
Br_t.PwmSetCh2 = Br_t.PwmSetCh1;
}
/** 函数名:BrigthData
* 功能 :
* 输入 :
* 输出 :
* 编写人:XMW
*/
void BrigthData(void)
{
Br_t.BrightPara.TimerEnableFlag = TRUE;
static uint8_t num = 0;
if(Br_t.BrightPara.TimerTick < Br_t.BrightPara.dataFlashCount)
{
return;
}
else
{
Br_t.BrightPara.dataFlashTick++;
if(Br_t.BrightPara.dataFlashTick <= 3)
{
BrightOff();
return;
}
else if(Br_t.BrightPara.dataFlashTick > (Br_t.BrightPara.dataFlashNum)*2 +3)
{
Br_t.BrightPara.dataFlashTick = 0;
return;
}
}
if(BrightIsOn())
{
BrightOff();
}else
{
BrightOn(Br_t.BrightPara.dataBrightValue);
}
}
/** 函数名:BrightLampHander
* 功能 :
* 输入 :
* 输出 :
* 编写人:XMW
*/
void BrightLampHander(void)
{
switch((int)Br_t.Mode)
{
case LedOffMode: //灭
BrightOff();
break;
case LedOnMode: //亮
BrightOn(Br_t.BrightPara.BrightMinValue);
break;
case LedOnHighMode: //亮
BrightOn(Br_t.BrightPara.BrightMaxValue);
break;
case LedSlowFlashMode: //闪烁
BrithFlash(Br_t.BrightPara.SlowTimeCount);
break;
case LedFastFlashMode: //闪烁
BrithFlash(Br_t.BrightPara.FastTimeCount);
break;
case LedSlowBreathMode: //呼吸
BrigthBreath(Br_t.BrightPara.SlowBreathTimeCount);
break;
case LedFastBreathMode: //呼吸
BrigthBreath(Br_t.BrightPara.FastBreathTimeCount);
break;
case LedInfoShowMode: //数据显示
BrigthData();
break;
default:
break;
}
}
/** 函数名:BrightLampTick
* 功能 :单色灯计数
* 输入 :
* 输出 :
* 编写人:XMW
*/
void BrightLampTick(uint16_t tick)
{
Br_t.BrightPara.TimerTick+=tick;
}
/** 函数名:BrightLampSet
* 功能 :单色灯模式设置
* 输入 :
* 输出 :
* 编写人:ZJ
*/
void BrightLampSet(int mode)
{
if(mode >= 0 && mode < 7)
{
Br_t.BrightPara.dataFlashTick = 0;
Br_t.Mode = mode;
}
}
/** 函数名:BrightLampGet
* 功能 :单色灯模式获取
* 输入 :
* 输出 :
* 编写人:ZJ
*/
int BrightLampGet(void)
{
return Br_t.Mode;
}
/** 函数名:BrightLampSet
* 功能 :单色灯数据设置
* 输入 :
* 输出 :
* 编写人:ZJ
*/
void BrightInfoSet(uint16_t num)
{
Br_t.BrightPara.dataFlashNum = num;
Br_t.BrightPara.dataFlashTick = 0;
Br_t.Mode = LedInfoShowMode;
}
#ifndef __SIGLELED_H__
#define __SIGLELED_H__
#include "main.h"
typedef enum
{
LedOffMode=0, //关闭模式
LedOnMode=1, //打开模式
LedOnHighMode = 2, //
LedSlowFlashMode, //闪烁模式
LedFastFlashMode, //闪烁模式
LedSlowBreathMode, //呼吸模式
LedFastBreathMode, //呼吸模式
LedInfoShowMode, //数据显示模式
}BrightModeType_e;
typedef struct
{
unsigned short FastTimeCount; //闪烁时间设置
unsigned short SlowTimeCount; //闪烁时间设置
unsigned short FlashBrightValue; //闪烁亮度设置
unsigned short darkTimeCount; //暗区时间设置
unsigned short holdTimeCount; //辉光时间设置
unsigned short FastBreathTimeCount; //呼吸时间设置
unsigned short SlowBreathTimeCount; //呼吸时间设置
unsigned short BrightMax; //最高亮度设置
unsigned short BrightMin; //最低亮度设置
unsigned short TimerTick; //定时器控制
unsigned short TimerEnableFlag; //定时器使能
unsigned short BrightMaxValue; //最高亮度设置
unsigned short BrightMinValue; //最低亮度设置
uint16_t dataFlashCount; //闪烁时间设置
uint16_t dataBrightValue; //闪烁亮度设置
uint16_t dataFlashNum; //闪烁次数
uint16_t dataFlashTick; //闪烁次数记录
}BrightParams_t;
typedef struct
{
BrightModeType_e Mode; //运行模式
BrightParams_t BrightPara;
unsigned short PwmSetCh1;
unsigned short PwmSetCh2;
}Bright_t;
void BrightLampHander(void);
Bright_t* BrightLampParams_Init(void);
void BrightLampSet(int mode);
int BrightLampGet(void);
void BrightLampTick(uint16_t tick);
#endif
Comments | NOTHING