- 流水灯效果:将多个 LED 灯连接到 STM32 的不同 GPIO 引脚上,通过程序控制这些引脚按顺序轮流输出高低电平,使 LED 灯像流水一样依次点亮和熄灭,可实现从左到右、从右到左或其他自定义顺序的流动效果。
- 呼吸灯效果:利用 PWM(脉冲宽度调制)技术,通过改变输出信号的占空比,让 LED 灯逐渐变亮再逐渐变暗,就像人呼吸一样。例如,先逐渐增大占空比使灯从暗变亮,再逐渐减小占空比使灯从亮变暗,循环往复。
- 闪烁灯效果:通过设置延时函数,让 LED 灯按照一定的时间间隔周期性地亮灭,可调整延时时间来改变闪烁频率,实现快速闪烁或慢速闪烁等不同效果。
- 按键控制点灯:将按键连接到 STM32 的 GPIO 引脚上,检测按键的按下和释放状态。当按键按下时,点亮或熄灭 LED 灯;也可以实现按键多次按下切换不同的点灯模式,如从常亮切换到闪烁等。
- 中断控制点灯:利用 STM32 的外部中断功能,当特定事件触发中断时,如按键按下、外部信号变化等,执行中断服务程序来控制 LED 灯的状态,相比单纯的按键检测,中断方式可以更及时地响应事件,且不占用主程序的循环资源。
- 串口控制点灯:通过串口与 STM32 通信,上位机(如电脑)发送特定指令到 STM32,STM32 根据接收到的指令来控制 LED 灯的点亮、熄灭、改变闪烁模式等,可实现远程或灵活的点灯控制。
- 渐变颜色效果(针对 RGB LED):如果使用 RGB LED,可通过控制 STM32 的多个 GPIO 引脚输出不同占空比的 PWM 信号,分别控制 RGB 三个颜色通道的亮度,从而实现 LED 灯颜色的渐变,如从红色渐变为绿色,再渐变为蓝色等多种颜色变化。
- 与传感器结合点灯:连接各种传感器,如震动传感器、光线传感器等。当传感器检测到相应的信号变化时,如震动、光线强度变化,控制 LED 灯做出响应,如震动时点亮 LED 灯,光线变暗时 LED 灯自动亮起等。
目前只可以 写流水灯和闪烁灯现在我将给出代码
闪烁灯就不给了 只需交替拉高拉低电平中间加上延迟函数即可
流水灯 我建议用一个数组记录我们想要的数据 然后在下方直接改就行了 这样可以做到花式点灯想点哪个点那个只需改变数组中的数据即可
#include "stm32f10x.h" // Device header
#include "Delay.h"
uint16_t fixed_size_array[] = {~0x0001, ~0x0002, ~0x0004, ~0x0008,~0x0010};
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
while (1)
{
GPIO_Write(GPIOA, fixed_size_array[0]);
Delay_ms(500);
GPIO_Write(GPIOA, fixed_size_array[4]);
Delay_ms(500);
GPIO_Write(GPIOA, fixed_size_array[1]);
Delay_ms(500);
GPIO_Write(GPIOA, fixed_size_array[2]);
Delay_ms(500);
GPIO_Write(GPIOA, fixed_size_array[3]);
Delay_ms(500);
}
}
这是hal库大家其实将我的标准库代码给ai让他改成hal库就行 这是一种学习方法 下方的代码就是我拿ai写的 大家可以参考一下
uint16_t fixed_size_array[] = {~0x0001, ~0x0002, ~0x0004, ~0x0008,~0x0011};
GPIOA->ODR = fixed_size_array[0]; // 等价于GPIO_Write(GPIOA, fixed_size_array[0])
HAL_Delay(500); // 替代Delay_ms(500)
GPIOA->ODR = fixed_size_array[4];
HAL_Delay(500);
GPIOA->ODR = fixed_size_array[1];
HAL_Delay(500);
GPIOA->ODR = fixed_size_array[2];
HAL_Delay(500);
GPIOA->ODR = fixed_size_array[3];
HAL_Delay(500);
后续其他点灯程序等我学过继续出这个暑假出完
222

被折叠的 条评论
为什么被折叠?



