火锅下位机例程: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);
    }
  }
}
binglin (2009-4-13 16:47:56)
学习中...
catwill (2009-4-13 20:00:27)
看不太懂,日后再仔细分析……
bjtuwei (2009-4-13 23:52:49)
[i=s] 本帖最后由 bjtuwei 于 2009-4-13 23:54 编辑

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