音乐盒Word文档格式.docx

上传人:b****1 文档编号:1062379 上传时间:2023-04-30 格式:DOCX 页数:18 大小:23.45KB
下载 相关 举报
音乐盒Word文档格式.docx_第1页
第1页 / 共18页
音乐盒Word文档格式.docx_第2页
第2页 / 共18页
音乐盒Word文档格式.docx_第3页
第3页 / 共18页
音乐盒Word文档格式.docx_第4页
第4页 / 共18页
音乐盒Word文档格式.docx_第5页
第5页 / 共18页
音乐盒Word文档格式.docx_第6页
第6页 / 共18页
音乐盒Word文档格式.docx_第7页
第7页 / 共18页
音乐盒Word文档格式.docx_第8页
第8页 / 共18页
音乐盒Word文档格式.docx_第9页
第9页 / 共18页
音乐盒Word文档格式.docx_第10页
第10页 / 共18页
音乐盒Word文档格式.docx_第11页
第11页 / 共18页
音乐盒Word文档格式.docx_第12页
第12页 / 共18页
音乐盒Word文档格式.docx_第13页
第13页 / 共18页
音乐盒Word文档格式.docx_第14页
第14页 / 共18页
音乐盒Word文档格式.docx_第15页
第15页 / 共18页
音乐盒Word文档格式.docx_第16页
第16页 / 共18页
音乐盒Word文档格式.docx_第17页
第17页 / 共18页
音乐盒Word文档格式.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

音乐盒Word文档格式.docx

《音乐盒Word文档格式.docx》由会员分享,可在线阅读,更多相关《音乐盒Word文档格式.docx(18页珍藏版)》请在冰点文库上搜索。

音乐盒Word文档格式.docx

中音

高音

Do

262

1908

229

523

956

115

1046

57

Do﹟

277

1805

217

554

903

108

1109

54

Re

294

1701

204

587

852

102

1175

51

Re﹟

311

1608

193

622

804

97

1245

48

Mi

330

1515

182

659

759

91

1318

45

Fa

349

1433

172

698

716

86

1397

43

Fa﹟

370

1351

162

740

676

81

1480

41

So

392

1276

153

784

638

77

1568

38

So﹟

415

1205

145

831

602

72

1661

36

La

440

1136

136

880

568

68

1760

34

La﹟

464

1078

129

932

536

64

1865

32

Si

494

1012

121

988

506

61

1976

30

4.1.2节拍的确定

若要构成音乐,光有音调是不够的,还需要节拍,让音乐具有旋律(固定的律动),而且可以调节各个音的快满度。

“节拍”,即Beat,简单说就是打拍子,就像我们听音乐不自主的随之拍手或跺脚。

若1拍实0.5s,则1/4拍为0.125s。

至于1拍多少s,并没有严格规定,就像人的心跳一样,大部分人的心跳是每分钟72下,有些人快一点,有些人慢一点,只要听的悦耳就好。

音持续时间的长短即时值,一般用拍数表示。

休止符表示暂停发音。

一首音乐是由许多不同的音符组成的,而每个音符对应着不同频率,这样就可以利用不同的频率的组合,加以与拍数对应的延时,构成音乐。

了解音乐的一些基础知识,我们可知产生不同频率的音频脉冲即能产生音乐。

对于单片机来说,产生不同频率的脉冲是非常方便的,利用单片机的定时/计数器来产生这样的方波频率信号。

因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。

表4.2节拍与节拍码对照

节拍码

节拍数

1

1/4拍

1/8拍

2/4拍

3

3/4拍

3/8拍

4

1拍

2/1拍

5

1又1/4拍

5/8拍

6

1又1/2拍

8

2拍

A

2又1/2拍

C

3拍

F

3又3/4拍

每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,图5.2为节拍码的对照。

如果1拍为0.4秒,1/4拍实0.1秒,只要设定延迟时间就可求得节拍的时间。

假设1/4拍为1DELAY,则1拍应为4DELAY,以此类推。

所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如图5.3为1/4和1/8节拍的时间设定。

表4.31/4和1/8节拍的时间设定

曲调值

DELAY

调4/4

125毫秒

62毫秒

调3/4

187毫秒

94毫秒

调2/4

250毫秒

4.1.3编码

