1个按键,按下后可以切换出4种流水灯效果
默认上电是第一种
上代码
main.c
#include "gd32e23x.h"
#include "gd32e231c_start.h"
#include "systick.h"
#include "led.h"
#include "key.h"
#include <stdio.h>
/*!
\brief main function
\param[in] none
\param[out] none
\retval none
*/
int main(void)
{
unsigned char t=1;
systick_config();
LED_Init();
KEY_Init();
while(1)
{
if(KEY_GET())
{
t++;
LED_Blink0();
if(t>4) t=1;
}
switch(t)
{
case 1:
LED_Blink1();
break;
case 2:
LED_Blink2();
break;
case 3:
LED_Blink3();
break;
case 4:
LED_Blink4();
break;
}
}
}
led.h
#include "gd32e231c_start.h"
#include "systick.h"
#define delay_ms delay_1ms
#define LED1_ON() gpio_bit_set(LED1_GPIO_PORT,LED1_PIN)
#define LED1_OFF() gpio_bit_reset(LED1_GPIO_PORT,LED1_PIN)
#define LED1_TOGGLE() gpio_bit_toggle(LED1_GPIO_PORT,LED1_PIN)
#define LED2_ON() gpio_bit_set(LED2_GPIO_PORT,LED2_PIN)
#define LED2_OFF() gpio_bit_reset(LED2_GPIO_PORT,LED2_PIN)
#define LED2_TOGGLE() gpio_bit_toggle(LED2_GPIO_PORT,LED2_PIN)
#define LED3_ON() gpio_bit_set(LED3_GPIO_PORT,LED3_PIN)
#define LED3_OFF() gpio_bit_reset(LED3_GPIO_PORT,LED3_PIN)
#define LED3_TOGGLE() gpio_bit_toggle(LED3_GPIO_PORT,LED3_PIN)
#define LED4_ON() gpio_bit_set(LED4_GPIO_PORT,LED4_PIN)
#define LED4_OFF() gpio_bit_reset(LED4_GPIO_PORT,LED4_PIN)
#define LED4_TOGGLE() gpio_bit_toggle(LED4_GPIO_PORT,LED4_PIN)
void LED_Init(void)
{
/* enable the LED1 GPIO clock */
rcu_periph_clock_enable(LED_GPIO_CLK);
/* configure LED1 GPIO port */
gpio_mode_set(LED_GPIO_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LED1_PIN |LED2_PIN |LED3_PIN |LED4_PIN );
gpio_output_options_set(LED_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LED1_PIN |LED2_PIN |LED3_PIN |LED4_PIN );
/* reset LED1 GPIO pin */
gpio_bit_reset(LED_GPIO_PORT,LED1_PIN |LED2_PIN |LED3_PIN |LED4_PIN );
}
void LED_Blink0(void)
{
LED1_OFF();
LED2_OFF();
LED3_OFF();
LED4_OFF();
}
void LED_Blink1(void)
{
LED1_TOGGLE();
delay_ms(500);
LED2_TOGGLE();
delay_ms(500);
LED3_TOGGLE();
delay_ms(500);
LED4_TOGGLE();
delay_ms(500);
}
void LED_Blink2(void)
{
LED1_ON();
LED4_ON();
delay_ms(500);
LED2_ON();
LED3_ON();
delay_ms(500);
LED1_OFF();
LED4_OFF();
delay_ms(500);
LED2_OFF();
LED3_OFF();
delay_ms(500);
}
void LED_Blink3(void)
{
LED1_ON();
LED2_ON();
LED3_ON();
LED4_ON();
delay_ms(500);
LED1_OFF();
LED2_OFF();
LED3_OFF();
LED4_OFF();
delay_ms(500);
}
void LED_Blink4(void)
{
LED1_ON();
delay_ms(500);
LED1_OFF();
LED2_ON();
delay_ms(500);
LED1_ON();
delay_ms(500);
LED1_OFF();
LED2_OFF();
LED3_ON();
delay_ms(500);
LED1_ON();
delay_ms(500);
LED1_OFF();
LED2_ON();
delay_ms(500);
LED1_ON();
delay_ms(500);
LED1_OFF();
LED2_OFF();
LED3_OFF();
LED4_ON();
delay_ms(500);
LED1_ON();
delay_ms(500);
LED1_OFF();
LED2_ON();
delay_ms(500);
LED1_ON();
delay_ms(500);
LED1_OFF();
LED2_OFF();
LED3_ON();
delay_ms(500);
LED1_ON();
delay_ms(500);
LED1_OFF();
LED2_ON();
delay_ms(500);
LED1_ON();
delay_ms(500);
//执行完一轮,全灭
LED_Blink0();
delay_ms(500);
}
key.h
#include "gd32e231c_start.h"
void KEY_Init(void)
{
/* enable the KEY GPIO clock */
rcu_periph_clock_enable(WAKEUP_KEY_GPIO_CLK);
/* configure KEY GPIO port */
gpio_mode_set(WAKEUP_KEY_GPIO_PORT, GPIO_MODE_INPUT, GPIO_PUPD_NONE, WAKEUP_KEY_PIN);
}
unsigned char KEY_GET(void)
{
return gpio_input_bit_get(WAKEUP_KEY_GPIO_PORT , WAKEUP_KEY_PIN);
}
|