单片机蜂鸣器控制程序及驱动电路图

蜂鸣器从结构区分分为压电式蜂鸣器和电磁式蜂鸣器。压电式为压电陶瓷片发音,电流比较小一些,电磁式蜂鸣器为线圈通电震动发音,体积比较小。按照驱动方式分为有源蜂鸣器和

大家好,今天给各位分享单片机蜂鸣器控制程序及驱动电路图的一些知识,其中也会对进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

图1 蜂鸣器电路原理图

我们看一下图1的电路,蜂鸣器电流还是比较大的,所以需要用晶体管来驱动,并加了一个100欧的电阻作为限流电阻。另外还增加了一个D4二极管,称为续流二极管。我们的蜂鸣器是一种感应装置。当晶体管导通为蜂鸣器供电时,会有导电电流流过蜂鸣器。而我们知道,电感的特性之一就是电流不能突变。开启后,电流逐渐增大。这没有问题。然而,当它关闭时,“电源-晶体管-蜂鸣器-地”的电路将被切断,没有电流可以流过。那么存储的电流去哪儿了?通过D4环路和蜂鸣器本身消耗掉,从而避免了关断时电感电流造成的反向冲击。关断时继续电流,这就是续流二极管名称的由来。

蜂鸣器通常用于在计算机、打印机和万用表等设备上发出蜂鸣声。蜂鸣声一般很简单,发出声音即可。我们用一个程序简单的发出4KHZ频率的声音和1KHZ频率的声音。方案,学生可以自己研究方案,对比实际效果。

包括

sbit BUZZ=P1^6; //蜂鸣器控制引脚

无符号字符T0RH=0; //T0重载值高字节

无符号字符T0RL=0; //T0重载值低字节

无效OpenBuzz(无符号整数频率);

无效StopBuzz();

无效主(){

无符号整型i;

TMOD=0x01; //配置T0工作在模式1,但还不启动它

EA=1;

while (1){ //启用全局中断

开放嗡嗡声(4000); //启动蜂鸣器,频率为4KHz

对于(i=0;i40000;i++);

停止嗡嗡声(); //停止蜂鸣器

对于(i=0;i40000;i++);

打开嗡嗡声(1000); //以1KHz的频率启动蜂鸣器

对于(i=0;i40000;i++);

停止嗡嗡声(); //停止蜂鸣器

对于(i=0;i40000;i++);

}

}

/* 蜂鸣器启动函数,frequ-工作频率*/

无效OpenBuzz(无符号整数频率){

unsigned int reload;//计算需要的定时器重载值

重新加载=65536 – (11059200/12)/(频率*2); //根据给定频率计算定时器重载值

T0RH=(无符号字符)(重新加载8); //16位重载值分解为高低字节

T0RL=(无符号字符)重新加载;

TH0=0xFF; //设置一个接近溢出的初始值,以便定时器可以立即开始工作

TL0=0xFE;

ET0=1; //使能T0中断

TR0=1; //开始T0

}

/* 蜂鸣器停止函数*/

无效StopBuzz(){

ET0=0; //禁用T0中断

TR0=0; //停止T0

}

/* T0中断服务函数,用于控制蜂鸣器声音*/

void InterruptTimer0() 中断1{

TH0=T0RH; //重新加载重载值

TL0=T0RL;

嗡嗡声=~嗡嗡声; //反转蜂鸣器控制电平

}

另外,用蜂鸣器输出音乐只是为了好玩,应用很少。里面有音阶、乐谱相关的内容,程序有点复杂,就不详细解释了。只有一个程序可以播放《两只老虎》。您可以将其下载到开发板上并玩一下,以满足您的好奇心。

包括

sbit BUZZ=P1^6; //蜂鸣器控制引脚

unsigned int code NoteFrequ[]={ //中频1-7和高音1-7对应的频率列表

523, 587, 659, 698, 784, 880, 988, //中音1-7

1047, 1175, 1319, 1397, 1568, 1760, 1976 //高音1-7

};

