(2)利用8051的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法如下: 例如,频率为523Hz,其周期天/523 S=1912uS,因此只要令计数器计时956uS/1us=956,在每计数956次时就将I/O反接,就可得到中音DO(532Hz)。 计数脉冲值与频率的关系公式如下: N=Fi/2/Fr N:计数值,Fi:内部计时一次为1uS,故其频率为1MHz,Fr:要产生的频率 ) (3) 其计数值的求法如下: T=65536-N=65536-Fi/2/Fr 计算举例: 设K=65536,F=1000000=Fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。 T=65536-N=65536-Fi/2/Fr=65536-1000000/2/Fr=65536-500000/Fr 低音DO的T=65536-500000/262=63627 中音DO的T=65536-500000/523=64580 高音DO的T=65536-500000/1047=65059 (4)C调个音符频率与计数值T的对照表如下表所示: 音 符 频率(Hz) 简谱码(T音 符 值) 低1DO #1DO# 低2RE #2RE# 低3M 低4FA #4FA# 低5SO #5SO# 低6LA 262 277 294 311 330 349 370 392 415 440 63628 63731 63835 63928 64103 64204 64260 64261 64400 64443 #4FA# 中5SO #5SO# 中6LA #6 中7SI 高1DO #1DO# 高2RE #2RE# 6
频率(Hz) 简谱码(T值) 740 784 831 880 932 988 1046 1109 1175 1245 64860 64898 64923 64968 64994 65030 65058 65085 65110 65124
#6 低7SI 中1DO 466 494 523 64524 64524 64331 高3M 高4FA #4FA# 1318 1397 1480 65157 65178 65189 表2 C调各音符频率与计数值T的对照表 (5)每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,下表为节拍码的对照。但如果1拍为0.4秒,1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间。假设1/4节拍为1DELAY,则1拍应为4DELAY,以此类推。所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如下表为1/4和1/8节拍的时间设定。 1/4节拍 节拍码 1 2 3 4 5 6 7 8 9 A B C D E F 1/8节拍 节拍数 1/4拍 2/4拍 3/4拍 1拍 节拍码 1 2 3 4 节拍数 1/8拍 1/4拍 3/8拍 1/2拍 5/8拍 3/4拍 7/8拍 1拍 1又1/8拍 1又1/4拍 1又3/8拍 1又1/2拍 1又5/8拍 1又3/4拍 1又7/8拍 5 1又1/4拍 6 1又1/2拍 7 1又3/4拍 8 2拍 9 2又1/4拍 A 2又1/2拍 B 2又3/4拍 C 3拍 D 3又1/4拍 E 3又1/2拍 F 3又3/4拍 表3 节拍码对照表 1/4节拍
曲调值 调4/4 调3/4
DELAY 125毫秒 187毫秒
1/8节拍
曲调值 调4/4 调3/4
DELAY 62毫秒 94毫秒
7
调2/4 250毫秒 调2/4 125毫秒
表4 各调节拍的时间设定表
四分之一拍延时代码设计: 1/4拍的延迟时间=187毫秒 DELAY: MOV R7,#2 D2: MOV R4,#187 D3: MOV R3,#248 DJNZ R3,$ DJNZ R4,D3 DJNZ R7,D2 RET
3.4音乐代码的实现 3.4.1音乐代码库的建立方法
(1)先找出乐曲的最低音和最高音范围,然后确定音符表T的顺序。 (2)把T值表建立在TABLE1,构成发音符的计数值放在“TABLE”。 (3)简谱码(音符)为高位,节拍为(节拍数)为低4位,音符节拍码放在程序的“TABLE”处。
(4)音符节拍码00H为音乐结束标记。 3.4.2选曲
在一个程序中,需要演奏两首或两首以上的歌曲时,音乐代码库的建立有两种方法:
(1)将每首歌曲建立相互独立的音符表T和发音符计数值TABLE。 (2)在建立公用音符表T后,再写每首歌的发音计数值TABLE中的代码 不管采用那种方法,每首歌曲结束时,在TABLE中均需加上音乐结束符00H。 3.4.3歌曲的设计
下面以歌曲《军港之夜》的设计为例,讲述歌曲在单片机中的实现。曲谱如下图所示:
8
图8 《军港之夜》乐谱
从歌中可看出,最低音为低7Si,最高音为高1Do。根据音乐软件的设计方法,简谱对应的简谱码、T值、节拍数如表所示。
简谱 低7 1 2 3 4 5 6 7 高1 低6 低5
发音 低音Si 中音Do 中音Re 中音Mi 中音Fa 中音So 中音La 中音Ti 高音Do 低音La
简谱码 1 2 3 4 5 6 7 8 9 A
T值 64524 64580 64684 64777 64820 64898 64968 65030 65058 64400
节拍码 1 2 3 4 5 6 8 A C F
节拍数 1/4 2/4 3/4 1 1+1/4 1+1/2 2 2+1/2 3 3+3/4
低音So B 64260
表5 简谱对应的简谱码、T值、节拍数
《军港之夜》代码实现如下:
SONG1: DB 04H ;1=C 2/4 军港之夜 DB
32H,54H,52H,32H,54H,52H,32H,12H,12H,32H,32H,54H,52H,32H,52H,52H,32H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H DB
0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32
9
专业:电子信息工程 姓名:李昌明 学号:093411128
H,52H,54H,32H,34H,31H,21H,12H,24H,24H DB
34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4H DB
22H,0D1H,11H,0E2H,0D2H,0C4H,0C4H,32H,52H,52H,32H,62H,5H,61H,54H,31H,52H,31H,12H,31H,31H,32H,54H,52H,32H,52H,52H,32H DB
32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,34H,34H,32H,52H,52,32H,62H,51H,61H,54H,31H,52H,31H,12H,32H,12H,32H,32H,54H,52H DB
32H,52H,52H,31H,31H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H DB
32H,52H,52H,32H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H DB
0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32H,52H,54H,32H,34H,31H,21H,12H,24H,24H DB
34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4H DB
22H,0D1H,11H,0E2H,0D2H,0C4H,0C4H,32H,52H,52H,32H,62H,5H,61H,54H,31H,52H,31H,12H,31H,31H,32H,54H,52H,32H,52H,52H,32H DB
32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,34H,34H,32H,52H,52,32H,62H,51H,61H,54H,31H,52H,31H,12H,32H,12H,32H,32H,54H,52H DB
32H,52H,52H,31H,31H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H
DB 32H,52H,52H,32H,32H,21H,31H,24H,74H,0D2H,0C2H,14H,14H,14H,14H DB 00H
TABLE2:DW 63835,64021,64103,64260,64400,64524,64580,64684,64777 DW 64820,64898,64968,65030,65058,65110,65157,65178
10