[蜂鸣器不简单]单片机中蜂鸣器的多种运用(长响,短响,多次响)

单片机原理与应用实验——外部中断(C语言&汇编),每次中断使蜂鸣器响3次 (基于51核的STC12C5A60S2,keil uvision5 mdk 5.25 编译) 1. C语言版 #include <STC12C5A60S2.h> sbit LED1 = P2 ^ 4; sbit LED2 = P2 ^ 5; sbit LED3 = P2 ^ 6; sbit LED4 = P2 ^ 7; sbit BEEP = P1 ^ 0; ... 阅读详情

在一般的单片机教材中,对蜂鸣器的使用都有简单的说明。这里就详细展开不同蜂鸣器,不同芯片的蜂鸣器写法了。

不过,在开发项目的时候发现,教材中的蜂鸣器使用存在很大的局限。


在教材中,对于蜂鸣器的长短都是用delay这种忙循环来控制的,但实际中,这种函数不仅对CPU资源有极大浪费,而且会延后其他函数的运行,如果有些时间相关的函数,会造成时间错乱。

此外在蜂鸣器响的过程中,不能进行除了中断之外的任何操作。严格来说,除了主函数是无限循环外,其他的任何对CPU空转的忙循环必须小心使用,而且时间不能过长。一般来说,毫秒级别的忙循环已经是不能容忍了。

另外,这种写法不能灵活的配置长响短响,每隔一定时间响几下等高级功能。


不过经过查阅发现,蜂鸣器的开和关是两个不同的过程。

因此我的实现了蜂鸣器开/关两个函数和配套的其他相关函数。

蜂鸣器开函数的作用是开蜂鸣器,设置时间(长响,短响,中响),设置次数。

蜂鸣器关函数的作用是查询开函数的设置量,决定什么时候关蜂鸣器,什么时候再次开蜂鸣器,什么时候不再开蜂鸣器。

局部全局变量控制次数,定时器全局变量控制时间。

看上面的描述可以确定开函数是随意使用的,而关函数却必须在主函数中不断的循环查询设置量。


下面是函数示例。

一,必要的初始化

//////////////////蜂鸣器时长变量声明/////////////////////
typedef enum 			//开启时间
{
  	BEEP_SHORT  = SEC_01,			//100ms
  	BEEP_MIDDLE = SEC_03,			//300ms
  	BEEP_LONG   = SEC_04  			//400ms
} BEEP_LAST;
typedef enum 		//关闭间隔
{
	BEEP_FAST = SEC_03,
	BEEP_SLOW = SEC_05
} BEEP_SHUT;

static uint8_t		tmp_beep_cnt;				//蜂鸣器计数临时存储
static BEEP_LAST	tmp_beep_on;				//蜂鸣器开启临时存储
static BEEP_SHUT	tmp_beep_period;			//蜂鸣器周期临时存储

二,蜂鸣器开

/************************************************************************/
/* 功能:蜂鸣器响
 * 描述:
 * 形参:开启的持续时间,关闭的持续时间(响一次随意),响次数(>0)
 * 返回:
 * 注意:次数不能写0                             */
/************************************************************************/
void beep_on(BEEP_LAST last, BEEP_SHUT off, uint8_t times)
{
	BEEP_CSR |=1<<5;					//开启蜂鸣器
	freq.beep_on  	 = last;			//响持续
	freq.beep_period = last + off;		//一次开和关的周期

	tmp_beep_on 	= last;
	tmp_beep_period = last + off;
	if(times > 0)
		tmp_beep_cnt = times - 1;
	else
		tmp_beep_cnt = 0;
}

三,蜂鸣器关

/************************************************************************/
/* 功能:蜂鸣器关闭
 * 描述:检测时间flag,为0时关闭,同时将次数减1
 * 形参:
 * 返回:
 * 注意:这是主循环里面的                             */
/************************************************************************/
void beep_off(void)
{
	if (freq.beep_on == 0)				//如果持续时间到了,关闭
	{
		BEEP_CSR &=~(1<<5);				//关闭
		if (tmp_beep_cnt)				//蜂鸣器关闭,但是次数还有,等待条件满足重新打开
		{
			if (freq.beep_period == 0)		//蜂鸣器周期已到
			{
				BEEP_CSR |=1<<5;						//打开蜂鸣器
				freq.beep_on  = tmp_beep_on;			//赋值上一次持续时间
				freq.beep_off = tmp_beep_period;		//蜂鸣器周期重新计数				
				s_beep_cnt--;							//次数减1
			}
		}
	}

}

