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

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

#include\r\n#include\r\n//本例采用89C52,晶振为11.0592MHZ\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=3*m\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=0xd8TL0=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+1delayms(100),TR0=0gotoa}//若碰到休止符,延时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你参考这个吧

51单片机蜂鸣器程序为:

#include"reg52.h"

typedef unsigned char u8

typedef unsigned int u16

sbit beep=P1^5

void delay(u16 i)

{

while(i--)

}

void main()

{

while(1)

{

beep=~beep

delay(1000)//控制音调频率

beep=~beep/控制声音大小

delay(10)

}

}

扩展资料:

BUZZER蜂鸣器的分类:

1、按其驱动方式的原理分,可分为:有源蜂鸣器(内含驱动线路,也叫自激式蜂鸣器)和无源蜂鸣器(外部驱动,也叫他激式蜂鸣器)。

2、按构造方式的不同,可分为:电磁式蜂鸣器和压电式蜂鸣器。

3、按封装的不同,可分为:DIP BUZZER(插针蜂鸣器)和SMD BUZZER(贴片式蜂鸣器)。

4、按电流的不同,可分为:直流蜂鸣器和交流蜂鸣器,其中,以直流最为常见压电式蜂鸣器,用的是压电材料,即当受到外力导致压电材料发生形变时压电材料会产生电荷。同样,当通电时压电材料会发生形变。

电磁式蜂鸣器,主要是利用通电导体会产生磁场的特性,用一个固定的永久磁铁与通电导体产生磁力推动固定在线圈上的鼓膜。

由于两种蜂鸣器发音原理不同,压电式结构简单耐用但音调单一音色差,适用于报警器等设备。而电磁式由于音色好,所以多用于语音、音乐等设备。

#include <reg51.h>

sbit speaker=P1^2

unsigned char timer0h,timer0l,time

//生日歌

code unsigned char sszymmh[]={5,1,1, 5,1,1, 6,1,2, 5,1,2, 1,2,2, 7,1,4,

5,1,1, 5,1,1, 6,1,2, 5,1,2, 2,2,2, 1,2,4,

5,1,1, 5,1,1, 5,2,2, 3,2,2, 1,2,2, 7,1,2, 6,1,2,

4,2,1, 4,2,1, 3,2,2, 1,2,2, 2,2,2, 1,2,4}

// 音阶频率表 高八位

code unsigned char FREQH[]={

0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,

0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i

0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,

0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,

}

// 音阶频率表 低八位

code unsigned char FREQL[]={

0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,

0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i

0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,

0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,

}

void delay(unsigned char t)

{

unsigned char t1

unsigned long t2

for(t1=0t1<tt1++)

{

for(t2=0t2<8000t2++)

{

}

}

TR0=0

}

void t0int() interrupt 1

{

TR0=0

speaker=!speaker

TH0=timer0h

TL0=timer0l

TR0=1

}

void song()

{

TH0=timer0h

TL0=timer0l

TR0=1

delay(time)

}

void main(void)

{

unsigned char k,i

TMOD=1//置CT0定时工作方式1

EA=1

ET0=1//IE=0x82 //CPU开中断,CT0开中断

while(1)

{

i=0

while(i<75){ //音乐数组长度 ,唱完从头再来

k=sszymmh[i]+7*sszymmh[i+1]-1

timer0h=FREQH[k]

timer0l=FREQL[k]

time=sszymmh[i+2]

i=i+3

song()

}

}

}


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

原文地址: https://outofmemory.cn/yw/7790087.html

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

发表评论

登录后才能评论

评论列表(0条)

保存