LED灯闪烁&LED流水灯设计&蜂鸣器

LED灯闪烁&LED流水灯设计&蜂鸣器

面包板

面包板正面背面图片如图:
在这里插入图片描述
可以看出正负两极共四行的走线是横着来的,其余中心区域是一列一列排布的,这就给了我后续硬件插法的思路.

注意事项
  • 1正负两极的四行的每一行行内可能不是完全连通的,要想将这一行完全连通,可以用跳线连接.

LED灯闪烁

  • 1配置项目工程,新建一个名为"3-1 LED灯闪烁"的文件夹,然后在此文件夹内添上必要的配置文件,配置过程可以参考该博客:Keil新建工程详细过程.
  • 2参考下图将相应硬件配置好
    在这里插入图片描述

应当注意的是:
LED灯的较长的引脚是它的正极,较短的引脚是它的负极.
②至于为什么STM32板子插在面包板的这个位置,可能是因为在这个位置是为了利用面包板中间凹槽的电气隔离特性,确保其所有引脚都能独立使用.

  • 3开始在main.c文件中书写程序,全部代码如下:
#include "stm32f10x.h"                  // Device header
#include "Delay.h"

int main(void){
	//配置时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	//配置GPIO初始化(涉及结构体)
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	//灭灯
	//GPIO_SetBits(GPIOA,GPIO_Pin_0);
	//点灯
	//GPIO_ResetBits(GPIOA,GPIO_Pin_0);
	//其他方式 第三个参数Bit_RESET是将A0引脚置为低电平,Bit_SET是将A0引脚置为高电平
	//GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
	//GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
	while(1){
		GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
		Delay_ms(100);
		GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
		Delay_ms(500);
	}
}

需要说明的是:
①在配置时钟时,根据硬件LED灯的负极是接在A0那一列,所以LED灯归GPIOA的0端口管控,所以要在配置时钟的代码如下:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
该时钟配置代码第一个参数标明配置的设备名称是GPIOA,第二个参数标明启动该时钟.
②依然采用结构体方式来初始化GPIO(没办法,这是该函数规定的),现在GPIO的设备变了,所以初始化函数也应做相应改变.
③有很多支持控制LED灯亮灭的函数:
设置高电平的函数:
GPIO_SetBits(GPIOA,GPIO_Pin_0);
设置低电平的函数:
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
其他方式:第三个参数Bit_RESET是将A0引脚置为低电平,Bit_SET是将A0引脚置为高电平
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
④在while死循环内写入可以控制LED灯周期闪烁的函数:
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
Delay_ms(100);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
Delay_ms(500);入代码片
Delay_ms(unit32_t)函数是引用的外部延迟函数,要在工程中新设置文件夹Systerm,然后引入两个文件:
在这里插入图片描述
引入该文件后,也要进行一系列操作让Keil能找到该文件的目录,同时在编程时引用该文件时要加上头文件:
#include "Delay.h"

注意事项
  • 1注意LED灯负极引脚接入的是A0位置,若在A0位置启用高电平(使用高电平函数),则LED不会亮,因为LED灯正极是高电平,负极如果也是高电平的话,则没有电流产生.

LED流水灯设计

  • 1将硬件作如图连接:
    在这里插入图片描述

  • 2将LED闪烁文件夹复制一份并改名为LED流水灯,用Keil打开,改写main.c函数,改写后的函数如下:

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

int main(void){
	//配置时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	//配置GPIO初始化(涉及结构体)
	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_Writ以十六位值指定哪个端口亮灯,因为低电平点亮(LED灯的负极插在A0口),所以要加上取反符号~
		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 0001
		Delay_ms(500);
		
	}
}

注意事项
  • 1在while死循环内用GPIO_Write();控制流水灯时,第二个函数是想点亮那颗流水灯的16进制地址取反,取反原因是因为低电平点亮.

蜂鸣器

  • 1将硬件作如图连接:
    在这里插入图片描述
  • 2将LED闪烁文件夹复制一份并改名为蜂鸣器,用Keil打开,改写main.c函数,改写后的函数如下:
#include "stm32f10x.h"                  // Device header
#include "Delay.h"

int main(void){
	//配置时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	//配置GPIO初始化(涉及结构体)
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	
	while(1){
		GPIO_ResetBits(GPIOB,GPIO_Pin_12);
		Delay_ms(100);
		GPIO_SetBits(GPIOB,GPIO_Pin_12);
		Delay_ms(700);
	}
}

注意事项
  • 1VCC是蜂鸣器电源接口名称,GND是蜂鸣器接地线名称,VCC接入面包板正极,GND接入面包板负极从而形成回路,有电流流入蜂鸣器.
  • 2本接线图I/O口接入的是STM32板子的GPIOB12号引脚,在现实开发中I/O口可以介入STN32板子的除去A15、B3、B4三个端口任何端口,因为A15、B3、B4是调试端口,非要用这三个端口的话可以进行一些配置.
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

必胜的思想钢印

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

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

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

打赏作者

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

抵扣说明:

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

余额充值