江科大stm32学习笔记4——LED流水灯

接线:

LED长引脚与第一个LED一致,都插在面包板正极长条上,短引脚从A0排到A7. 

我们将3-1的文件夹复制一份,重命名为“3-2 LED流水灯”,这样就不用重复繁琐的新建工程步骤。

由于我们需要很多LED,所以在GPIOA的端口处需要加一些端口,代码如下:

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;

这里我们使用或运算,右键“GPIO_Pin_0”转到定义可以看到,在定义中Pin0对应的是0x0001,转换为二进制为“0000 0000 0000 0001”,然后“GPIO_Pin_1”对应的就是“0000 0000 0000 0010”依次类推,这里每一个端口对应一位,所以把它们进行按位或的操作,结果就会是“0000 0000 0000 01111”,相当于一次选中了三个端口。最后还有一个“GPIO_Pin_All”,它对应的数据就是0xFFFF,所有位都为1.

除了Pin,时钟控制这一项也是可以用按位或的操作方式来选择多个外设的,“GPIO_SetBits”和“GPIO_ResetBits”也可以。

 当然这里为了方便我们直接写“GPIO_Pin_All”了。

在keil中写下如下代码:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

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_All;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	while(1)                                                                                                                                                                                                  
	{   
		GPIO_Write(GPIOA,~0x0001);	//0000 0000 0000 0001
		Delay_ms(500);
		GPIO_Write(GPIOA,~0x0002);	//0000 0000 0000 0010
		Delay_ms(500);
		GPIO_Write(GPIOA,~0x0004);	//0000 0000 0000 0100
		Delay_ms(500);
		GPIO_Write(GPIOA,~0x0008);	//0000 0000 0000 1000
		Delay_ms(500);
		GPIO_Write(GPIOA,~0x0010);	//0000 0000 0001 0000
		Delay_ms(500);
		GPIO_Write(GPIOA,~0x0020);	//0000 0000 0010 0000
		Delay_ms(500);
		GPIO_Write(GPIOA,~0x0040);	//0000 0000 0100 0000
		Delay_ms(500);
		GPIO_Write(GPIOA,~0x0080);	//0000 0000 1000 0000
		Delay_ms(500);
	}
}

因为这里是低电平点亮,所以在写好数字时候前面加一个“~”按位取反。

编译运行成功后,即可看到流水灯。

  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风痕天际

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值