51单片机:蜂鸣器


前言

蜂鸣器原理及代码


一、蜂鸣器原理

知识拓展: 根据蜂鸣器发声方式不同,主要分为压电式和电磁式。同时根据蜂鸣器结构,分为有源蜂鸣器和无源蜂鸣器。有源蜂鸣器自带震荡电路,接通电源即可发声。

振荡器电路的作用:产生脉冲信号。

无源蜂鸣器 需要提供一定频率的脉冲信号才能发声,频率一般在 1.5-5KHZ

通过调节脉冲频率可改变音调,通过改变高低电平占空比可以调节音量。

二、蜂鸣器原理图

蜂鸣器正常工作需要约30mA电流,C51芯片是用来控制,如果用C51芯片驱动蜂鸣器,无法保证其他器件正常工作。所以使用时要放大电流来驱动蜂鸣器(使用三级管或下图的ULN2003D)。

ULN2003D 其中一个功能就是放大电流。
在这里插入图片描述
通过C51芯片的P2^5引脚持续输出脉冲信号(即高低电平交替),经过ULN2003D芯片放大电流从BEEP引脚输出到蜂鸣器即可发声。

注意P2^5引脚同时控制着LED6,当脉冲信号在一定频率时,可以观察到LED6的闪烁,这就是为什么在LED实验中会有滴答滴答的声音。

1.蜂鸣器代码

#include "reg52.h"
typedef unsigned int uint  ;
typedef unsigned char uchar	;
sbit BEEP = P2^5 ;

void delay(uint i){
	 while(i--){
	 }
}

void main(){
	uint i=100;//调整脉冲频率
	while(1){
		while(i--){//当i减为0即蜂鸣器关闭,因无脉冲电流
			/*//蜂鸣器响,和LED6闪烁
			delay(1000);
			BEEP = !BEEP;
			delay(1000);
			 */

			 /*调整空占比,从而调整音量,空占比:高电平占一个周期的比例*/
			 BEEP=1;
			 delay(100);
			 BEEP=0;
			 delay(10);
		}
		BEEP=1;	 //关闭第六个LED
		//i=0;//关闭蜂鸣器	
	}
}

2.代码解释

1. 为什么蜂鸣器响,和LED6闪烁中有两个delay()函数?

因为在实验过程中可以顺便同时观察LED6的闪烁,如果不考虑LED6的情况,可以只使用一个delay()函数。

2. 为什么BEEP=1是关闭LED6, 而i=0是关闭蜂鸣器?

因为BEEP是由P2^5引脚控制,P2^5同时控制LED6,对于蜂鸣器BEEP为高电平还是低电平都没有关系,因为只有脉冲信号才能使无源蜂鸣器工作。将BEEP设置为高电平,是因为P2^5默认输出的就是高电平。

i=0是因为不执行内循环,从而不产生脉冲信号,从而使得蜂鸣器关闭。单片机配套的开发攻略这部分代码注释有点问题。


总结

如果要自己做些小玩意,数模电很重要,可惜学不会。

  • 25
    点赞
  • 169
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值