打印

【GD32评测】花样流水灯

[复制链接]
807|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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);
}


使用特权

评论回复
沙发
gaoyang9992006|  楼主 | 2020-4-21 20:35 | 只看该作者
Running_LED.zip (82.11 KB)
这个是本次我修改好的花样流水灯代码
GD32E231C_START_Demo_Suites.zip (225.96 KB)
这个是官方的例子资料与库函数



使用特权

评论回复
板凳
gaoyang9992006|  楼主 | 2020-4-21 20:43 | 只看该作者


使用特权

评论回复
地板
gaoyang9992006|  楼主 | 2020-4-21 20:44 | 只看该作者
其实这个是我移植的MM32那个开发板测评我写的花样流水灯的程序,说明GD32的可移植性很好,提供的库函数也很好懂。

使用特权

评论回复
5
天灵灵地灵灵| | 2020-4-22 13:06 | 只看该作者
GD32在国内实力雄厚。

使用特权

评论回复
6
21ic小喇叭| | 2020-4-23 10:56 | 只看该作者
感谢分享,奖励您1000家园币,可以兑换礼品或抽奖

使用特权

评论回复
7
antusheng| | 2020-4-23 15:34 | 只看该作者
这个想法真奇特。

使用特权

评论回复
8
songchenping| | 2020-4-24 08:27 | 只看该作者
能发视频了吗

使用特权

评论回复
9
gaoyang9992006|  楼主 | 2020-4-24 09:02 | 只看该作者

不能啊,那是GIF图片。

使用特权

评论回复
10
heisexingqisi| | 2020-4-25 23:31 | 只看该作者
学习学习

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1939

主题

15842

帖子

204

粉丝