学完GPIO输出后 各种点灯

  • 流水灯效果:将多个 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);

后续其他点灯程序等我学过继续出这个暑假出完

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值