跟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);
复制代码 ————————————————版权声明:小柳很菜 |