单片机产生音乐原理说明

  • 格式:doc
  • 大小:214.00 KB
  • 文档页数:11

音乐模块部分

单片机发音原理:单片机演奏音乐基本是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音,但一定要弄清楚两个概念即可,也就是“音调”和“节拍” 。

·音调 表示一个音符唱多高的频率。

·节拍 表示一个音符唱多长的时间。

下面,就此两点,阐述说明:

一、音调

在音乐中所谓“音调”,其实就是我们常说的“音高”。在音乐中常把中央C上方的A音定为标准音高,其频率f=440Hz,其余与其比较。f1和f2为两个音符,当这两个音符的频率相差一倍时,也即f2=2×f1时,则称f2比f1高一个倍频程。

在音乐中1与.1,2与.2……,正好相差一个倍频程,在音乐学中称它相差一个八度音。在一个八度音内,有12个半音。以1—i八音区为例,12个半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5一#5、#5—6、6—#6、#6—7、7—i 。这12个音阶的分度基本上是以对数关系来划分的。如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率。

2.确定一个频率所对应的定时器的定时初值的方法

以标准音高A为例:

标准音高A的频率f = 440 Hz,其对应的周期为:

T = 1/ f = 1/440 =2272μs

因此,需要在单片机I/O端口输出周期为T =2272μs的方波脉冲,如下图所示。

由上图可知,单片机上对应喇叭的I/O口来回取反的时间应为:

t = T/2 = 2272/2 = 1136μs 此处分两种方式叙述,请比较选用,其实结果相同:

Ⅰ.这个时间t也就是单片机上定时器应有的中断触发时间。一般情况下,单片机奏乐时,其定时器为工作方式1,它以振荡器的十二分频信号为计数脉冲。设振荡器频率为f0,则定时器的予置初值由下式来确定:

t = 12 ×(TALL – THL)/ f0(假如是STM8,注意其计数方式)

式中,TALL = 216 = 65536,THL为定时器待确定的计数初值。因此定时器的高低计数器的初值为:

TH = THL / 256 = ( TALL – t× f0/12) / 256

TL = THL % 256 = ( TALL – t× f0/12) %256

将t=1136μs代入上面两式(注意:计算时应将时间和频率的单位换算一致),即可求出标准音高A在单片机晶振频率f0=12Mhz,定时器在工作方式1下的定时器高低计数器的预置初值为 :

TH440Hz = (65536 – 1136 * 12/12) /256 = FBH

TL440Hz = (65536 – 1136 * 12/12)%256 = 90H

根据上面的求解方法,我们就可求出其他音调相应的计数器的予置初值。

Ⅱ.假设单片机晶振频率f0=12Mhz,定时器在工作方式1

计数脉冲值与频率的关系为:

N=FI ÷2÷FR

其中 N——计数值;

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

FR——要产生的频率。

其计数值的求法为:

T=65536-N=65536-FI ÷2÷FR

则标准音高A(频率f = 440 Hz)的计数值为:

T=65536-N=65536-FI ÷2÷FR

=65536-1000000÷2÷ FR =65536-500000/440=65536-1136=64400=0FB90H

下面给出C调各音符频率值和定时器定时初值:(晶振频率f0=12Mhz,定时器在工作方式1)

表1 C调各音符频率值和定时初值对照表

对于非C调的歌曲,要对各音符的频率做相应的变化

调号——音乐上指用以确定乐曲主音高度的符号。

升C调:1=#C,也就是降D调:1=bD;277(频率)

升D调:1=#D,也就是降E调:1=bE;311

升F调:1=#F,也就是降G调:1=bG;369 C调音符 .1 #.1 .2 #.2 .3 .4 #.4 .5 #.5 .6 #.6 .7

频率Hz 262

1.90ms 277

1.81 293

1.7ms 311

1.61 329

1.51ms 349

1.43ms 370

1.35 392

1.28ms 415

1.20 440

1.14ms 466

1.07 494

1.01ms

TH/TL

Stm8: F88B

F894

076C F8F2

0712 F95B

F95C

06A4 F9B7

064A FA14

FA1A

05E6 FA66

FA6A

0596 FAB9

0546 FB03

FB00

0500 FB4A

04B0 FB8F

FB8C

0474 FBCF

042E FC0B

FC0E

03F2

C调音符 1

1# 2 2# 3 4 4# 5 5# 6 6# 7

频率Hz 523

0.95ms 553

0.91 586

0.85 621

0.81 658

0.76ms 697

0.72ms 739

0.68 783

0.64ms 830

0.60 879

0.57ms 931

0.54 987

0.51ms

TH/TL FC43

FC4A

03B6 FC78

038E FCAB

FCAE

0352 FCDB

032A FD08

FD08

02F8 FD33

FD30

02D0 FD5B

02A8 FD81

FD80

0280 FDA5

0258 FDC7

FDC6

023A FDE7

021C FE05

FE02

01FE

C调音符 .1 #.1 .2 #.2 .3 .4 #.4 .5 #.5 .6 #.6 .7

频率Hz 1045

0.47ms 1106

0.45 1171

0.42ms 1241

0.40 1316

0.38ms 1393

0.36ms 1476

0.34 1563

0.32ms 1658

0.30 1755

0.28ms 1860

0.27 1971

0.25ms

TH/TL FB21

FE2A

01D6 FE3C

01C2 FE55

FE5C

01A4 FE6D

0190 FE84

FE84

017C FE99

FE98

0168 FEAD

0154 FEC0

FEC0

0140 FE02

012C FEE3

FEE8

0118 FEF3

010E FF02

FF06

00FA 升G调:1=#G,也就是降A调:1=bA;415

升A调:1=#A,也就是降B调:1=bB。466所谓1=A,就是说,这首歌曲的“导” (即作为基调的中音DO)要唱得同A音符一样高,其它各音符依次向后递推,通常把这首歌曲叫做A调歌曲,或叫“唱A调”。1=C,就是说,这首歌曲的“导”要唱得同C一样高,或者说“这歌曲唱C调”。同样是“导”,不同的调唱起来的高低是不一样的。

在递推的时候要严格按各音符间音程关系进行(全音还是半音,只有3—4和7—i 之间是半音关系,其它音之间都是全音关系),下面以1=D调进行说明。

参照上面的钢琴键盘图和表1,确定出D调各音符对应的频率值为:

(到后来制表时就以各音符对应的新频率值确定定时初值)

C调 .6 #.6 .7 1

C 1#

2

D 2# 3

E 4

F 4# 5

G 5# 6

A 6# 7

B .1

高C #.1高 .2

D #.2 .3

E .4F #.4 .5G #.5 .6A #.6 .7B ..

1

频率 440 494 587 659 740 880 988 1175 1318 1480 1760 D调 .5

.6 #.6 .7 1

C 1#

2

D 2# 3

E 4

F 4# 5

G 5# 6

A 6# 7

B .1

高C #.1高 .2

D #.2 .3

E .4F #.4 .5

G #.5 .6A #.6

频率 440 494 587 659 740 880 988 1175 1318 1480 1760