大家可以从仿真图观察到P3.6口输出的方波,频率和中音DO的频率一致。如果要到其它音调的波形,只要按照下表修改THO、TLO的参数即可。
下图单片机音调DO的输出波形图。音符的节拍我们可以举例来说明。
在一张乐谱中,我们经常会看到这样的表达式,如1=C、l=G……等等,这里1:C,1=G表示乐谱的曲调,和我们前面所谈的音调有很大的关联,就是用来表示节拍的。以此为例加以说明,它表示乐谱中以四分音符为节拍,每一小节有三拍。
比如下图的乐谱。
其中DO、RE为一拍.Ml、FA、SO为一拍,LA为一拍共三拍。DO、RE的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长.6的时长为四分音符长。那么一拍到底该唱多长呢?一般说来,如果乐曲没有特殊说明,一拍的时长大约为400ms~500ms。我们以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms.八分音符的时长就为200ms,十六分音符的时长就为100ms。
下表格不同的节拍
给每个音符编码时,使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,中音的DOREM1FASOLAS1分别编码为1-7,高音DO编为8,高音RE编为9,高音Ml编为A.低音7的编为F,停顿编为00播放长度以1/4拍为单位(在本程序中为即1/4拍=100ms),一拍即等于4个1/4拍,编为4,其它的播放时间以此类推。以Oxff作为曲谱的结束标志。
以歌曲《送别》的简谱为例,SO为一拍,时长为4(即4个1/4拍),用“Ox54”表示;Ml为1/2拍,时长为2;SO为半
拍,时长为2,用“0x32,Ox52”表示;高音DO为2拍,时长为8……用“Ox88”表示。 这段曲子可以写成:0x54,0x32,0x52,0x88,0x64,0x84,0x58,0x54,0x12,0x22,0x34,0x22,0x12,0x28,0x04,0x040
编曲第三步:编制C调的《送别>乐曲程序。
我们可以根据上图《送别》乐谱编程。为了加深理解,我们根据中图主程序流程图和下图子函数乐曲流程图来编制乐曲程序。
为定时器高低4位,i为演奏音符个数//1-7代表中音DO~SI,8代表高音DO,高音RE编为9,高音Ml编为A,低音SI的编为F,停顿编为O。
上一篇:JTAG