怎样用stc89c52单片机控制蜂鸣器发出音乐的c语言程序

怎样用stc89c52单片机控制蜂鸣器发出音乐的c语言程序,第1张

#include\r\n#include\r\n//本例采用89C52,晶振为110592MHZ\r\n//关于如何编制音乐代码,其实十分简单,各位可以看以下代码\r\n//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;\r\n//所以拿出谱子,试探编吧!\r\nsbitBeep=P1^5;\r\n\r\nunsignedcharn=0;//n为节拍常数变量\r\nunsignedcharcodemusic_tab[]={\r\n0x18,0x30,0x1C,0x10,//格式为:频率常数,节拍常数,频率常数,节拍常数,\r\n0x20,0x40,0x1C,0x10,\r\n0x18,0x10,0x20,0x10,\r\n0x1C,0x10,0x18,0x40,\r\n0x1C,0x20,0x20,0x20,\r\n0x1C,0x20,0x18,0x20,\r\n0x20,0x80,0xFF,0x20,\r\n0x30,0x1C,0x10,0x18,\r\n0x20,0x15,0x20,0x1C,\r\n0x20,0x20,0x20,0x26,\r\n0x40,0x20,0x20,0x2B,\r\n0x20,0x26,0x20,0x20,\r\n0x20,0x30,0x80,0xFF,\r\n0x20,0x20,0x1C,0x10,\r\n0x18,0x10,0x20,0x20,\r\n0x26,0x20,0x2B,0x20,\r\n0x30,0x20,0x2B,0x40,\r\n0x20,0x20,0x1C,0x10,\r\n0x18,0x10,0x20,0x20,\r\n0x26,0x20,0x2B,0x20,\r\n0x30,0x20,0x2B,0x40,\r\n0x20,0x30,0x1C,0x10,\r\n0x18,0x20,0x15,0x20,\r\n0x1C,0x20,0x20,0x20,\r\n0x26,0x40,0x20,0x20,\r\n0x2B,0x20,0x26,0x20,\r\n0x20,0x20,0x30,0x80,\r\n0x20,0x30,0x1C,0x10,\r\n0x20,0x10,0x1C,0x10,\r\n0x20,0x20,0x26,0x20,\r\n0x2B,0x20,0x30,0x20,\r\n0x2B,0x40,0x20,0x15,\r\n0x1F,0x05,0x20,0x10,\r\n0x1C,0x10,0x20,0x20,\r\n0x26,0x20,0x2B,0x20,\r\n0x30,0x20,0x2B,0x40,\r\n0x20,0x30,0x1C,0x10,\r\n0x18,0x20,0x15,0x20,\r\n0x1C,0x20,0x20,0x20,\r\n0x26,0x40,0x20,0x20,\r\n0x2B,0x20,0x26,0x20,\r\n0x20,0x20,0x30,0x30,\r\n0x20,0x30,0x1C,0x10,\r\n0x18,0x40,0x1C,0x20,\r\n0x20,0x20,0x26,0x40,\r\n0x13,0x60,0x18,0x20,\r\n0x15,0x40,0x13,0x40,\r\n0x18,0x80,0x00\r\n};\r\n\r\nvoidint0()interrupt1//采用中断0控制节拍\r\n{TH0=0xd8;\r\nTL0=0xef;\r\nn--;\r\n}\r\n\r\nvoiddelay(unsignedcharm)//控制频率延时\r\n{\r\nunsignedi=3m;\r\nwhile(--i);\r\n}\r\n\r\nvoiddelayms(unsignedchara)//豪秒延时子程序\r\n{\r\nwhile(--a);//采用while(--a)不要采用while(a--);各位可编译一下看看汇编结果就知道了!\r\n}\r\n\r\nvoidmain()\r\n{unsignedcharp,m;//m为频率常数变量\r\nunsignedchari=0;\r\nTMOD&=0x0f;\r\nTMOD|=0x01;\r\nTH0=0xd8;TL0=0xef;\r\nIE=0x82;\r\nplay:\r\nwhile(1)\r\n{\r\na:p=music_tab[i];\r\nif(p==0x00){i=0,delayms(1000);gotoplay;}//如果碰到结束符,延时1秒,回到开始再来一遍\r\nelseif(p==0xff){i=i+1;delayms(100),TR0=0;gotoa;}//若碰到休止符,延时100ms,继续取下一音符\r\nelse{m=music_tab[i++],n=music_tab[i++];}//取频率常数和节拍常数\r\nTR0=1;//开定时器1\r\nwhile(n!=0)Beep=~Beep,delay(m);//等待节拍完成,通过P1口输出音频(可多声道哦!)\r\nTR0=0;//关定时器1\r\n}\r\n}\r\n\r\n你参考这个吧

