【STM32】STM32学习笔记-按键控制LED 光敏传感器控制蜂鸣器(08)

00. 目录

文章目录

    • [00. 目录](#00. 目录)
    • [01. 按键控制LED接线图](#01. 按键控制LED接线图)
    • [02. 按键控制LED程序示例](#02. 按键控制LED程序示例)
    • [03. 光敏传感器控制Buzzer接线图](#03. 光敏传感器控制Buzzer接线图)
    • [04. 有源蜂鸣器原理图](#04. 有源蜂鸣器原理图)
    • [05. 光敏传感器控制Buzzer示例](#05. 光敏传感器控制Buzzer示例)
    • [06. 程序示例下载](#06. 程序示例下载)
    • [07. 附录](#07. 附录)

01. 按键控制LED接线图

02. 按键控制LED程序示例

led.h

c 复制代码
#ifndef __LED_H__
#define __LED_H__

void led_init(void);
void led1_on(void);
void led1_off(void);
void led1_turn(void);

void led2_on(void);
void led2_off(void);
void led2_turn(void);

#endif /*__LED_H__*/

led.c

c 复制代码
#include "led.h"

#include "stm32f10x.h"                  // Device header


//LED初始化
void led_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	
	//使能时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	//A1  A2
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStruct);
	
	//设置为高电平
	GPIO_SetBits(GPIOA, GPIO_Pin_1);
	GPIO_SetBits(GPIOA, GPIO_Pin_2);
}

//LED1亮
void led1_on(void)
{
	GPIO_ResetBits(GPIOA, GPIO_Pin_1);
}

//LED1灭
void led1_off(void)
{
	GPIO_SetBits(GPIOA, GPIO_Pin_1);
}

//LED翻转
void led1_turn(void)
{
	if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1) == 0)
	{
		GPIO_SetBits(GPIOA, GPIO_Pin_1);
	}
	else
	{
		GPIO_ResetBits(GPIOA, GPIO_Pin_1);
	}
}


//LED2亮
void led2_on(void)
{
	GPIO_ResetBits(GPIOA, GPIO_Pin_2);
}

//LED2灭
void led2_off(void)
{
	GPIO_SetBits(GPIOA, GPIO_Pin_2);
}

//LED2翻转
void led2_turn(void)
{
	if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_2) == 0)
	{
		GPIO_SetBits(GPIOA, GPIO_Pin_2);
	}
	else
	{
		GPIO_ResetBits(GPIOA, GPIO_Pin_2);
	}
}

key.h

c 复制代码
#ifndef __KEY_H__
#define __KEY_H__

#include "stm32f10x.h"                  // Device header

void key_init(void);

uint8_t key_scan(void);

#endif /*__KEY_H_*/

key.c

c 复制代码
#include "key.h"


#include "delay.h"


//按键初始化
void key_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	
	//使能时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	//B1 B11
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //对于输入用途不大
	GPIO_Init(GPIOB, &GPIO_InitStruct);
}

//按键扫描
uint8_t key_scan(void)
{
	uint8_t ret = 0;
	
	if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0)
	{
		delay_ms(10);
		
		//等待按键抬起
		while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0);
		
		delay_ms(10);
		ret = 1;
	}
	
	
	if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0)
	{
		delay_ms(10);
		
		//等待按键抬起
		while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0);
		
		delay_ms(10);
		ret = 2;
	}
	
	return ret;
}

main.c

c 复制代码
#include "stm32f10x.h"

#include "delay.h"
#include "led.h"
#include "key.h"


 int main(void)
 {	
	led_init();
	key_init();
	 
	 while(1)
	 {
		if (key_scan() == 1)
		{
			led1_turn();
		}
		
		if (key_scan() == 2)
		{
			led2_turn();
		}
	 }
	  
	 return 0;
 }

03. 光敏传感器控制Buzzer接线图

04. 有源蜂鸣器原理图

电路图:

