蜂鸣器及其实验
创始人
2024-06-02 23:22:15
0

蜂鸣器电路图

蜂鸣器按驱动方式可分为有源蜂鸣器(内含驱动线路)和无源蜂鸣器(外部驱动)。这里的“源”指的是激励源。

无源蜂鸣器内部没有激励源,只有给它一定频率的方波信号,才能让蜂鸣器的振动装置起振,从而实现发声,同时,输入的方波频率不同,发出的声音也不同(所以无源蜂鸣器可以模拟曲调实现音乐效果)。

有源蜂鸣器则不需要外部的激励源,只需要接入直流电源,即可自动发出声音(声音频率相对固定)。

无源蜂鸣器工作原理

无源蜂鸣器需要1.5~2.5kHz(与蜂鸣器种类有关)的音频信号,这个音频信号即一个高低变化频率为1.5-2.5kHz的方波。实际上频率小于1.5kHz也是有声音的,只是不那么准了,可能是嘟嘟声。

蜂鸣器经常用于电脑、打印机、万用表这些设备做提示音,下面是蜂鸣器在 4KHZ 频率下的发声和 1KHZ 频率下的发声程序。

#include sbit BUZZ = P1^6; //蜂鸣器控制引脚unsigned char T0RH = 0; //T0 重载值的高字节
unsigned char T0RL = 0; //T0 重载值的低字节void OpenBuzz(unsigned int frequ);
void StopBuzz();void main()
{unsigned int i;TMOD = 0x01; //配置 T0 工作在模式 1,但先不启动EA = 1; //使能全局中断while (1){OpenBuzz(4000); //以 4KHz 的频率启动蜂鸣器for (i=0; i<40000; i++);StopBuzz(); //停止蜂鸣器for (i=0; i<40000; i++);OpenBuzz(1000); //以 1KHz 的频率启动蜂鸣器for (i=0; i<40000; i++);StopBuzz(); //停止蜂鸣器for (i=0; i<40000; i++);}}/* 蜂鸣器启动函数,frequ-工作频率 */
void OpenBuzz(unsigned int frequ)
{unsigned int reload; //计算所需的定时器重载值reload = 65536 - (11059200/12)/(frequ*2); //由给定频率计算定时器重载值T0RH = (unsigned char)(reload >> 8); //16 位重载值分解为高低两个字节T0RL = (unsigned char)reload;TH0 = 0xFF; //设定一个接近溢出的初值,以使定时器马上投入工作TL0 = 0xFE;ET0 = 1; //使能 T0 中断TR0 = 1; //启动 T0
}/* 蜂鸣器停止函数 */
void StopBuzz()
{ET0 = 0; //禁用 T0 中断TR0 = 0; //停止 T0
}/* T0 中断服务函数,用于控制蜂鸣器发声 */
void InterruptTimer0() interrupt 1
{TH0 = T0RH; //重新加载重载值TL0 = T0RL;BUZZ = ~BUZZ; //反转蜂鸣器控制电平
}

两只老虎

#include sbit BUZZ = P1^5 ; //蜂鸣器控制引脚unsigned int code NoteFrequ[] = { //中音 1-7 和高音 1-7 对应频率列表523, 587, 659, 698, 784, 880, 988, //中音 1-71047, 1175, 1319, 1397, 1568, 1760, 1976 //高音 1-7
} ;unsigned int code NoteReload[] = { //中音 1-7 和高音 1-7 对应的定时器重载值65536 - (11059200/12) / (523*2), //中音 165536 - (11059200/12) / (587*2), //265536 - (11059200/12) / (659*2), //365536 - (11059200/12) / (698*2), //465536 - (11059200/12) / (784*2), //565536 - (11059200/12) / (880*2), //665536 - (11059200/12) / (988*2), //765536 - (11059200/12) / (1047*2), //高音 165536 - (11059200/12) / (1175*2), //265536 - (11059200/12) / (1319*2), //365536 - (11059200/12) / (1397*2), //465536 - (11059200/12) / (1568*2), //565536 - (11059200/12) / (1760*2), //665536 - (11059200/12) / (1976*2), //7
} ;bit enable = 1; //蜂鸣器发声使能标志
bit tmrflag = 0; //定时器中断完成标志unsigned char T0RH = 0xFF; //T0 重载值的高字节
unsigned char T0RL = 0x00; //T0 重载值的低字节void PlayTwoTiger();void main()
{unsigned int i;EA = 1; //使能全局中断TMOD = 0x01; //配置 T0 工作在模式 1TH0 = T0RH;TL0 = T0RL;ET0 = 1; //使能 T0 中断TR0 = 1; //启动 T0while (1){PlayTwoTiger(); //播放乐曲--两支老虎for (i=0; i<40000; i++); //停止一段时间} 
}/* 两只老虎乐曲播放函数 */
void PlayTwoTiger()
{unsigned char beat; //当前节拍索引unsigned char note; //当前节拍对应的音符unsigned int time = 0; //当前节拍计时unsigned int beatTime = 0; //当前节拍总时间unsigned int soundTime = 0; //当前节拍需发声时间//两只老虎音符表unsigned char code 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/4 拍,8 就是 2 拍unsigned char code 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,} ;for (beat=0; beat> 8;T0RL = NoteReload[note];//计算节拍总时间,右移 2 位相当于除 4,移位代替除法可以加快执行速度beatTime = (TwoTigerBeat[beat] * NoteFrequ[note]) >> 2;//计算发声时间,为总时间的 0.75,移位原理同上soundTime = beatTime - (beatTime >> 2);enable = 1; //指示蜂鸣器开始发声time++;}else //当前节拍未播完则处理当前节拍{if (time >= beatTime) //当前持续时间到达节拍总时间时归零,{ //并递增节拍索引,以准备启动新节拍time = 0;beat++;}else //当前持续时间未达到总时间时,{time++; //累加时间计数if (time == soundTime) //到达发声时间后,指示关闭蜂鸣器,{ //插入 0.25*总时间的静音间隔,enable = 0; //用以区分连续的两个节拍}}}} 
}/* T0 中断服务函数,用于控制蜂鸣器发声 */
void InterruptTimer0() interrupt 1
{TH0 = T0RH; //重新加载重载值TL0 = T0RL;tmrflag = 1;if (enable) //使能时反转蜂鸣器控制电平BUZZ = ~BUZZ;else //未使能时关闭蜂鸣器BUZZ = 1;
}
//《世上只有妈妈好》数据表 
code unsigned char sszymmh[] = {
6, 2, 3, 5, 2, 1, 3, 2, 2, 5, 2, 2, 1, 3, 2, 6, 2, 1, 5, 2, 1, 
//一个音符有三个数字。前为第几个音、中为第几个八度、后为时长(以半拍为单位)。
//6, 2, 3 分别代表:6, 中音, 3个半拍;
//5, 2, 1 分别代表:5, 中音, 1个半拍;
//3, 2, 2 分别代表:3, 中音, 2个半拍;
//5, 2, 2 分别代表:5, 中音, 2个半拍;
//1, 3, 2 分别代表:1, 高音, 2个半拍;
//
6, 2, 4, 3, 2, 2, 5, 2, 1, 6, 2, 1, 5, 2, 2, 3, 2, 2, 1, 2, 1,
6, 1, 1, 5, 2, 1, 3, 2, 1, 2, 2, 4, 2, 2, 3, 3, 2, 1, 5, 2, 2,
5, 2, 1, 6, 2, 1, 3, 2, 2, 2, 2, 2, 1, 2, 4, 5, 2, 3, 3, 2, 1,
2, 2, 1, 1, 2, 1, 6, 1, 1, 1, 2, 1, 5, 1, 6, 0, 0, 0};//《烟花易冷》
unsigned char code song1[]={5,2,1, 3,2,1, 2,2,2, 2,2,4, 3,2,1, 1,2,1, 2,2,1, 3,2,4, 5,2,1, 3,2,1, 2,2,2, 2,2,2, 5,1,1, 3,2,1, 4,2,1, 3,2,4, 3,2,1, 3,2,1, 7,2,1, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1, 2,2,1, 3,2,1, 6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1, 1,2,1, 7,1,1, 5,1,1, 6,1,6, 5,2,1, 3,2,1, 2,2,2, 2,2,1, 2,2,1, 3,2,1, 1,2,1, 2,2,1, 3,2,4, 5,2,1, 3,2,1, 2,2,2, 2,2,1, 2,2,1, 5,1,1, 3,2,1, 4,2,1, 3,2,4, 3,2,1, 3,2,1, 7,2,3, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1, 2,2,1, 3,2,1, 6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1, 1,2,1, 7,1,2, 5,1,2, 6,1,6, 0,0,0 };

