首页 > 其他分享 >光敏电阻控制蜂鸣器(江科大stm32学习笔记)

光敏电阻控制蜂鸣器(江科大stm32学习笔记)

时间:2024-10-20 20:21:23浏览次数:3  
标签:Buzzer GPIOB 光敏电阻 Pin void stm32 GPIO 蜂鸣器

首先,选择模块化编程,使代码结构更加的清晰,整洁,便于更改。此处需要对蜂鸣器部分,光敏电阻传感器部分进行模块化编程。

电路原理图

对蜂鸣器以及光敏电阻传感器的电路原理图进行介绍。

如图所示为蜂鸣器的电路原理图:

采用三级管进行驱动,当PNP的基级引脚接低电平时,蜂鸣器启动,高电平时不启动。

如图所示为光敏电阻的电路原理图:

 查找模块说明书,可知:模块在环境光线亮度达不到设定阈值时,DO端输出高电平,当外界环境光线亮度超过设定阈值时,DO端输出低电平;

硬件电路

主要包括面包板、ST-Link、STM32最小系统板、蜂鸣器模块、光敏电阻传感器模块。

①将最小系统板的3.3v和GND在面包板上进行连接。

②将蜂鸣器的3.3v和GND端口进行连接,I/O口本例中接在PB12上。

③将光敏电阻传感器的3.3v和GND端口进行连接,将DO口连接在PB13上。

程序编写

首先是对蜂鸣器模块进行编写,蜂鸣器模块的.c文件如下:

#include "stm32f10x.h"                  // Device header

void Buzzer_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	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);
	
	GPIO_SetBits(GPIOB, GPIO_Pin_12);
}

void Buzzer_ON(void)//蜂鸣器置低电平打开
{
	GPIO_ResetBits(GPIOB, GPIO_Pin_12);
}

void Buzzer_OFF(void)//蜂鸣器置高电平关闭
{
	GPIO_SetBits(GPIOB, GPIO_Pin_12);
}

void Buzzer_Turn(void)										//端口电平反转
{
	if(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_12) == 0)
	{
		GPIO_SetBits(GPIOB, GPIO_Pin_12);
	}
	else
	{
		GPIO_ResetBits(GPIOB, GPIO_Pin_12);
	}
}

①对蜂鸣器模块进行初始化,主要包括APB2时钟初始化、结构体定义,配置为推挽输出。

②蜂鸣器低电平打开,故采用GPIO_ResetBits函数进行置低电平,写在函数Buzzer_ON中;同理写出函数Buzzer_OFF。

③通过if循环语句进行端口电平反转,但此处不需要进行这一步,只需简单的给PB12置位高低电平即可。

蜂鸣器.h文件如下:

#ifndef _BUZZER_H
#define _BUZZER_H

void Buzzer_Init(void);
void Buzzer_ON(void);
void Buzzer_OFF(void);
void Buzzer_Turn(void);


#endif

然后是光敏电阻模块的.c文件:

#include "stm32f10x.h"                  // Device header


void LightSensor_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  //光敏传感器是上拉输入
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
}

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

①同样先打开APB2时钟,定义结构体变量。

②采用GPIO_ReadInputDataBit函数读取PB13的输入电平,并将其以无符号整型数返回出来。既可以得出是否存在光源。若光源低于阈值,则返回值应该为1高电平,否则为低电平。

光敏电阻.h文件:

#ifndef _LIGHT_SENSOR_H
#define _LIGHT_SENSOR_H_

void LightSensor_Init(void);
uint8_t LightSensor_Get(void);

#endif

最后是主函数文件:

#include "stm32f10x.h"                  // Device header
#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)		//光敏电阻传感器当光线强度低于阈值时,DO段输出高点平。
		{
			Buzzer_ON();				//暗时蜂鸣器打开
		}
		else
		{
			Buzzer_OFF();
		}
	}
}

利用if语句判断返回值是否等于1,即光源强度低于阈值,蜂鸣器打开。否则,蜂鸣器关闭。

总结

此案例为利用光敏传感器对蜂鸣器进行控制,最后的现象为:光源较弱时,蜂鸣器启动;光源较强时,蜂鸣器关闭。

标签:Buzzer,GPIOB,光敏电阻,Pin,void,stm32,GPIO,蜂鸣器
From: https://blog.csdn.net/2403_87367556/article/details/143067101

