STM32实现流水灯

发布于:2023-07-04 ⋅ 阅读:(138) ⋅ 点赞:(0)
 跟51学习进度一样,当我们实现点亮一个灯之后我们就会想着如何点亮流水灯,呼吸灯这两种灯,在51中我们用的整个端口比如说P0口然后利用左移或者右移函数进行流水灯的实现,在32中我们依旧可以采用这种方式,但是由于开发板中连接的LED灯所用的端口不是同一组端口,所以可以直接利用简单的某个灯亮,两外的灯暗来实现。

首先还是先上电路图,我用的还是野火的指南者的开发板
在这里插入图片描述
如图所示,所用的还是共阳极的原理图,要想点亮灯只需要给低电平就好了。要想实现流水灯,就叫而已是其中一个低电平其他全部高电平就好了。
代码如下。首先是GPIO初始化。

void LED_Init(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin,uint32_t RCC_APB2Periph)//灯初始化
{
 GPIO_InitTypeDef GPIO_InitStruct;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph,ENABLE);//打开时钟
 GPIO_InitStruct.GPIO_Pin = GPIO_Pin;//设置引脚
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;//设置方式
 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//设置速度
 GPIO_Init(GPIOx,  &GPIO_InitStruct);//引脚初始化
}
void delay(uint32_t count)//延时函数
{
 for(;count!=0;count--);
 
}

初始化之后在main函数中开始编写流水灯。代码如下。

 LED_G_Init(GPIOB, GPIO_Pin_0,RCC_APB2Periph_GPIOB);
 LED_G_Init(GPIOB, GPIO_Pin_0,RCC_APB2Periph_GPIOB);
 LED_G_Init(GPIOB, GPIO_Pin_0,RCC_APB2Periph_GPIOB);
 while(1)
 {
  GPIO_ResetBits(GPIOB, GPIO_Pin_0);
  GPIO_SetBits(GPIOB, GPIO_Pin_0);
  GPIO_SetBits(GPIOB, GPIO_Pin_0);
  delay(0xFFFF);
  GPIO_ResetBits(GPIOB, GPIO_Pin_0);
  GPIO_SetBits(GPIOB, GPIO_Pin_0);
  GPIO_SetBits(GPIOB, GPIO_Pin_0);
  delay(0xFFFF);
  GPIO_ResetBits(GPIOB, GPIO_Pin_0);
  GPIO_SetBits(GPIOB, GPIO_Pin_0);
  GPIO_SetBits(GPIOB, GPIO_Pin_0);
  delay(0xFFFF);

这样就实现了流水灯的效果,虽然实现了,但是感觉这种方法很是石板且没有·技术含量,兄弟么有什么方法可以一起讨论一下。

本文含有隐藏内容,请 开通VIP 后查看