四,定时器处理,10ms中断一次。

	/*蜂鸣器相关定时*/
	if (freq.beep_on)
		freq.beep_on--;			//蜂鸣器开的持续时间
	if(freq.beep_period)
		freq.beep_period--;		//蜂鸣器周期


单片机蜂鸣器发声,首先是让他一直响 打开Keil 建好我们的工程,和程序文件,并把程序文件添加到工程里面。 这次我们要做一个蜂鸣器,首先先了解蜂鸣器 我们用到的是P3^6这个脚,所以我们在写程序的时候,首先定义的就是蜂鸣器的引脚 #include<reg51.h> sbit FMQ36=P3^6; 想要蜂鸣器发声,那么我们需要的是给蜂鸣器高低电平,这样才能让蜂鸣器发出声音。 这里我们需要的是让蜂鸣器一直响,所以我们将程序写在while里面。 #include<reg51.h> sbit FMQ36=. 阅读详情

相关推荐

51单片机 蜂鸣器

蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。三极管的作用为驱动,通过三极管放大驱动电流,从而可以让蜂鸣器发出声音。   有源蜂鸣器和无源蜂鸣器的区别: 这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带

桃子味的梨 3895

Icon闪烁/设定蜂鸣器响的次数

Icon闪烁框架,其中test_1每50ms定时器中断进入一次。

weixin_46323814的博客 339

保姆级教程:用YOLOv8/9/10搞定仪表盘指针识别,附完整数据集和Python环境配置

本文提供了一份基于YOLOv8/v9/v10的仪表盘指针检测全流程指南,涵盖环境配置、数据集构建、模型选型、训练调优和部署落地等关键步骤。通过详细的代码示例和实战经验,帮助开发者高效解决工业视觉中的仪表盘检测难题,特别适合电力巡检、智能监控等应用场景。

weixin_29031057的博客 1335

单片机蓝桥杯——蜂鸣器、继电器

当Y5C有效时,P0口可以控制蜂鸣器、继电器等,不过,由于单片机驱动能力有限,一般会采用ULN2003等是大电流驱动装置,如图,经过573锁存器输出后接了一个ULN2003,可直接驱动继电器等大电流的装置。需要注意的是ULN2003是个非门电路,输出与输入相反。例如下图中的当P0.6为低电平时,BUZZ为高电平。 蓝桥杯板中的蜂鸣器电路如下,由图可知,当BUZZ为0,即P0.6为1时,蜂鸣器响。 代码如下: #include"reg51.h" sbit fmq=P0^6; ...

weixin_52801934的博客 2988

Nordic BLE芯片RF测试

