单片机产生乐曲的原理
利用单片机产生乐曲音符,再把乐曲音符翻译成计算机音乐语言,由单片机进行信息处理,再通过蜂鸣器或喇叭放出音乐。
1.音频脉冲的产生
音乐的产生主要是通过单片机的I/O 口输出高低不同的脉冲信号来控制蜂
鸣器发音,要想产生音频脉冲信号,需要算出某一音频的周期(1/频率),然后
将此周期除以2,即为半周期的时间。利用单片机定时器计时这个半个周期时间,每当计时到后就将输出脉冲的I/O 口反相,然后重复计时此半周期时间再对I/O 口反相,这样就能在此I/O 口上得到此频率的脉冲。
通常,利用单片机的内部定时器0,工作在方式1 下,改变计数初始值THO和TLO 来产生不同的率。
例如,若单片机采用12MHz晶振,要产生频率为587Hz的音频脉冲时,其音频信号的脉冲周期T=1/587=1703.5775卩s,半周期的时间为852卩s,因此只要令计数器计数=852卩
s/1卩s=852,在每计数852时将I/O 口反相,就可得到C 调中音Re,
计数脉冲值与频率的关系如下:
2音乐节拍的产生
每个音符使用一个字节,字节的高四位代表音符的高低,低四位代表音符的节拍,表5-2为节拍与节拍码的对照表。如果1拍为0.4s, 1/4拍是0.1s只要设
定延迟时间就可求得节拍的时间。假设1/4拍为1个延迟单位时间,那么1拍对
应的就是4个延迟单位时间,以此类推。所以只要求得1/4拍的延迟单位时间,
其余的节拍就是它的倍数,表5-3为1/4拍和1/8拍的时间设定。
e
3. 音乐软件的设计
1). 音乐代码库的建立方法(1)先找出乐曲最低音和最高音范围,然后确定音符表T 的顺序。
(2)把T值建立在表1 (TABLE),构成发音符的计数值放在其中(TABLE仲)
(3)简谱码(音符)为高 4 位,节拍(节拍数)为低 4 位,音符的节拍码放在程序的表处(TABLE处)。
(4)音符节拍码00H 为音乐结束标记。
2). 选曲
在一个程序中,需要演奏两首或两首以上歌曲时,音乐代码库的建立有两种方法:
(1)将每首歌曲建立相互独立的音符表T和发音符计数值表(TABLE o
(2)也可以建立共用的音符表T后,再写每首歌曲的发音计数值表(TABLE 中的代码。
不管采用哪种方法,每首歌曲结束时,在发音计数值表(TABLE中均需加上音
乐结束符00H o
4. 歌曲的设计
下面以歌曲《送别》的设计为例,讲述歌曲在单片机中实现自动演奏。歌曲《送别》如下所示:
m
6
叩曲
1
?
0089
8
isil 』
L
伽 L 讪
9 删
9
5
0脚 S 对帥
LLM
£
邮
£
? Z
08S W
I
oa 1* 1
KfW I
!$翱
n
91
m
O
翱
8
9
?
S t ,
£
瞬WZ 1
軻
1
啣
脚删星「觀脚即觀s-s$
这妙M 跚礫無咚站澤轉斛冯J 谢鞠卿陳黯壤轴
綱做删 °°a I ^W -iSiMWWS 卿鲫 rn 0W
幣
*
— 普冑s s s s u
4
—
u
*t 创
的
5 H s 毎
另
5 77
n )w 1+
书弔
!
k " i ' i
¥郎
T —v s H a ?u 逆蚩/
5 器n 曽m 直
直n ) s _
■
TABLE1:DW 64524,64580,64684,64777 ;7(低),1,2,3 DW 64820,64898,64968,65030,65058 ;4,5,6,7 ,1(TABLE:
DB 64H,42H,62H,98H
DB 74H,92H,72H,68H
DB 64H,22H,32H,44H,32H,22H
DB 3CH
J J J J
DB 64H,42H,62H,94H,04H,82H
DB 74H,94H,68H
DB 64H,32H,42H,54H,04H,12H
DB 2CH
J J J J
DB 74H,94H,98H
DB 84H,72H,82H,98H
DB 72H,82H,92H,72H,72H,62H,42H,22H
DB 3CH
DB 64H,42H,62H,94H,04H,82H
DB 74H,94H,68H
DB 64H,32H,42H,54H,04H,12H
DB 2CH
J J
DB 00H