1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 单片机音乐播放器课程设计C语言 单片机音乐播放器课程设计中音乐代码怎么弄...

单片机音乐播放器课程设计C语言 单片机音乐播放器课程设计中音乐代码怎么弄...

时间:2021-02-19 03:13:01

相关推荐

单片机音乐播放器课程设计C语言 单片机音乐播放器课程设计中音乐代码怎么弄...

单片机音乐播放器课程设计中音乐代码怎么弄

答案:2信息版本:手机版

解决时间 -10-06 13:16

已解决

-10-06 02:07

单片机音乐播放器课程设计中音乐代码怎么弄

最佳答案

-10-06 02:20

做成两个数组存放数据,一个控制频率,一个控制频率持续时间长短,然后主程序调用数组。

全部回答

1楼

-10-06 03:10

就用单片机和蜂鸣器应该就可以。你控制蜂鸣器的频率改变,这样蜂鸣器发声的“音调”就会不一样,然后再自己慢慢调那些频率,就可以构成一个单片机控制的音乐了。

至于音乐里面的12345671怎么发声,请参考以下资料(采用51单片机):

为了输出准确的音阶频率,我们需要用定时器输出来控制蜂鸣器的驱动,这里用的 t0。

我们再每一次定时器中断溢出时取反 p17 引脚,以形成频率驱动蜂鸣器,定时器 0 工

作在 16 位方式,需要在中断里重新置入初始值。这个值就决定了 p17输出的频率。我们在

程序里先做好了一张表,预先写好了每个音阶的频率需要设置的初始值。到时调入对应的值

进去 t0,不断溢出时就 p17 可以输出对应的频率。

在这个程序里,我们自动地输出 8 个音符,每个音符保持 1 秒钟左右。

―――――――――――――――――――――――

#define uchar unsigned char //定义一下方便使用

#define uint unsigned int

#define ulong unsigned long

#include //包括一个 52 标准内核的头文件

char code dx516[3] _at_ 0x003b;//这是为了仿真设置的

sbit beep=p1^7; //喇叭输出脚

uchar th0_f; //在中断中装载的 t0 的值高 8 位

uchar tl0_f; //在中断中装载的 t0 的值低 8 位

//t0 的值,及输出频率对照表

uchar code freq[36*2]={

0xa9,0xef,//00220hz ,1 //0

0x93,0xf0,//00233hz ,1#

0x73,0xf1,//00247hz ,2

0x49,0xf2,//00262hz ,2#

0x07,0xf3,//00277hz ,3

0xc8,0xf3,//00294hz ,4

0x73,0xf4,//00311hz ,4#

0x1e,0xf5,//00330hz ,5

0xb6,0xf5,//00349hz ,5#

0x4c,0xf6,//00370hz ,6

0xd7,0xf6,//00392hz ,6#

0x5a,0xf7,//00415hz ,7

0xd8,0xf7,//00440hz 1 //12

0x4d,0xf8,//00466hz 1# //13

0xbd,0xf8,//00494hz 2 //14

0x24,0xf9,//00523hz 2# //15

0x87,0xf9,//00554hz 3 //16

0xe4,0xf9,//00587hz 4 //17

0x3d,0xfa,//00622hz 4# //18

0x90,0xfa,//00659hz 5 //19

0xde,0xfa,//00698hz 5# //20

0x29,0xfb,//00740hz 6 //21

0x6f,0xfb,//00784hz 6# //22

0xb1,0xfb,//00831hz 7 //23

0xef,0xfb,//00880hz `1

0x2a,0xfc,//00932hz `1#

0x62,0xfc,//00988hz `2

0x95,0xfc,//01046hz `2#

0xc7,0xfc,//01109hz `3

0xf6,0xfc,//01175hz `4

0x22,0xfd,//01244hz `4#

0x4b,0xfd,//01318hz `5

0x73,0xfd,//01397hz `5#

0x98,0xfd,//01480hz `6

0xbb,0xfd,//01568hz `6#

0xdc,0xfd,//01661hz `7 //35

};

//定时中断 0,用于产生唱歌频率

timer0() interrupt 1

{

tl0=tl0_f;th0=th0_f; //调入预定时值

beep=~beep; //取反音乐输出 io

p2=~p2;

}

//音阶声音自动输出试验

void main(void) // 主程序

{

ulong n;

uchar i;

uchar code jie8[8]={12,14,16,17,19,21,23,24};//1234567`1 八个音符在频率表中的位置

tmod = 0x01; //使用定时器 0 的 16 位工作模式

tr0 = 1;

et0 = 1;

ea = 1;

while(1)

{

for(i=0;i<8;i++) //循环播放 8 个音符

{

tl0_f=freq[jie8[i]*2]; //置一个音符的值

th0_f=freq[jie8[i]*2+1];

for(n=0;n<50000;n++); //延时 1 秒左右

}

}

}

―――――――――――――――――――――――――――――――

请编译,运行。可以听到 8 个音符不断循环输出。

我要举报

如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

大家都在看

推荐资讯

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。