STM32 流水灯与跑马灯的实现

基于STM32F407实现流水灯与跑马灯

上一章实现了点亮LED灯的实验

添加引脚

根据电路图将LED灯的其他引脚加进来

然后进行宏定义,简化代码

之后我们就将LED1_PIN代替GPIO_Pin_14.........LED4_PIN代替GPIO_Pin_7

三目运算符

我们将LED(0)使LED灯亮 LED(1)使LED灯灭

三目运算符: X?表达式1:表达式2 当x为零时执行表达式2 非零时执行表达式1

cs 复制代码
#define LED1(x)    x?(GPIO_SetBits(GPIOG,LED1_PIN)):(GPIO_ResetBits(GPIOG,LED1_PIN))
#define LED2(x)    x?(GPIO_SetBits(GPIOG,LED2_PIN)):(GPIO_ResetBits(GPIOG,LED2_PIN))
#define LED3(x)    x?(GPIO_SetBits(GPIOG,LED3_PIN)):(GPIO_ResetBits(GPIOG,LED3_PIN))
#define LED4(x)    x?(GPIO_SetBits(GPIOG,LED4_PIN)):(GPIO_ResetBits(GPIOG,LED4_PIN))

delay函数

实现流水灯需要用到延时函数,最简单的延时函数是通过循环将其卡住,实现延时的效果。

想要做到精准的延时需要用到滴答定时器,这里就先复制了(延时函数所有文件都能用得上且代码不变)

cs 复制代码
//延时函数 us级别
void delay_us(uint32_t us)
{
    SysTick->CTRL = 0;          //关闭嘀嗒定时器
    SysTick->LOAD = 21*us-1;   //设置计数21*us-1~0,计数周期是21us-1+1
    SysTick->VAL = 0;          //计数器值清零,会被重装载值覆盖
    SysTick->CTRL = 1;         //清除计算器标志位,设置时钟源是21MH,关闭中断,开启嘀嗒定时器
    while((SysTick->CTRL & 0X00010000) == 0);   //等待标志位从0--》1
    SysTick->CTRL = 0;          //关闭嘀嗒定时器
}


// 普通延迟函数 ms级别
void delay_ms(uint32_t ms)
{
    SysTick->CTRL = 0;
    SysTick->LOAD = 21000*ms-1;
    SysTick->VAL = 0;
    SysTick->CTRL = 1;
    while((SysTick->CTRL & 0X00010000) == 0);
    SysTick->CTRL = 0;
}


// 普通延迟函数 s级别
void delay_s(uint32_t s)
{
    while(s--)
    {
        delay_ms(500);
        delay_ms(500);
    }
}

流水灯操作

方法一:最直接的方法,使灯一个接着一个亮中间加延时

这种方法很麻烦,如果遇到灯组多的情况下需要一直写。

方法二:建立数组用循环实现。

主函数:

同理可以实现跑马灯:

相关推荐
小亮亮虫1 小时前
LwIP UDP RAW
单片机·网络协议·udp
仰望星空的凡人1 小时前
【BUG排查】基于RH850F1KMS1的主控出现系统中断错误,调试FEIC的值为0x11
单片机·bug·rh850·renesas
螺丝钉的扭矩一瞬间产生高能蛋白2 小时前
STM32电机控制基础知识
stm32·单片机·嵌入式硬件·嵌入式软件·直流有刷电机控制·定时器互补输出·定时器死区控制刹车输入
沐欣工作室_lvyiyi2 小时前
基于腾讯云的物联网导盲助手设计与实现(论文+源码)
单片机·物联网·云计算·毕业设计·腾讯云·导盲杖
Blossom.1183 小时前
用一颗MCU跑通7B大模型:RISC-V+SRAM极致量化实战
人工智能·python·单片机·嵌入式硬件·opencv·机器学习·risc-v
hazy1k4 小时前
K230基础-录放音频
人工智能·stm32·单片机·嵌入式硬件·音视频·k230
SundayBear13 小时前
基于STM32的RT-Thread移植
单片机·嵌入式硬件
R6bandito_14 小时前
STM32中printf的重定向详解
开发语言·经验分享·stm32·单片机·嵌入式硬件·mcu
清风66666614 小时前
基于单片机的元胞自动机仿真系统设计
单片机·嵌入式硬件·毕业设计·课程设计
千千道15 小时前
利用keil +RASC给瑞萨RA8D1编译烧写程序
单片机·嵌入式硬件·mcu·物联网