BLE设备在过蓝牙BQB,FCC,ETSI等各种认证时实验室一般都需要做RF各项指标的测试。Nordic公司的SDK包中提供了两种RF测试程序,一种是DTM,另一种是Radio test。这两种都可以做RF指标测试但各自又有区别。DTM是按照蓝牙规范中Direct test mode所要求数据格式测试(数据格式定义参看:Bluetooth Core Specification v5.0->...

5638

GaN制备micro-led(一)

随着第三代半导体 GaN 材料的快速发展,GaN 基 LED 发展迅速并广泛商业化,这 为可见光通信的实现及应用提供了基础。然而,普通商用 LED 的调制带宽只有几十兆 赫兹,并不能很好的满足可见光通信系统高传播速率的需求。为增大调制带宽,针对发 射端 LED 光源部分的改进仍需提高。将光子晶体结构引入 LED 芯片量子阱内部,能够 影响光子寿命和光子传播,进而改变 LED 芯片的调制带宽和光提取效率。结合倒装微 尺寸(Micro)LED 结构,使其封装体积最小化,这使得可见光通信能够更加灵活地.

weixin_45852211的博客 896

单片机之蜂鸣器

我们很多的案例实际上就是用来检测我们的单片机上的零件等是否能正常使用,我们已经测试了很多的二极管,数码管等,对于我们的发生装置还没有一定的了解,故我们现在学习一下蜂鸣器和可变调的蜂鸣器 蜂鸣器 实验现象 蜂鸣器初始状态是没有发声; 按下按键1,则蜂鸣器开始发声 再次按下按键1,蜂鸣器停止发声 工作原理 电路原理图: 无源蜂鸣器只需改变Beep端口的电平,产生一个周期性的方波即可使蜂鸣器发生声音...

qq_44790423的博客 3220

239号资源-simulink仿真:MATLAB/Simulink教程(PDF文档)-----已提供下载资源

电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python,机器学习,计算机视觉,深度学习,神经网络,数据挖掘领域.电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python,机器学习,计算机视觉,深度学习,神经网络,数据挖掘领域.《《《《《《《《更多资源还请持续关注本专栏》》》》》》》《《《《《《《《更多资源还请持续关注本专栏》》》》》》》论文与完整源程序_电网论文源程序的博客-优快云博客。电网论文源程序-优快云博客。

LIANG674027206的博客 1076

单片机——蜂鸣器

单片机——蜂鸣器

m0_46155417的博客 2525

mtk-drm commit送显流程(二):内核态atomic_commit实现解析

本文深入解析了mtk-drm框架中atomic_commit机制的内核态实现流程,详细介绍了从用户态触发到硬件提交的完整调用链,包括状态检查、硬件提交等关键阶段。特别分析了MTK平台在动态刷新率、内存带宽优化等方面的特有实现策略,为开发者提供了调试技巧和常见问题解决方案。

weixin_30839881的博客 1305

英飞凌Tricore实战系列导读

笔者结合项目应用经验对Tricore MCU的开发及应用经验进一步总结,成人达己,渡己渡人。

initiallizer的博客 3790

51单片机——蜂鸣器的使用

蜂鸣器种类 蜂鸣器分为有源蜂鸣器和无源蜂鸣器: 判断有源蜂鸣器和无源蜂鸣器可用万用表电阻档Rxl档测试:用黑表笔接蜂鸣器“+”引脚,红表笔在另一引脚上来回触碰,如果触发出咔咔声且电阻只有8Ω(或16Ω)的是无源蜂鸣器,如果能发出持续声音的,且电阻在几百Ω以上的,是有源蜂鸣器。 这里的源不是指电源,而是指震荡源。也就是说有源蜂鸣器内部带震荡源。所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直...

qq_44981039的博客 4万+

谱方法学习笔记-下(超详细)

《谱方法学习笔记》深入介绍了傅立叶谱方法在解决偏微分方程问题中的理论和实践,提供了清晰的步骤、Matlab代码以及对一维、二维波动方程等不同问题的解析,适合对谱方法感兴趣的学习者。

图灵的猫的博客 2853

Proteus仿真中蜂鸣器不响

Proteus仿真中无源蜂鸣器不响的一些原因

weixin_74792978的博客 8994

YOLOv8改进策略【Conv和Transformer】| CVPR-2023 BiFormer 稀疏自注意力,减少内存占用

本文记录的是利用双级路由注意力机制优化的目标检测网络模型。传统的复杂度高,随着输入空间分辨率增加,计算量呈平方增长,导致严重的可扩展性问题。而本文所使用的在获取全局信息的同时,通过区域到区域路由和令牌到令牌注意力的合理设计,减少了不必要的计算量。BiFormer: Vision Transformer with Bi-Level Routing Attention采用四阶段金字塔结构,与一些先进的视觉Transformer类似。在每个阶段,首先使用重叠的补丁嵌入(在第一阶段)或补丁合并模块(在第二到第四阶段

Limiiiing的博客 614

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

STM32F103单片机驱动蜂鸣器

  蜂鸣器在电子产品中很常见,几乎现在的家电中都有,主要用来做声音提示。 蜂鸣器从材料上分可以分为压电式蜂鸣器和电磁式蜂鸣器。   压电式蜂鸣器: 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。   电磁式蜂鸣器:电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。 蜂鸣器从驱动方式上可以分为有源蜂鸣器和无源蜂鸣器。   有源蜂鸣器:内部自己带有驱动电路,只要在外部供上点之后,内部电路就会工作,驱动蜂鸣器内部分线圈进行振动,从而发出声音。   无源蜂鸣器:内部没有振荡电路

HXYDJ的博客 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

51单片机蜂鸣器响的c语言代码,让蜂鸣器只响一次的单片机程序写法

/*********************************************************描述:蜂鸣器上电只响一次 ,可以通过按键清除标志位,然后按一次响一次********************************************************/#include "stc15w.h"#include "intrins.h" //包含左移和右移指令...

weixin_39710396的博客 6405

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

51单片机 Proteus仿真有源蜂鸣器始终不响原因及解决方法

Proteus仿真蜂鸣器始终不响原因及解决方法 注意这里讲的有源蜂鸣器驱动 采用PNP管驱动电路 采用低电平驱动方法 采用NPN管驱动电路 采用高电平驱动方法 驱动NPN驱动IO口可以接一个上拉电阻。(经测试,不接上拉电阻,也能鸣响) 使用蜂鸣器注意事项 蜂鸣器默认供电电压是12V需要改为5V供电,否则蜂鸣器仿真不响。 蜂鸣器选型 ...

perseverance51博客 3万+

51单片机之蜂鸣器

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。我们开发板上常用的蜂鸣器就是常常说的交流蜂鸣器或直流蜂鸣器(自激式蜂鸣器)。 直流蜂鸣器是给一定的驱动直流电压就会响。而交流蜂鸣器是需要给蜂鸣器一个脉冲才会响。常见的有PWM波控制蜂鸣器的频率。脉冲就是高低电平的切换,如下图:一个...

嵌入式之斋 2万+

51单片机:蜂鸣器

蜂鸣器原理及代码知识拓展: 根据蜂鸣器发声方式不同,主要分为压电式和电磁式。同时根据蜂鸣器结构,分为有源蜂鸣器和无源蜂鸣器。有源蜂鸣器自带震荡电路,接通电源即可发声。振荡器电路的作用:产生脉冲信号。无源蜂鸣器 需要提供一定频率的脉冲信号才能发声,频率一般在 1.5-5KHZ。通过调节脉冲频率可改变音调,通过改变高低电平占空比可以调节音量。蜂鸣器正常工作需要约30mA电流,C51芯片是用来控制,如果用C51芯片驱动蜂鸣器,无法保证其他器件正常工作。所以使用时要放大电流来驱动蜂鸣器(使用三级管或下图的ULN20

young_monkeysun的博客 2万+

51单片机完全学习——蜂鸣器

蜂鸣器需要不断地接通断开,通过接通和断开的时间间隔,来改变蜂鸣器的声音。主要有两个参数来控制,一个是音调,一个是声音大小。其中音调是受振动频率控制的,就等于控制信号的频率。频率越高音调越高,声音听起来越刺耳。声音大小由硬件决定,不能软件控制。无源蜂鸣器需要一定的频率的波形去控制它,才能发出声音。有源蜂鸣器只需要通电就可以响起来,有源蜂鸣器也可以用频率信号驱动。

2401_83010734的博客 7600

蓝桥杯单片机开发板正确下载程序姿势:解决下载过程中蜂鸣器乱响

蓝桥杯蜂鸣器如何做到在烧写程序不叫蓝桥杯单片机开发板正确下载程序姿势:解决下载过程中蜂鸣器乱响问题现象描述:即使在程序中写了关闭蜂鸣器的程序,但是在下载过程中,蜂鸣器仍然会响。STC-ISP启动 下载程序双击开发板上的S3 电源开关 进行冷启动。双击! 双击! ==双击!==因为在Step1时单片机就已经上电,所以此时的双击是让单片机掉电后马上上电。快速进行双击。总而言之,写了初始化程序,下载过程中蜂鸣器仍然响,是操作的原因。附:初始化代码

#法外狂徒张三的博客 7570

八、51单片机之蜂鸣器

蜂鸣器简介 无源蜂鸣器示例程序

西西弗的博客 8913

51单片机蜂鸣器(无源)

实现51单片机无源蜂鸣器简单功能

2402_83339265的博客 6711

51单片机之蜂鸣器为什么不响

在初学单片机的时候,我们会去玩单片机,玩蜂鸣器。初学者玩蜂鸣器的时候会直接把蜂鸣器接上5V电源或者单片机的引进但发现不响,或者有些蜂鸣器可以响。原因有以下几种: 1、你所使用的蜂鸣器是无源蜂鸣器,蜂鸣器分为无源蜂鸣器和有源蜂鸣器(源指震荡源)。有源蜂鸣器内部有发声电路,直接上电就可以响,而无源蜂鸣器则需要给它一定的脉冲信号(不断高低变化的电压)才会响,脉冲信号的占空比不同,音调就会发声改变。 2、直接接了单片机引脚,单片机引脚的输出能力不足,很难驱动蜂鸣器,一般都是接一个PNP三极管来驱动蜂鸣器。 注:如

weixin_46186673的博客 1万+
上一篇: [STVD可能有bug]向量文件中变量数值不能超过36767(即不能超过2字节)
下一篇: 第一个STM8项目的记录
ZeroSkyrim
博客等级 码龄16年 34粉丝 10原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值