蜂鸣器分为有源蜂鸣器无源蜂鸣器,发声方法不同。

有源蜂鸣器直接接上额定电源就可以连续发声;而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能周期性地振动发声。电路应该选用有源蜂鸣器。

蜂鸣器不能够产生变化的声音,如果想判断风速,可以加一个LED灯,通过亮度来判断,不过这个方法也不准确,只能作为参考。

蜂鸣器发声原理。有源自激型蜂鸣器的工作发声原理是:直流电源输入经过振荡系统的放大取样电路在谐振装置作用下产生声音信号。无源他激型蜂鸣器的工作发声原理是:方波信号输入谐振装置转换为声音信号输出。

扩展资料:

注意事项:蜂鸣器是不能用做矿石收音机的,因为,蜂鸣器内部有一个振荡电路,通上电源后就会驱动内部的一个微型喇叭发出蜂鸣声。蜂鸣器可不是一个单纯的小喇叭。另外,蜂鸣器有两种。一种是,内部自带振荡器的;一种是,需要外接一个振荡器的,也就是一个普通的微型喇叭。

对于不带振荡器的那种,也是不能用的,因为它的电阻一般为32欧姆左右,也有8欧或16欧的。这些都属于低阻抗的不能用。如果没有高阻耳机,也可以用一个电源变压器,一般为6V或12V的那种电源变压器,功率选用3到5W左右的那种,因为那种变压器的初级线径很细,圈数也多,阻抗也很大。

是为了使负载获得良好的阻抗匹配,使负载获得最大功率。使用方法是这样的:把变压器的初级(接220V的那个绕组)接到原来要接高阻耳机的那个地方;次级接普通耳机就可以了。

参考资料来源:百度百科--蜂鸣器

完整的源程序:

#include<reg52h>

define uint unsigned int

sbit spk=P1^2; //与喇叭相连接的单片机引脚的定义

void delayms(uint); //延时子函数声明

main()

{

uint i=8; //轰鸣的次数

spk=0; //喇叭的初始状态为不响

while(i) //喇叭鸣响控制核心

{

spk=!spk;

delayms(1000); //延时1000毫秒

i--;

}

}

void delayms(uint ms) //延时子函数

{

uint x,y;

for(x=ms;x>0;x--);

for(y=110;y>0;y--);

}

哥们专门给你写的,看的够明白吧

基于Arduino使⽤低电平触发⽆源蜂鸣器模块

蜂鸣器模块

我们可以使⽤Arduino进⾏很多互动作品,其中最常⽤的是声光显⽰器。之前的所有实验都与LED有关。但是,这个实验中的电路可以产⽣声⾳。通常,实验是通过蜂鸣器或扬声器完成的,⽽蜂鸣器更简单且更易于使⽤。

有源蜂鸣器与⽆源蜂鸣器

有源蜂鸣器与⽆源蜂鸣器有什么区别。这⾥的“源”不是指电源。⽽是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要⼀通电就会叫。⽽⽆源内部不带震荡源,所以如果⽤直流信号⽆法令其鸣叫。必须⽤ 2K~5K 的⽅波去驱动它。有源蜂鸣器往往⽐⽆源的贵,就是因为⾥⾯多个震荡电路。

(低电平触发⽆源蜂鸣器模块)

我们在这⾥介绍的蜂鸣器是⼀种被动式蜂鸣器。它不能由其⾃⾝驱动,⽽是由外部脉冲频率驱动。不同的频率产⽣不同的声⾳ 我们可以使⽤Arduino来编码歌曲的旋律,这实际上⾮常有趣和简单。

产品参数

⼩板PCB尺⼨:32mm14mm

采⽤S8550三级管驱动

⼯作电压:33V-5V

设有固定螺栓孔,⽅⾯安装

当I/O⼝输⼊低电平时,蜂鸣器发声

接线⽅式

(低电平触发⽆源蜂鸣器模块 正⾯)

蜂鸣器 Arduino Nano

GND <------> GND

I/O <------> 9

VCC <------> 33V

程序测试——蜂鸣器发出声⾳

蜂鸣器处于低电平时,会发出声⾳,⽽处于⾼电平,停⽌声⾳发出,即不发出声⾳。编写蜂鸣器声⾳响⼀秒再停⼀秒,以此来检测蜂鸣器是否能正常发出声⾳

Mixly图形化编程程序

(蜂鸣器发出声⾳程序)

程序实现代码

蜂鸣器发出声⾳

void setup(){

pinMode(9, OUTPUT);

}