实物图:

05. 光敏传感器控制Buzzer示例

buzzer.h

c 复制代码
#ifndef __BUZZER_H__

#define __BUZZER_H__

#include "stm32f10x.h"  


//蜂鸣器初始化 B12
void buzzer_init(void);


//on
void buzzer_on(void);


//off
void buzzer_off(void);



#endif

buzzere.c

c 复制代码
#include "buzzer.h"



//蜂鸣器初始化 B12
void buzzer_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	
	//使能时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	//B12
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; 
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz; 
	GPIO_Init(GPIOB, &GPIO_InitStruct);
	
	//设置为高电平
	GPIO_SetBits(GPIOB, GPIO_Pin_12);
}

//on
void buzzer_on(void)
{
	GPIO_ResetBits(GPIOB, GPIO_Pin_12);
}


//off
void buzzer_off(void)
{
	//设置为高电平
	GPIO_SetBits(GPIOB, GPIO_Pin_12);	
}

lightsensor.h

c 复制代码
#ifndef __LIGHT_SENSOR_H__
#define __LIGHT_SENSOR_H__


#include "stm32f10x.h"

void lightsensor_init(void);

uint8_t lightsensor_get(void);


#endif /*__LIGHT_SENSOR_H__*/

lightsensor.cpp

c 复制代码
#include "lightsensor.h"

//B13
void lightsensor_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	
	//使能时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	//B1 B11
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //对于输入用途不大
	GPIO_Init(GPIOB, &GPIO_InitStruct);
	
}

uint8_t lightsensor_get(void)
{
	return GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13);
}

main.c

c 复制代码
#include "stm32f10x.h"

#include "delay.h"
#include "led.h"
#include "key.h"
#include "buzzer.h"
#include "lightsensor.h"

 int main(void)
 {	

	buzzer_init();
	lightsensor_init();
	 
	 while(1)
	 {
		 if (lightsensor_get() == 1)
		 {
			buzzer_on();
		 }
		 else
		 {
			buzzer_off();
		 }
	 }
	 
	 
	 return 0;
 }


 

06. 程序示例下载

04-Key控制LED.rar

05-光敏传感器控制蜂鸣器.rar

07. 附录

参考: 【STM32】江科大STM32学习笔记汇总

相关推荐
巴渝小禹4 小时前
单片机死循环delay_us()计算方法
单片机·嵌入式硬件
别动我齐刘海6 小时前
Linux 系统调试学习2
linux·运维·c++·人工智能·学习·机器学习·机器人
科芯创展6 小时前
XZ3445 高集成升压/升降压DC-DC电源芯片技术解析
单片机·嵌入式硬件
m4Rk_6 小时前
【论文阅读】Agent 记忆机制(99):PrisMem——从整体分数搜索走向能力驱动的记忆自进化
论文阅读·人工智能·学习·开源·github
艾芯微科技6 小时前
高充放电流锂电充放 SoC:ETA9885E10,便携储能、小移动电源 BOM 选型笔记
网络·单片机·嵌入式硬件·集成测试·51单片机
艾芯微科技7 小时前
钰泰 ETA6973PQ3Y|QFN3×3 2A 同步降压 Buck,I2C 可配置多档输出,动态调压 PMIC
网络·单片机·嵌入式硬件·fpga开发·集成测试·51单片机
ZZHow10247 小时前
Ascend C算子开发(高级)笔记
c++·人工智能·笔记·深度学习·华为云
Brilliantwxx7 小时前
【STM32】 通用定时器:输入捕获与输出比较详解 测脉宽、测频率
stm32·单片机·嵌入式硬件·mcu
PC2005-cloud8 小时前
Mysql学习笔记:InnoDB Cluster 集群从零搭建实战,基于 Docker 实现高可用读写分离架构
笔记·学习·mysql
小陈phd8 小时前
深入理解agent学习笔记(七)——动态提示词与Skills
笔记·学习