相关内容

热门资讯

黄庭坚 幽兰赋 黄庭坚 幽兰赋  导语:北宋著名的诗人和书法家的黄庭坚《幽兰赋》家喻户晓,《幽兰赋》是非常经典的作品...
诗人李贺简介 诗人李贺简介  李贺字长吉。河南府福昌县昌谷乡(今河南省宜阳县)人,祖籍陇西郡。唐朝中期浪漫主义诗人...
古诗词的作文 关于古诗词的作文4篇  无论在学习、工作或是生活中,说到古诗,大家肯定都不陌生吧,古诗的格律限制较少...
写桃花的唯美诗句 写桃花的唯美诗句  桃是一种果实作为水果的落叶小乔木,花可以观赏,果实多汁,下面的是写桃花的唯美诗句...
秋雨潇潇的诗句 关于秋雨潇潇的诗句  秋雨,它是丰收的前兆,秋雨会给成熟的庄稼最后一次浇灌,使农民们得到了丰收。  ...
“桃红复含宿雨,柳绿更带朝烟... 桃红复含宿雨,柳绿更带朝烟。 [译文] 桃花的花瓣上还含着昨夜的雨珠,雨后的柳树碧绿一片,笼罩在早上...
酒的古代诗句 有关酒的古代诗句  在生活、工作和学习中,大家或多或少都接触过一些经典的诗句吧,诗句节奏上鲜明有序,...
2023歌颂母亲节诗歌朗诵稿... 母亲节想必大家都不陌生,母亲节是我们全世界都庆祝的一个节日,母亲节同时也是为了表彰母亲为我们社会做出...
庆祝共产党成立100周年正能... 光阴似箭,2021年迎来了共产党成立100周年,党己走过100年的风雨征程。那庆祝共产党成立100周...
你就是那只千年白狐的爱情诗歌 你就是那只千年白狐的爱情诗歌  你就是那只千年白狐,  隐藏在寂寞红尘深处!  你的倩影,  时常掠...
“废话体”诗歌走红 谁还当真... “废话体”诗歌走红 谁还当真记得诗歌  “废话体”,即“乌青体”。继诗人赵丽华“梨花体”走红后,“乌...
庆祝建党100周年诗歌400... 2021年建党100周年,我们是新时代的“弄潮儿”,就要敢于迎接新时代的挑战。那献给建党100周年的...
2022小学生小寒诗歌10首 冬至之后,冷空气频繁南下,气温持续降低,温度在一年的小寒、大寒之际降到最低。小寒是二十四节气之一,那...
鲁迅的诗歌 鲁迅的诗歌  1、《自嘲》  运交华盖欲何求?未敢翻身已碰头。  破帽遮颜过闹市,漏船载酒泛中流。 ...
《心旅》诗歌欣赏 《心旅》诗歌欣赏  《心旅》诗歌欣赏  我想去旅行  从心出发  去往心的另一个目的地  诗是我唯一...
赞美老师的经典诗歌 赞美老师的经典诗歌  诗歌一:老师是海我是船  老师是海我是船  我在海的怀抱里去飘荡远  海风轻轻...
燕子花诗歌 燕子花诗歌  当我第一次遇见你  你还是少女  头上别一朵燕子花  你微笑着对我说  要像小鸟般飞向...
2022青春献礼建党101周... 岁月如梭,历史的指针已经指向了2022年,我们的党已经走过了101个春秋。我们不会忘记优秀的共产党人...
小学一年级诗歌:邂逅你我 小学一年级诗歌:邂逅你我  岁月静好  时光不老  我们却要在这个六月分离  在我最美的三年  我邂...
陶渊明“金刚怒目”式诗歌 陶渊明“金刚怒目”式诗歌  陶渊明一生都在追求出仕,也和当时的社会国家状态有关,使其怀才不遇,以下是...