相关文章

  • stm32入门教程--TIM编码器接口
    TIM编码器接口是一种重要的硬件接口,主要用于接收增量(正交)编码器的信号。以下是对TIM编码器接口的详细介绍:一、功能与作用TIM编码器接口可以接收由编码器旋转产生的正交信号脉冲。这些信号脉冲被用来自动控制一个计数器(CNT)的自增或自减,从而能够指示编码器的位置、旋转方向和......
  • STM32 WINUSB1.0详细适配教程
    废话不多说,先上一个配置好的工程,急于完成适配的可先取走。需要了解原理或者适配后有问题的可继续阅读!通过网盘分享的文件:stm32h750_winusb.rarhttps://pan.baidu.com/s/1ENncscWVfQLHsOEhbe0sXQ?pwd=dr24 提取码:dr24说明:这个工程是基于STM32CUBEIDE1.9.0版本开发,配置了F......
  • 【TFT彩屏移植】STM32F4移植1.8寸TFT彩屏简明教程
    目录一.移植说明二.移植1.例程    物理接口:    延时函数:     底层驱动文件:    GUI界面文件:    测试demo:2.移植至F4创建工程:        调试接口选择SW:        RCC中HSE选择外部晶振:        GPIO配......
  • stm32是世界上最简单的
    例一include"stm32f10x.h"include"generic.h"//1.打开时钟2.配置3.初始化例子:点gpioa的第一个灯voidpin_init(GPIO_TypeDef*GPIOx,,uint16_tGPIO_Pin,GPIOMode_TypeDefGPIO_Mode){//直接调用这个函数if(GPIOx=GPIOA)RCC_APB2PeriphClockCdm(RCC_APB2Perph_GPIO......
  • 二、STM32F103C8T6-定时器
    STM32F103C8T6定时器概述STM32F103C8T6作为一款广泛使用的微控制器,内置多个定时器,能够支持多种计时和控制功能,如精确延时、脉冲宽度调制(PWM)、捕获比较(Capture/Compare)、输入捕获和输出比较等。这些功能在电机控制、信号测量、周期性事件触发等应用中非常常用。STM32F103C8T......
  • 解决一下、在学习江协科技stm32f103开发板操作寄存器无法点亮小灯,但是可以正常熄灭遇
    目录 本人问题:目前搜集网上有关信息有两种解决方案: 本人问题:问题:学习江协科技用操作寄存器的方式进行点亮小灯,代码正确,但是点亮小灯无法点亮,需要重新拔下来下载器再插入电脑USB口才可以点亮。但是熄灭小灯可以正常实现。本人代码:点亮:#include"stm32f10x.h"......
  • STM32 ADC实例解析(1)-寄存器方式
    文章目录一、寄存器列表二、示例代码三、总结优点:缺点:在很长的一段时间里我在项目中都是使用寄存器方式一、寄存器列表__IOuint32_tSR;/!<ADC状态寄存器,地址偏移量:0x00/__IOuint32_tCR1;/!<ADC控制寄存器1,地址偏移量:0x04/__IOuint32_tCR2;/!<ADC控制寄存......
  • STM32 ADC实例解析(1)-HAL+DMA方式
    文章目录一、STM32ADC与DMA的结合使用初始化ADC:配置DMA:启动DMA传输:中断处理(可选):二、示例代码初始化GPIO设置中断设置三、应用优势高效性:减轻CPU负担:灵活性:易用性:随着开发项目的累计,将ADC与DMA结合使用,可以实现高效的数据采集和处理。一、STM32ADC与DMA的结合......
  • 10093-基于STM32的无线串口小型直流电机调速器设计(仿真+原理图+源代码工程+详细介绍说
    10093-基于STM32的无线串口小型直流电机调速器设计(仿真+原理图+源代码工程+详细介绍说明书+proteus)功能描述:直流电机的调速器设计设计,需要设计一个调速与控制系统,是设备可以直接控制和读取信息,并且显示。①设计直流电机转速控制系统;②通过按键调节直流电机转速;③可以在......
  • 10093-基于STM32的无线串口小型直流电机调速器设计(仿真+原理图+源代码工程+详细介绍说
    10093-基于STM32的无线串口小型直流电机调速器设计(仿真+原理图+源代码工程+详细介绍说明书+proteus)功能描述:直流电机的调速器设计设计,需要设计一个调速与控制系统,是设备可以直接控制和读取信息,并且显示。①设计直流电机转速控制系统;②通过按键调节直流电机转速;③可以在......