unsigned int code NoteReload[]={ //定时器重载对应中音1-7和高音1-7的值

65536 – (11059200/12)/(523*2), //中音1

65536 – (11059200/12)/(587*2), //2

65536 – (11059200/12)/(659*2), //3

65536 – (11059200/12)/(698*2), //4

65536 – (11059200/12)/(784*2), //5

65536 – (11059200/12)/(880*2), //6

65536 – (11059200/12)/(988*2), //7

65536 – (11059200/12)/(1047*2), //高音1

65536 – (11059200/12)/(1175*2), //2

65536 – (11059200/12)/(1319*2), //3

65536 – (11059200/12)/(1397*2), //4

65536 – (11059200/12)/(1568*2), //5

65536 – (11059200/12)/(1760*2), //6

65536 – (11059200/12)/(1976*2), //7

};

位使能=1; //蜂鸣器声音使能标志

位tmrflag=0; //定时器中断完成标志

无符号字符T0RH=0xFF; //T0重载值高字节

无符号字符T0RL=0x00; //T0重载值低字节

单片机蜂鸣器控制程序及驱动电路图

无效PlayTwoTiger();

无效主(){

无符号整型i;

EA=1; //使能全局中断

TMOD=0x01; //配置T0工作在模式1

TH0=T0RH;

TL0=T0RL;

ET0=1; //使能T0中断

TR0=1; //开始T0

而(1){

PlayTwoTiger(); //播放音乐–两只老虎

对于(i=0;i40000;i++); //暂停一段时间

}

}

/* 两只老虎音乐播放函数*/

无效PlayTwoTiger(){

无符号字符节拍; //当前节拍索引

无符号字符注释; //当前节拍对应的音符

无符号整型时间=0; //当前节拍时间

无符号整数beatTime=0; //当前节拍的总时间

无符号整型声音时间=0; //当前节拍所需的发声时间

//二虎注表

无符号字符代码TwoTigerNote[]={

1, 2, 3, 1, 1, 2, 3, 1, 3, 4, 5, 3, 4, 5,

5,6, 5,4, 3, 1, 5,6, 5,4, 3, 1, 1, 5, 1, 1, 5, 1,

};

//二虎米,4表示1拍,1表示1/4拍,8表示2拍

无符号字符代码TwoTigerBeat[]={

4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 4, 8,

3,1, 3,1, 4, 4, 3,1, 3,1, 4, 4, 4, 4, 8, 4, 4, 8,

};

//使用节拍索引作为循环变量

对于(节拍=0;节拍

而(!tmrflag); //每次定时器中断完成后,检测并处理节拍

tmrflag=0;

if (time==0){ //当前节拍播放完后开始新的节拍

note=TwoTigerNote[beat] – 1;

T0RH=NoteReload[注] 8;

T0RL=NoteReload[注释];

//计算总节拍时间。右移2 位相当于除以4。用移位代替除法可以加快执行速度。

beatTime=(TwoTigerBeat[beat] * NoteFreq[note]) 2;

//计算发声时间,为总时间的0.75。换档原理同上。

声音时间=节拍时间- (节拍时间2);

启用=1; //指示蜂鸣器开始发声

时间++;

}else{ //如果当前节拍尚未播放完,则处理当前节拍

//当当前持续时间达到节拍的总时间时重置为零,

//并增加节拍索引以准备开始新的节拍

如果(时间=节拍时间){

时间=0;

击败++;

}else{ //当当前时长未达到总时间时,

时间++; //累计时间计数

//到达发声时间后,指示关闭蜂鸣器。

//插入0.25*总时间的静音间隔,

if (时间==声音时间){

启用=0; //用于区分两个连续的节拍

}

}

}

}

}

/* T0中断服务函数,用于控制蜂鸣器声音*/

