单片机产生音乐原理说明
- 格式: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