跟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 后查看