void InterruptTimer0() 中断1{

TH0=T0RH; //重新加载重载值

TL0=T0RL;

tmrflag=1;

if (enable){ //启用时反转蜂鸣器控制电平

嗡嗡声=~嗡嗡声;

}else{ //未启用时关闭蜂鸣器

嗡嗡声=1;

}

用户评论

单片机蜂鸣器控制程序及驱动电路图
坠入深海i

终于找到了关于单片机蜂鸣器控制的详细教程!我一直想用蜂鸣器实现一些简单的提示音效果,现在看起来很容易就能做到。

    有19位网友表示赞同!

单片机蜂鸣器控制程序及驱动电路图
凉月流沐@

单片机蜂鸣器的控制程序和驱动电路图都看得懂,赞!希望能有更多类似应用案例,让我在实践中学习.

    有7位网友表示赞同!

单片机蜂鸣器控制程序及驱动电路图
你与清晨阳光

这篇文章真是太实用了!之前尝试过控制蜂鸣器的时候总是遇到各种问题,这篇文章解决了我的很多疑惑。感谢作者分享经验!

    有19位网友表示赞同!

单片机蜂鸣器控制程序及驱动电路图
青楼买醉

感觉这个单片机蜂鸣器的驱动电路图有点复杂啊,我还在研究学习中,希望自己能完全理解.

    有16位网友表示赞同!

单片机蜂鸣器控制程序及驱动电路图
墨染天下

文章写的太好了,讲解很清晰,连初学者也能看懂。请问作者有没有推荐一些适合控制蜂鸣器的单片机型号呢?

    有17位网友表示赞同!

单片机蜂鸣器控制程序及驱动电路图
我就是这样一个人

我很需要这方面的知识!最近在做一个机器人项目,需要用到蜂鸣器来发出声音提示,不知道用哪个芯片比较好?有什么建议吗?

    有13位网友表示赞同!

单片机蜂鸣器控制程序及驱动电路图
陌潇潇

想问一下在实际电路搭建过程中是否需要注意哪些细节?例如选用的蜂鸣器的规格参数等等?

    有11位网友表示赞同!

单片机蜂鸣器控制程序及驱动电路图
拥抱

这个驱动电路图的原理我还没完全看懂,感觉还是需要再深入学习单片机控制知识才能更好地理解.

    有16位网友表示赞同!

单片机蜂鸣器控制程序及驱动电路图
命该如此

我觉得单片机蜂鸣器控制程序比较简单易懂,但是实际操作中却容易出现问题,还是需要多多练习才行!

    有5位网友表示赞同!

单片机蜂鸣器控制程序及驱动电路图
不离我

这个文章很不错!对学习单片机编程非常有帮助。我感觉自己已经能独立完成类似的项目了!

    有11位网友表示赞同!

单片机蜂鸣器控制程序及驱动电路图
爱你的小笨蛋

我想知道除了控制蜂鸣器的音调外,还可以设置其他参数吗?例如蜂鸣器的闪烁频率等等?

    有7位网友表示赞同!

单片机蜂鸣器控制程序及驱动电路图
单身i

在实际应用中,如何选择合适的驱动电路呢?不同的蜂鸣器型号需要不同的驱动方式吗?希望作者能提供一些更具体的指导.

    有15位网友表示赞同!

单片机蜂鸣器控制程序及驱动电路图
颓废i

感觉这篇文章缺乏案例分析,希望能增加一些实际项目案例,以便更好地理解单片机蜂鸣器的控制原理和应用方法.

    有19位网友表示赞同!

单片机蜂鸣器控制程序及驱动电路图
念旧是个瘾。

这篇博文内容丰富,受益匪浅!让我对单片机蜂鸣器有了更深入的了解。期待作者后续分享更多精彩内容!

    有15位网友表示赞同!

单片机蜂鸣器控制程序及驱动电路图
轨迹!

想问一下如果要控制多个蜂鸣器的音调同时变化,应该如何编程?需要使用到的硬件电路有哪些?

    有12位网友表示赞同!

单片机蜂鸣器控制程序及驱动电路图
ー半忧伤

这个程序中的代码注释非常清晰易懂,让我更容易理解每一步操作。这真是一个很棒的学习资源!

    有17位网友表示赞同!

单片机蜂鸣器控制程序及驱动电路图
全网暗恋者

感觉单片机蜂鸣器只能实现简单的音调控制,缺乏创意和趣味性。能不能用其他方法实现更有趣的音效?

    有12位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/177853.html

(0)
小su's avatar小su
上一篇 2024年9月22日 下午2:54
下一篇 2024年9月22日 下午2:57

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注