单片机音乐盒课程设计Word文档格式.docx

上传人:b****6 文档编号:20872515 上传时间:2023-01-26 格式:DOCX 页数:10 大小:67.45KB
下载 相关 举报
单片机音乐盒课程设计Word文档格式.docx_第1页
第1页 / 共10页
单片机音乐盒课程设计Word文档格式.docx_第2页
第2页 / 共10页
单片机音乐盒课程设计Word文档格式.docx_第3页
第3页 / 共10页
单片机音乐盒课程设计Word文档格式.docx_第4页
第4页 / 共10页
单片机音乐盒课程设计Word文档格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

单片机音乐盒课程设计Word文档格式.docx

《单片机音乐盒课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机音乐盒课程设计Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。

单片机音乐盒课程设计Word文档格式.docx

通常唱成1、2、3、4、5、6、7的音叫自然音,那些在它们的左上角加上﹟号或者b号的叫变化音。

﹟叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。

例如高音DO的频率(1046Hz)刚好是中音DO的频率(523Hz)的一倍,中音DO的频率(523Hz)刚好是低音DO频率(266Hz)的一倍;

同样的,高音RE的频率(1175Hz)刚好是中音RE的频率(587Hz)的一倍,中音RE的频率(587Hz)刚好是低音RE频率(294Hz)的一倍。

1)要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。

利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。

2)利用发单片的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法。

此外结束符和休止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;

若查表结果为FFH,则产生相应的停顿效果。

3)例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次技术956次时将I/O反相,就可得到中音DO(523Hz)。

计数脉冲值与频率的关系公式如下:

N=Fi

2

Fr

N:

计算值;

Fi:

内部计时一次为1us,故其频率为1MHz;

其计数值的求法如下:

T=65536-N=65536-Fi

Fr

例如:

设K=65536,F=1000000=Fi=1MHz,球低音DO(261Hz)。

中音DO(523Hz)。

高音的DO(1046Hz)的计算值

Fr=65536-1000000

Fr=65536-500000/Fr

低音DO的T=65536-500000/262=63627

低音DO的T=65536-500000/523=64580

低音DO的T=65536-500000/1047=65059

C调各音符频率与计数值T的对照表如下表所示。

C调各音符频率与计数值T的对照表

低音

频率

T

参数

中音

高音

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

节拍的确定:

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

“节拍”,即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毫秒

编码:

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

为简便起见,以一定的频率方波产生的音在其每个周期内高低幅值得时间各占一半因此,输出引脚在每个方波周期内要动作两次:

一次升高,一次降低。

即输出引脚的频率是原音频率的两倍。

方波的产生由定时器控制。

定时器T0工作在定时方式1,改变TH0及TL0,产生不同的音频频率。

必须考虑到中断响应时间的影响,尤其在高音部分,若忽略中断响应时间,会使音频频率比标准值低几十Hz,相当于1/4音程,很容易听出来,对低音部分影响不大。

一般中断响应时间为3~6个机器周期,经过反复试验取5个机器周期作为校正最为恰当,表1中所给的定时初值就是考虑中断响应后的定时常数。

另外,为避免

T1中断可能引起杂音,应将定时器T0中断设为高优先级。

这样编写出来的程序播放的音与标准音叉进行差频校音,非常准确和谐。

音乐播放器的基本硬件电路有六部分组成:

单片机、时钟与复位电路、选择按键输入电路、音频发生器、音频放大器和扬声器。

设计程序

#include<

reg51.h>

sbitspeaker=P2^5;

unsignedchartimer0h,timer0l,time;

//生日歌

codeunsignedcharsszymmh[]={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};

//音阶频率表高八位

codeunsignedcharFREQH[]={

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,

};

//音阶频率表低八位

codeunsignedcharFREQL[]={

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,

};

voiddelay(unsignedchart)

{

unsignedchart1;

unsignedlongt2;

for(t1=0;

t1<

t;

t1++)

for(t2=0;

t2<

8000;

t2++)

;

}

TR0=0;

voidt0int()interrupt1

{

speaker=!

speaker;

TH0=timer0h;

TL0=timer0l;

TR0=1;

voidsong()

delay(time);

voidmain(void)

unsignedchark,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();

}

课程设计的意义及体会

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 

在生活中可以说得是无处不在。

因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。

回顾起此次单片机课程设计,我仍感慨颇多,的确,从选题到定稿,从理论到实践,在接近四星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对单片机汇编语言掌握得不好

……通过这次课程设计之后,一定把以前所学过的知识重新温故。

通过这次单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。

创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。

.

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

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1