doremifasolasi分别编码为1~7,重音do编为8,重音re编为9,停顿编为0。

播放长度以十六分音符为单位(在本程序中为165ms),一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。

音调作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码。

以0xff作为曲谱的结束标志。

举例1:

音调do,发音长度为两拍,即二分音符,将其编码为0x18。

举例2:

音调re,发音长度为半拍,即八分音符,将其编码为0x22

歌曲播放的设计。

先将歌曲的简谱进行编码,储存在一个数据类型为unsignedchar的数组中。

程序从数组中取出一个数,然后分离出高4位得到音调,接着找出相应的值赋给定时器0,使之定时操作蜂鸣器,得出相应的音调;

接着分离出该数的低4位,得到延时时间,接着调用软件延时。

表4.4简谱对应的简谱码、T值、节拍数

简谱

发音

简谱码

T值

低音SO

64260

低音LA

64400

7

低音TI

64524

中音DO

64580

中音RE

64684

中音MI

64777

中音FA

64820

中音SO

64898

中音LA

9

64968

中音TI

65030

高音DO

B

65058

高音RE

65110

高音MI

D

65157

高音FA

E

65178

高音SO

65217

#include<

reg52.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitduan=P2^6;

sbitkey1=P3^2;

//按key1可切换花样

sbitkey2=P3^3;

//按key2可切换歌曲

sbitfm=P3^6;

//蜂鸣器连续的I0口

sbitP34=P1^0;

//矩阵键盘的一列

ucharcodehuayang1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfd,0xfe,

0xfd,0xfb,0xf7,0xef,0xdf,0xbf};

//花样1

ucharcodehuayang2[]={0x7f,0xfe,0xbf,0xfd,0xdf,0xfb,0xef,0xf7,

0xef,0xfb,0xdf,0xfd,0xbf,0xfe};

//花样2

ucharcodehuayang3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x0,

0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};

//花样3

charcodehuayang4[]={0x55,0xaa,0xcc,0x33,0x99,0x66,0x0f,0xf0};

//花样4

ucharcount1;

//花样标志

ucharcount2;

//歌曲标志

uchartimeh,timel,i;

//---------------------------简谱---------------------------------------

//编程规则:

字节高位是简谱,低位是持续时间,

//代表多少个十六分音符

//1-7代表中央C调,8-E代表高八度,0代表停顿

//最后的0是结束标志

ucharcodeqnzl[]={//千年之恋

0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xA8,0x08,

//前奏

0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,

//竹林的灯火到过的沙漠

0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,

//七色的国度不断飘逸风中

0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,

//有一种神秘灰色的旋涡

0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,

//将我卷入了迷雾中

0x63,0xA1,0xA2,0x62,0x92,0x82,0x52,

//看不清的双手

0x31,0x51,0x63,0x51,0x63,0x51,0x63,0x51,0x62,0x82,0x7C,0x02,

//一朵花传来谁经过的温柔

0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,

//穿越千年的伤痛

0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,

//只为求一个结果

0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,

//你留下的轮廓指引我

0x42,0x63,0x83,0x83,0x91,0x91,

//黑夜中不寂寞

0x61,0x71,0x82,0x71,0x62,0x0A2,0x71,0x76,

//穿越千年的哀愁

//是你在尽头等我

//最美丽的感动会值得

0x42,0x82,0x88,0x02,0x74,0x93,0x89,0xff//结束标志

//用一生守候

};

