本帖最后由 xu@xupt 于 2023-9-9 19:46 编辑
#申请开发板# #有奖活动# #申请原创# @21ic小管家【CH32X035评估板测评】2、基于GPIO的呼吸灯实现 1、关于LED灯
CH32X035评估板上有2个LED灯,LED正极与3.3V正电相连,负极可以根据端口进行连接,以实现GPIO对KED的控制。本例中使用PA4控制LED实现呼吸灯效果。
2、关于程序
这段程序主要实现了一个呼吸灯效果。下面是对程序的详细总结:
GPIO_breath_INIT函数用于初始化 GPIOA 的引脚 4,设置为推挽输出模式,并设置输出速度为 50MHz。
ledbreath函数用于控制呼吸灯的亮灭过程。首先将 GPIOA 引脚 4 置为低电平,然后置为高电平,并延时一段时间(t-i)。接着将引脚 4 置为高电平,再置为低电平,并延时一段时间(i)。
在 main 函数中,首先配置中断优先级组为组2,并更新系统时钟。然后初始化延时函数和 GPIO 引脚。
定义了变量 breathTime 和 stopTime,分别表示呼吸灯的总时间和停止时间。
进入无限循环,循环中的第一个 for 循环逐渐增加停止时间,调用 ledbreath 函数实现呼吸灯效果。然后延时1毫秒。
第二个 for 循环逐渐减小停止时间,再次调用 ledbreath 函数实现呼吸灯效果。然后再次延时1毫秒。
无限循环会一直执行上述的呼吸灯效果,实现了呼吸灯的闪烁效果。
总体而言,这段程序通过控制 GPIO 引脚的电平状态和延时函数,实现了一个呼吸灯的效果,让 LED 灯在一定的时间内逐渐变亮和变暗,形成闪烁的效果。
#include "debug.h"
void GPIO_breath_INIT(void)
{
GPIO_InitTypeDef GPIO_InitStructure = {0};
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void ledbreath(uint16_t t,uint16_t i)
{
GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_RESET);
GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_SET);
Delay_Us(i);
GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_RESET);
Delay_Us(t-i);
}
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
SystemCoreClockUpdate();
Delay_Init();
GPIO_breath_INIT();
u16 breathTime=2000,stopTime;
while(1)
{
for(stopTime=1;stopTime<breathTime;stopTime+=1)//这两个参数随便调,只要效果明显就行了,先开始i增加占空比在增大
{
ledbreath(breathTime,stopTime);
}
Delay_Ms(1);
for(stopTime=breathTime;stopTime>1;stopTime-=1)//后占空比开始减小
{
ledbreath(breathTime,stopTime);
}
Delay_Ms(1);
}
}
3、实现效果
|