火锅下位机例程:LED(项目编号:SF006-F2-010)
发布: 2009-4-13 14:10 | 作者: aleyn | 来源: StmFans思蜕盟 OPELC 自由电子联盟
火锅的LED总共有两个,对於火锅板来说,这两个LED是“完全独立”的。
也就是说,是两个独立的类变量,各自控制自己的状态、IO、延时,等等。
以正是LED类的头定义部分:
class CLED
{
public:
CLED(u16 GPIO_Pin) {LED_Pin = GPIO_Pin;};
void Init();
void ChangeStatus(LED_Status_Typedef Value);
void PressMessage();
protected:
LED_Status_Typedef LED_Status;
u32 LED_DelayValue;
u8 LED_Data;
u32 LED_Pin;
};
/*******************************************************************************
** 函数名称: CLED::Init() **
** 功能描述: 初始化LED驱动,并初始化IO端口 **
** 输入参数: 无 **
** 输出参数: 无 **
*******************************************************************************/
void CLED::Init()
{
LED_Status = LED_Off;
LED_GPIO.Config(LED_Pin,GPIO_MODE_OUT_PP,GPIO_SPEED_10MHz);
}
/*******************************************************************************
** 函数名称: CLED::ChangeStatus **
** 功能描述: 改变LED显示状态 **
** 输入参数: LED_Status_Typedef Value : 数据 **
** LED_Off : LED 关闭 **
** LED_On : LED 长亮 **
** LED_Flash : LED 以2Hz频率闪 **
** LED_Error : LED 以8Hz频率闪 **
** 输出参数: 无 **
*******************************************************************************/
void CLED::ChangeStatus(LED_Status_Typedef Value)
{
LED_Status = Value;
LED_DelayValue = 0;
LED_Data = 0;
}
/*******************************************************************************
** 函数名称: CLED::PressMessage() **
** 功能描述: 处理LED调度信息 **
** 输入参数: 无 **
** 输出参数: 无 **
*******************************************************************************/
void CLED::PressMessage()
{
u32 DelayValue;
switch (LED_Status)
{
case LED_Off:
{
DelayValue = 0;
LED_GPIO.SetDataBit(LED_Pin, 1);
break;
}
case LED_On:
{
DelayValue = 0;
LED_GPIO.SetDataBit(LED_Pin, 0);
break;
}
case LED_Flash:
{
DelayValue = 80000;
break;
}
case LED_Error:
{
DelayValue = 20000;
break;
}
}
if (DelayValue == 0) return;
if (LED_DelayValue < DelayValue)
{
LED_DelayValue++;
}
else
{
LED_DelayValue = 0;
if (LED_GPIO.GetDataBit(LED_Pin) == 1)
{
LED_GPIO.SetDataBit(LED_Pin, 0);
}
else
{
LED_GPIO.SetDataBit(LED_Pin, 1);
}
}
}
也就是说,是两个独立的类变量,各自控制自己的状态、IO、延时,等等。
以正是LED类的头定义部分:
class CLED
{
public:
CLED(u16 GPIO_Pin) {LED_Pin = GPIO_Pin;};
void Init();
void ChangeStatus(LED_Status_Typedef Value);
void PressMessage();
protected:
LED_Status_Typedef LED_Status;
u32 LED_DelayValue;
u8 LED_Data;
u32 LED_Pin;
};
/*******************************************************************************
** 函数名称: CLED::Init() **
** 功能描述: 初始化LED驱动,并初始化IO端口 **
** 输入参数: 无 **
** 输出参数: 无 **
*******************************************************************************/
void CLED::Init()
{
LED_Status = LED_Off;
LED_GPIO.Config(LED_Pin,GPIO_MODE_OUT_PP,GPIO_SPEED_10MHz);
}
/*******************************************************************************
** 函数名称: CLED::ChangeStatus **
** 功能描述: 改变LED显示状态 **
** 输入参数: LED_Status_Typedef Value : 数据 **
** LED_Off : LED 关闭 **
** LED_On : LED 长亮 **
** LED_Flash : LED 以2Hz频率闪 **
** LED_Error : LED 以8Hz频率闪 **
** 输出参数: 无 **
*******************************************************************************/
void CLED::ChangeStatus(LED_Status_Typedef Value)
{
LED_Status = Value;
LED_DelayValue = 0;
LED_Data = 0;
}
/*******************************************************************************
** 函数名称: CLED::PressMessage() **
** 功能描述: 处理LED调度信息 **
** 输入参数: 无 **
** 输出参数: 无 **
*******************************************************************************/
void CLED::PressMessage()
{
u32 DelayValue;
switch (LED_Status)
{
case LED_Off:
{
DelayValue = 0;
LED_GPIO.SetDataBit(LED_Pin, 1);
break;
}
case LED_On:
{
DelayValue = 0;
LED_GPIO.SetDataBit(LED_Pin, 0);
break;
}
case LED_Flash:
{
DelayValue = 80000;
break;
}
case LED_Error:
{
DelayValue = 20000;
break;
}
}
if (DelayValue == 0) return;
if (LED_DelayValue < DelayValue)
{
LED_DelayValue++;
}
else
{
LED_DelayValue = 0;
if (LED_GPIO.GetDataBit(LED_Pin) == 1)
{
LED_GPIO.SetDataBit(LED_Pin, 0);
}
else
{
LED_GPIO.SetDataBit(LED_Pin, 1);
}
}
}

C++编写框架好清晰啊
要好好学习哦,想高手学习