如何产生音乐频率:
1.要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,然后利用计时器计时此半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,如此就可在I/O脚上得到此频率的脉冲.
2.利用8051的内部计时器让其工作在计数模式MODE1下,改变计数值TH0及TL0以产生不同的频率.
3.例如以6MHZ晶振为例:要产生频率为523HZ,其周期T=1/523=1912us,其半周期为1912/2=956us,因此只要令计数器计时956us/1us=956.所以在每计数956次时将I/O反相,就可得到中音DO(523HZ).
计数脉冲值与频率的关系公式如下:
N=Fi+2+Fr N:计数值
Fi:内部计时一次2us,以6MHZ晶振为例,故其频率为500000HZ
Fr:要产生的频率
4.其计数值的求法如下:
T=65536-N=65536-Fi/2/Fr
例如:求低音DO(261HZ),中音DO(523HZ),高音DO(1046HZ) 的计数值?
设K=65536 F=500000=Fi=0.5MHZ
T=65536-N=65536-Fi/2/Fr=65536-500000/2/Fr=65536-250000/Fr
低音DO的 T=65536-250000/262=64582
中音DO的 T=65536-250000/523=65058
高音DO的 T=65536-250000/1047=65297
5. C调各音符频率与计数值T的对照表:
音符 频率HZ 6MHZ 十六进制值 音符 频率HZ 6MHZ 十六进制值
低1DO 262 64582 FC46 #4FA# 740 65198 FEAE
#1DO# 277 64634 FC7A 中5SO 784 65217 FEC1
低2RE 294 64686 FCAE #5SO# 831 65235 FED3
#2RE# 311 64732 FCDC 中6LA 880 65252 FEE4
低3M 330 64779 FD0B #6LA# 932 65268 FEF4
低4FA 349 64820 FD34 中7SI 988 65283 FF03
#4FA# 370 64860 FD5C 高1DO 1046 65297 FF11
低5SO 392 64898 FD82 #DO# 1109 65311 FF1F
#5SO# 415 64934 FDA6 高2RE 1175 65323 FF2B
低6LA 440 64968 FDC8 #2RE# 1245 65335 FF37
#6LA# 466 65000 FDE8 高3M 1318 65346 FF42
低7SI 494 65030 FE06 高4FA 1397 65357 FF4D
中1DO 523 65058 FE22 #4FA# 1480 65367 FF57
#1DO# 554 65085 FE3D 高5SO 1568 65377 FF61
中2RE 578 65103 FE4F #5S0# 1661 65385 FF69
#2RE# 622 65134 FE6E 高6LA 1760 65394 FF72
中3M 659 65157 FE85 #6LA# 1865 65402 FF7A
中4FA 698 65178 FE9A 高7SI 1976 65409 FF81
"# "表示半音,用于上升或下降半个音
如何产生节拍:
每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,如果1拍节为0.4秒则1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间,再来我们假设1/4拍为1 DELY单位,则1拍应为4个DELY,以此类推,只要求得1/4拍的DELY单位时间,其余的节拍就是它的倍数.
1/4拍的延迟时间=187亳秒
DELAY:MOV R7,#02H
D2:MOV R4,#31H
D3 ;MOV R3,#0F1H
DJNZ R3,$
DJNZ R4,D3
DJNZ R7,D2
DJNZ R5,DELAY ;R5存节拍数
RET
节拍与节拍码对照表
节拍码 节拍数(拍) 节拍码 节拍数(拍)
1 1/4 1 1/8
2 2/4 2 1/4
3 3/4 3 3/8
4 1 4 1/2
5 1又1/4 5 5/8
6 1又1/2 6 3/4
8 2 8 1
A 2又1/2 A 1又1/4
C 3 C 1又1/2
F 1又3/4
各调值1/4节拍的时间设定 各调值1/8节拍的时间设定
曲调值 DELAY 6MHZ(H) 曲调值 DELAY 6MHZ(H)
调4/4 125亳秒 3E 调4/4 62亳秒 1F
3/4 187 5D 3/4 94 2F
2/4 250 7D 2/4 125 3E
建立音乐的步骤:
1.先找出乐曲的最低音,最高音范围,然后确定音符表首地址.
2.如把音符表建在 0151H,适用简谱范围为 低音1 到 高音1.
3.简谱码(音符)为高4位,节拍码(节拍数)为低4位,音符节拍码放在程序的0300H处.
本程序有关约定:
根据不同曲调,可以建立不同简谱音符表
0151H- 为一简谱音符表首地址适用简谱范围 低音1 到 高音1
0159H- 为一简谱音符表首地址适用简谱范围 低音5 到 高音5
0300H- 为第一首歌曲首地址,字节高位为音符代码,低位为节拍代码组成简谱曲码.
003EH 为歌曲DPH高位首地址,0041H为歌曲DPL低位首地址
002FH 为节拍速度代码 ;
0073H 为音符表低位地址 ,高位地址为01H,不可改动
0047H 内容为该首放音二次,01为放音1次.
008DH 改为00H,则反复放该首曲(调试时用).
乐曲存放约定:
曲码中00H表示上首曲结束标记 ;接著为下首曲节拍速度值,再接著为该首曲音符表首地址,然后才是乐曲曲码,全部乐曲结束标记为连续两个单元是00H 00H
各调值节拍时间代码表(6MHZ晶振时)
曲调值 节拍速度值
4/4 3EH
3/4 5DH
2/4 7DH
1.要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,然后利用计时器计时此半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,如此就可在I/O脚上得到此频率的脉冲.
2.利用8051的内部计时器让其工作在计数模式MODE1下,改变计数值TH0及TL0以产生不同的频率.
3.例如以6MHZ晶振为例:要产生频率为523HZ,其周期T=1/523=1912us,其半周期为1912/2=956us,因此只要令计数器计时956us/1us=956.所以在每计数956次时将I/O反相,就可得到中音DO(523HZ).
计数脉冲值与频率的关系公式如下:
N=Fi+2+Fr N:计数值
Fi:内部计时一次2us,以6MHZ晶振为例,故其频率为500000HZ
Fr:要产生的频率
4.其计数值的求法如下:
T=65536-N=65536-Fi/2/Fr
例如:求低音DO(261HZ),中音DO(523HZ),高音DO(1046HZ) 的计数值?
设K=65536 F=500000=Fi=0.5MHZ
T=65536-N=65536-Fi/2/Fr=65536-500000/2/Fr=65536-250000/Fr
低音DO的 T=65536-250000/262=64582
中音DO的 T=65536-250000/523=65058
高音DO的 T=65536-250000/1047=65297
5. C调各音符频率与计数值T的对照表:
音符 频率HZ 6MHZ 十六进制值 音符 频率HZ 6MHZ 十六进制值
低1DO 262 64582 FC46 #4FA# 740 65198 FEAE
#1DO# 277 64634 FC7A 中5SO 784 65217 FEC1
低2RE 294 64686 FCAE #5SO# 831 65235 FED3
#2RE# 311 64732 FCDC 中6LA 880 65252 FEE4
低3M 330 64779 FD0B #6LA# 932 65268 FEF4
低4FA 349 64820 FD34 中7SI 988 65283 FF03
#4FA# 370 64860 FD5C 高1DO 1046 65297 FF11
低5SO 392 64898 FD82 #DO# 1109 65311 FF1F
#5SO# 415 64934 FDA6 高2RE 1175 65323 FF2B
低6LA 440 64968 FDC8 #2RE# 1245 65335 FF37
#6LA# 466 65000 FDE8 高3M 1318 65346 FF42
低7SI 494 65030 FE06 高4FA 1397 65357 FF4D
中1DO 523 65058 FE22 #4FA# 1480 65367 FF57
#1DO# 554 65085 FE3D 高5SO 1568 65377 FF61
中2RE 578 65103 FE4F #5S0# 1661 65385 FF69
#2RE# 622 65134 FE6E 高6LA 1760 65394 FF72
中3M 659 65157 FE85 #6LA# 1865 65402 FF7A
中4FA 698 65178 FE9A 高7SI 1976 65409 FF81
"# "表示半音,用于上升或下降半个音
如何产生节拍:
每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,如果1拍节为0.4秒则1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间,再来我们假设1/4拍为1 DELY单位,则1拍应为4个DELY,以此类推,只要求得1/4拍的DELY单位时间,其余的节拍就是它的倍数.
1/4拍的延迟时间=187亳秒
DELAY:MOV R7,#02H
D2:MOV R4,#31H
D3 ;MOV R3,#0F1H
DJNZ R3,$
DJNZ R4,D3
DJNZ R7,D2
DJNZ R5,DELAY ;R5存节拍数
RET
节拍与节拍码对照表
节拍码 节拍数(拍) 节拍码 节拍数(拍)
1 1/4 1 1/8
2 2/4 2 1/4
3 3/4 3 3/8
4 1 4 1/2
5 1又1/4 5 5/8
6 1又1/2 6 3/4
8 2 8 1
A 2又1/2 A 1又1/4
C 3 C 1又1/2
F 1又3/4
各调值1/4节拍的时间设定 各调值1/8节拍的时间设定
曲调值 DELAY 6MHZ(H) 曲调值 DELAY 6MHZ(H)
调4/4 125亳秒 3E 调4/4 62亳秒 1F
3/4 187 5D 3/4 94 2F
2/4 250 7D 2/4 125 3E
建立音乐的步骤:
1.先找出乐曲的最低音,最高音范围,然后确定音符表首地址.
2.如把音符表建在 0151H,适用简谱范围为 低音1 到 高音1.
3.简谱码(音符)为高4位,节拍码(节拍数)为低4位,音符节拍码放在程序的0300H处.
本程序有关约定:
根据不同曲调,可以建立不同简谱音符表
0151H- 为一简谱音符表首地址适用简谱范围 低音1 到 高音1
0159H- 为一简谱音符表首地址适用简谱范围 低音5 到 高音5
0300H- 为第一首歌曲首地址,字节高位为音符代码,低位为节拍代码组成简谱曲码.
003EH 为歌曲DPH高位首地址,0041H为歌曲DPL低位首地址
002FH 为节拍速度代码 ;
0073H 为音符表低位地址 ,高位地址为01H,不可改动
0047H 内容为该首放音二次,01为放音1次.
008DH 改为00H,则反复放该首曲(调试时用).
乐曲存放约定:
曲码中00H表示上首曲结束标记 ;接著为下首曲节拍速度值,再接著为该首曲音符表首地址,然后才是乐曲曲码,全部乐曲结束标记为连续两个单元是00H 00H
各调值节拍时间代码表(6MHZ晶振时)
曲调值 节拍速度值
4/4 3EH
3/4 5DH
2/4 7DH