单片机产生音乐原理说明

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

音乐模块部分

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

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

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

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

一、音调

在音乐中所谓“音调”,其实就是我们常说的“音高”。在音乐中常把中央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,它以振荡器的十二分频信号为计数脉冲。设振荡器频率为f 0,则定时器的予置初值由下式来确定:

t = 12 ×(T ALL – T HL )/ f 0(假如是STM8,注意其计数方式)

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

TH = T HL / 256 = ( T ALL – t × f 0/12) / 256

TL = T HL % 256 = ( T ALL – t × f 0/12) %256

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

TH 440Hz = (65536 – 1136 * 12/12) /256 = FBH

TL 440Hz = (65536 – 1136 * 12/12)%256 = 90H

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

Ⅱ.假设单片机晶振频率f 0=12Mhz ,定时器在工作方式1 计数脉冲值与频率的关系为:

N=F I ÷2÷F R 其中 N ——计数值; F I ——内部计时一次为1us ,故其频率为1MHz ;

F R ——要产生的频率。

其计数值的求法为:

T=65536-N=65536-F I ÷2÷F R 则标准音高A (频率f = 440 Hz )的计数值为: T=65536-N=65536-F I ÷2÷F R

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

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

方式1)

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

对于非C调的歌曲,要对各音符的频率做相应的变化调号——音乐上指用以确定乐曲主音高度的符号。

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

升F调:1=#F,也就是降G调:1=b G;369

升G调:1=#G,也就是降A调:1=b A;415 升A调:1=#A,也就是降B调:1=b B。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

.

5

G

#

.

5

.

6A

#

.

6

.

7B..

1

440 494 587 659 740 880 988 1175 1318 1480 1760

相关文档
最新文档