STM32单片机学习心得3:状态机编程思想以及回调函数的使用

/* Private variables----------------------------------------------------------*/
static void LED_Fun(uint8_t,void(*Callback)(uint8_t));

/* Public variables-----------------------------------------------------------*/
LED_t LED = 
{
	LED_Fun,
};

/* Private function prototypes------------------------------------------------*/      

/*
	* @name   LED_Fun
	* @brief  LED¹¦Äܺ¯Êý£¬ÖмäÐéÄ⺯Êý
	* @param  Num -> ±àºÅ£¬Callback ->»Øµ÷º¯ÊýÖ¸Õë
	* @retval None      
*/
static void LED_Fun(uint8_t LED_Num,void(*Callba)(uint8_t))
{
	(*Callba)(LED_Num);
}


/*
	* @name   LED_ON
	* @brief  ´ò¿ªLED
	* @param  Num -> 񅧏
	* @retval None      
*/
void LED_ON(uint8_t LED_Num)
{
	//Ìõ¼þÑ¡ÔñÓï¾ä
	switch(LED_Num)
	{
		case LED1: HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET); break;
		case LED2: HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_SET); break;
		case LED3: HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,GPIO_PIN_SET); break;
		default: System.Assert_Failed();
	}
}

/*
	* @name   LED_OFF
	* @brief  ¹Ø±ÕLED
	* @param  Num -> 񅧏
	* @retval None      
*/
void LED_OFF(uint8_t LED_Num)
{
	//Ìõ¼þÑ¡ÔñÓï¾ä
	switch(LED_Num)
	{
		case LED1: HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET); break;
		case LED2: HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET); break;
		case LED3: HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,GPIO_PIN_RESET); break;
		default: System.Assert_Failed();
	}
}

/*
	* @name   LED_Flip
	* @brief  È¡·´LED
	* @param  Num -> 񅧏
	* @retval None      
*/
void LED_Flip(uint8_t LED_Num)
{
	//Ìõ¼þÑ¡ÔñÓï¾ä
	switch(LED_Num)
	{
		case LED1: HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin); break;
		case LED2: HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin); break;
		case LED3: HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin); break;
		default: System.Assert_Failed();
	}
}
/* Private function prototypes------------------------------------------------*/
static void Fun_STA1(void);
static void Fun_STA2(void);
static void Fun_STA3(void);
static void Fun_STA4(void);
static void Fun_STA5(void);

/* Public variables-----------------------------------------------------------*/
//½á¹¹Ì嶨Òå    
STA_Machine_t   STA_Machine = 
{
	STA1,
	
	Fun_STA1,
	Fun_STA2,
	Fun_STA3,
	Fun_STA4,
	Fun_STA5,
};

/*
	* @name   Fun_STA1 - 5
	* @brief  ״̬º¯Êý
	* @param  None
	* @retval None      
*/
void Fun_STA1()
{
	HAL_Delay(500);             //ÑÓʱ500ms
	LED.LED_Fun(LED1,LED_Flip); //·­×ªLED1,ÃðµÆ
	LED.LED_Fun(LED2,LED_Flip); //·­×ªLED2,ÃðµÆ
	LED.LED_Fun(LED3,LED_Flip); //·­×ªLED3,ÃðµÆ
	
	//״̬»úÇл»ÖÁ״̬2
	STA_Machine.ucSTA_Machine_Status = STA2;
}

void Fun_STA2()
{
	HAL_Delay(500);            //ÑÓʱ500ms
	LED.LED_Fun(LED1,LED_ON);  //LED1ÁÁµÆ
	LED.LED_Fun(LED2,LED_OFF); //LED2ÃðµÆ
	LED.LED_Fun(LED3,LED_OFF); //LED3ÃðµÆ
	
	//״̬»úÇл»ÖÁ״̬3
	STA_Machine.ucSTA_Machine_Status = STA3;
}

void Fun_STA3()
{
	HAL_Delay(500);            //ÑÓʱ500ms
	LED.LED_Fun(LED1,LED_OFF); //LED1ÃðµÆ
	LED.LED_Fun(LED2,LED_ON);  //LED2ÁÁµÆ
	LED.LED_Fun(LED3,LED_OFF); //LED3ÃðµÆ
	
	//״̬»úÇл»ÖÁ״̬4
	STA_Machine.ucSTA_Machine_Status = STA4;
}

void Fun_STA4()
{
	HAL_Delay(500);            //ÑÓʱ500ms
	LED.LED_Fun(LED1,LED_OFF); //LED1ÃðµÆ
	LED.LED_Fun(LED2,LED_OFF); //LED2ÃðµÆ
	LED.LED_Fun(LED3,LED_ON);  //LED3ÁÁµÆ
	
	//״̬»úÇл»ÖÁ״̬5
	STA_Machine.ucSTA_Machine_Status = STA5;
}

void Fun_STA5()
{
	HAL_Delay(500);            //ÑÓʱ500ms
	LED.LED_Fun(LED1,LED_ON);  //LED1ÁÁµÆ
	LED.LED_Fun(LED2,LED_ON);  //LED2ÁÁµÆ
	LED.LED_Fun(LED3,LED_ON);  //LED3ÁÁµÆ
	
	//״̬»úÇл»ÖÁ³õʼ״̬1
	STA_Machine.ucSTA_Machine_Status = STA1;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值