Section 8_蜂鸣器实验

1.蜂鸣器介绍

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。

蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
(1)压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。
(2)电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。

改变单片机引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。
改变输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小。

在这里插入图片描述
左有源 右无源

2.蜂鸣器模块电路

在这里插入图片描述
在这里插入图片描述

3.编写蜂鸣器控制程序

蜂鸣器控制程序主要分为 2 大块:
(1)使能蜂鸣器端口时钟、初始化GPIO。APP新建文件夹beep
(2)主函数控制。

beep.c
#ifndef _beep_H
#define _beep_H

#include "system.h"

#define BEEP_Pin (GPIO_Pin_8)  //定义BEEP管脚
#define BEEP_Port (GPIOF) //定义BEEP端口

#define beep PFout(8)  //BEEP PF8
void BEEP_Init(void);


#endif
beep.h
#include "beep.h"

/*******************************************************************************
* 函 数 名         : BEEP_Init
* 函数功能		   : 蜂鸣器初始化
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void BEEP_Init(void) 
{
	GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE); //使能端口F时钟
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT; //输出模式
	GPIO_InitStructure.GPIO_Pin=BEEP_Pin;//管脚设置F8
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//速度为100M
	GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽输出
	GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//上拉
	GPIO_Init(BEEP_Port,&GPIO_InitStructure); //初始化结构体
	
	GPIO_SetBits(BEEP_Port,BEEP_Pin); //关闭蜂鸣器
	
}
main.c
/*******************************************************************************
* 实 验 名		 : 蜂鸣器实验
* 实验说明       : 
* 连接方式       : 
* 注    意		 : 蜂鸣器驱动程序在beep.c内
*******************************************************************************/

#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "beep.h"

/*******************************************************************************
* 函 数 名         : main
* 函数功能		   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
int main()
{
	SysTick_Init(168);
	LED_Init();
	BEEP_Init();
	while(1)
	{
		led1=!led1;
		beep=!beep;
		delay_ms(1000);  //精确延时1s
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值