ucharcodejmszl[]={//寂寞沙洲冷

0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,

//自你走后心憔悴

0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x15,0x14,

//白色油桐风中纷飞

0x51,0x52,0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,0x08,0x28,

//落花似人有情这个季节

0x31,0x32,0x31,0x32,0x11,0x21,0x51,0x52,0x51,0x52,

//河畔的风放肆拼命地吹

0x51,0x51,0x31,0x32,0x31,0x32,0x81,0x72,0x63,

//不断拨弄离人的眼泪

0x62,0x71,0x81,0x72,0x61,0x61,0x52,0x31,0x21,0x32,0x51,0x54,

//那样浓烈的爱再也无法给

0x22,0x12,0x11,0x12,0x11,0x12,0x12,0x14,0x26,0x32,0x26,

//伤感一夜一夜

0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,

//当记忆的线缠绕过往支离破碎

0x02,0x32,0x81,0x81,0x81,0x81,0x62,0x52,0x34,

//是慌乱占据了心扉

0x31,0x81,0x81,0x81,0x61,0x91,0x82,

//有花儿伴着蝴蝶

0x51,0x51,0x51,0x51,0x31,0x61,0x53,

//孤雁可以双飞

0x21,0x11,0x21,0x11,0x22,0x11,0x21,0x26,

//夜深人静独徘徊

0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x52,

//当幸福恋人寄来红色分享喜悦

0x31,0x31,0x81,0x81,0x81,0x61,0x91,0x81,0x61,0x31,0x56,

//闭上双眼难过头也不敢回

0x32,0x32,0x81,0x81,0x81,0x81,0x91,0x81,0x61,0x81,0x61,0x51,0x31,0x51,0x34,

//仍然捡尽寒枝不肯安歇微带着后悔

0x21,0x31,0x51,0x31,0x21,0x11,0x61,0x21,0x16,0xff};

//寂寞沙洲我该思念谁

//------------简谱音调对应的定时器初值----------------

//适合11.0592M晶振

ucharcodecuzhi[]={

0xff,0xff,//占位

0xFC,0x8E,//中央C调1-7

0xFC,0xED,

0xFD,0x43,

0xFD,0x6A,

0xFD,0xB3,

0xFD,0xF3,

0xFE,0x2D,

0xFE,0x47,//高八度1-7

0xFE,0x76,

0xFE,0xA1,

0xFE,0xC7,

0xFE,0xD9,

0xFE,0xF9,

0xFF,0x16

};

ucharyinyue[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x0,0x0};

//将音调转化为对应的LED样式

voiddelay1(uintz);

//延时1MS

voiddelay(uintz);

//延时165MS,即十六分音符

voidsong();

voidbeep();

//蜂鸣器叫一声

 

voidmain()

{

ucharx;

count1=0;

//流水灯无花样

count2=1;

//唱第一首歌

P34=0;

//选取矩阵键盘的一列

EA=1;

//开总中断

EX0=1;

//开外部中断0

IT0=1;

//外部中断0下降沿触发方式

EX1=1;

//开外部中断1

IT1=1;

//外部中断1下降沿触发方式

TMOD=0x01;

//定时器0工作在方式1

TH0=0;

TL0=0;

ET0=1;

while

(1)

{

if(count1!

=0)

{

switch(count1)

{

case1:

for(x=0;

x<

14;

x++)

{

duan=1;

P0=huayang1[x];

beep();

delay1(300);

duan=0;

if(count1!

=1)

break;

}

break;

case2:

P0=huayang2[x];

=2)

case3:

16;

P0=huayang3[x];

=3)

case4:

8;

P0=huayang4[x];

=4)

}

}

else

song();

delay1(1000);

}

}

voidint0()interrupt0

EA=0;

//关总中断

delay1

(1);

//去抖

if(key1==0)

count2=0;

//不让蜂鸣器唱歌

TR0=0;

count1++;

if(count1==5)

count1=1;

voidint1()interrupt2

if(key2==0)

count1=0;

TR0=1;

i=0;

//从头开始唱

count2++;

if(count2==3)

count2=1;

voidtimer0()interrupt1//用于产生各种音调

TH0=timeh;

TL0=timel;

fm=~fm;

voidsong()

uinttemp;

ucharjp;

//jp是简谱

i=0;

{if(count2==0)

{

break;

if(count2==1)//选曲

temp=qnzl[i];

if(count2==2)

temp=jmszl[i];

if(temp==0xff)

jp=temp/16;

//取数的高4位

duan=1;

P0=yinyue[jp];

duan=0;

if(jp!

timeh=cuzhi[jp*2];

timel=cuzhi[jp*2+1];

fm=1;

//关蜂鸣器

delay(temp%16);

//取数的低4位

//唱完一个音停10MS

delay1(10);

i++;

TR0=0;

fm=1;

voiddelay(uintz)//延时165MS,即十六分音符

{uintx,y;

for(x=z;

x>

0;

x--)

for(y=19000;

y>

y--);

voiddelay1(uintz)//延时1MS

for(y=112;

voidbeep()//蜂鸣器叫一声

{uchari;

for(i=0;

i<

50;

i++)

{fm=~fm;

delay1

(1);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2