[STM32火锅(充电器)] 2009-05-03 21:53 我来说两句  

火锅下位机例程:LED(项目编号:SF006-F2-010)

火锅的LED总共有两个,对於火锅板来说,这两个LED是“完全独立”的。
也就是说,是两个独立的类变量,各自控制自己的状态、IO、延时,等等。

以正是LED类的头定义部分:

/*******************************************************************************
** 功能描述: 定义CLED类                                                       **
*******************************************************************************/
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);
    }
  }
}