点亮一个时间间隔,亮度时间,次数可控的LED
typedef struct led_contribution //led的相关属性,包括次数,闪烁时间,间隔
{
uint16_t interval[2];
uint16_t num;
}led_con;
led_con red_led;
void led_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD, ENABLE);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = LED_RED_PIN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(LED_RED_PORT, &GPIO_InitStruct);
GPIO_SetBits(LED_RED_PORT, LED_RED_PIN);
led_set(1000, 250, 3);
}
void led_flash(void)
{
static uint32_t now;
static uint8_t i = 0;
if(red_led.num != 0)
{
if(millis() - now >= red_led.interval[i])
{
now = millis();
i++;
if(i > 1)
{
i = 0;
}
if((red_led.num & 1) == 1)
{
RED_OFF;
}
else
{
RED_ON;
}
red_led.num--;
}
}
}
void led_set(uint16_t interval, uint16_t duration, uint16_t num)
{
red_led.interval[0] = interval;
red_led.interval[1] = duration;
red_led.num = num * 2;
}
led_flash();在主函数中循环,时间单位为ms;通过led_set();就能想要按照自己的想法让LED闪烁啦。
当然也可以设置相应的宏给到这些变量。
版权声明:本文为CSDN博主「xinshou249」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xinshou249/article/details/121925847
暂无评论