void loop(){

digitalWrite(9,LOW);

delay(1000);

digitalWrite(9,HIGH);

delay(1000);

蜂鸣器制作⾳乐⼩案例——两只⽼虎

七声⾳阶⾳乐盒应⽤编写了⾳乐中的七个基准⾳(do、re、mi、fa、sol、la、si),这七个基准⾳对应的频率数组为:10465,11747,13185,13969,1568,1760,19755。

使⽤步长模块与数组模块,让蜂鸣器⾸先能发出七个基准⾳,七个基准⾳声⾳发出之后,停顿5秒,再次循环播放七个基准⾳。

Mixly图形化编程程序

(蜂鸣器发出七个基准⾳程序)

程序实现代码

float tonelist[]={10465,11747,13185,13969,1568,1760,19755};

void setup(){

pinMode(9, OUTPUT);

}

void loop(){

for (int i = 1; i <=7; i = i + (1)) {

tone(9,tonelist[(int)(i - 1)]);

delay(1000);

}

noTone(9);

digitalWrite(9,HIGH);

delay(5000);

(两只⽼虎简谱)

根据简谱,也可对两只⽼虎的⾳符、节拍、⾼⾳与低⾳⾳调设置数值,然后再编程程序。

Mixly图形化编程程序

(两只⽼虎总程序)

程序实现代码

volatile float speed;

volatile long updown;

float tonelist[]={10465,11747,13185,13969,1568,1760,19755};

longmusiclist[]={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,2,5,1,2,5,1};

longhighlist[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,-1,0};

long updownlist[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

floatrhythmlist[]={1,1,1,1,1,1,1,1,1,1,2,1,1,2,05,05,05,05,1,1,05,05,05,05,1,1,1,1,2,1,1,2};

speed = 1200;

updown = 0;

pinMode(9, OUTPUT);

}

void loop(){

for (int i = 1; i <=32; i = i + (1)) {

tone(9,(tonelist[(int)(musiclist[(int)(i - 1)] - 1)] pow(2,highlist[(int)(i - 1)])) pow(2, (updownlist[(int)(i -1)] + updown) / 120));

delay(((1000 (60 /speed)) rhythmlist[(int)(i - 1)]));

noTone(9);

digitalWrite(9,HIGH);

delay(10);

}

}

59

百度文库VIP限时优惠现在开通,立享6亿+VIP内容

立即获取

基于Arduino使用低电平触发无源蜂鸣器模块

基于Arduino使⽤低电平触发⽆源蜂鸣器模块

蜂鸣器模块

我们可以使⽤Arduino进⾏很多互动作品,其中最常⽤的是声光显⽰器。之前的所有实验都与LED有关。但是,这个实验中的电路可以产⽣声⾳。通常,实验是通过蜂鸣器或扬声器完成的,⽽蜂鸣器更简单且更易于使⽤。

有源蜂鸣器与⽆源蜂鸣器

有源蜂鸣器与⽆源蜂鸣器有什么区别。这⾥的“源”不是指电源。⽽是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要⼀通电就会叫。⽽⽆源内部不带震荡源,所以如果⽤直流信号⽆法令其鸣叫。必须⽤ 2K~5K 的⽅波去驱动它。有源蜂鸣器往往⽐⽆源的贵,就是因为⾥⾯多个震荡电路。

第 1 页

电路图如下:

蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小。

单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。三极管的作用为驱动,通过三极管放大驱动电流,从而可以让蜂鸣器发出声音。

扩展资料:

有源蜂鸣器和无源蜂鸣器的区别:

这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。

而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。

有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。

无源蜂鸣器的优点是:便宜且声音频率可控,可以做出“多来米发索拉西”的效果。在一些特例中,可以和LED复用一个控制口 有源蜂鸣器的优点是:程序控制方便 。

plc中蜂鸣器长鸣一次程序,首先要确定蜂鸣器是否已经连接到PLC控制器上,并且检查电源是否正常。

如果电源正常,可以尝试检查PLC程序,看看是否有蜂鸣器的控制程序。

如果没有,可以尝试添加蜂鸣器的控制程序,并确保蜂鸣器的输出信号正确连接到PLC控制器上。

最后,可以尝试运行PLC程序,看看蜂鸣器是否能够正常工作。

以上就是关于怎样用stc89c52单片机控制蜂鸣器发出音乐的c语言程序全部的内容,包括:怎样用stc89c52单片机控制蜂鸣器发出音乐的c语言程序、怎么让蜂鸣器发出声音、让单片机的蜂鸣器1秒钟响一次 下面的是自带的程序 看起来有点麻烦 谁帮我用蜂鸣器来实现1秒钟响一次的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9747629.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存