原创 单片机播放音乐原理

2009-5-3 11:14 5774 6 5 分类: MCU/ 嵌入式

让单片机唱歌







   经常有人找单片机发声的资料 ,  我整理了一下,帖了上来,给大家一些 参考. 
 一.基本知识


       1.要生产音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间.利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲.




          2. 利用8051的内部定时器使用其工作在计数器模式MODE1,改变计数值THOTLO以产生不同频率的方法.


          3. 例如频率为523Hz,其周期T1/5231912us,因此只要令计数器计时956us/1us956,在每次计数956次时将I/O反相,就可得到中音DO (523Hz).   

               计数脉冲值与频率的关系公式如下:

               NFi÷2÷Fr       N: 计算值;   

                                          Fi:  内部计时一次为1us, 故其频率为1MHz;


           4.  其计数值的求法如下:

               T65536-N65536-Fi÷2÷Fr 

              例如: K65536, F1000000Fi1MHz, 求低音DO(261Hz).中音DO (523Hz). 高音的DO (1046Hz)的计算值.

               T65536-N65536-Fi÷2÷Fr65536-1000000÷2÷Fr65536-500000/Fr 

              低音DO  T65536-500000/26263627

              中音DO  T65536-500000/52364580

              高音DO  T65536-500000/104765059


           5.  C调各音符频率与计数值T的对照表如表1所示.



                     1   C 调各音符频率与计数值T的对照表



音符
频率(HZ)
简谱码(T)
音符
频率(HZ)
简谱码(T)

1 DO
262
63628
# 4 FA#
740
64860

# 1 DO#
277
63731
5 SO
784
64898

2 RE
294
63853
# 5 SO#
831
64934

# 2 RE#
311
63928
6 LA
880
64968

3 M
330
64021
# 6
932
64994

4 FA
349
64103
7 SI
988
65030

# 4 FA#
370
64185
1 DO
1046
65058

5 SO
392
64260
# 1 DO#
1109
65085

# 5 SO#
415
64331
2 RE
1175
65110

6 LA
440
64400
# 2 RE#
1245
65134

# 6
466
64463
3 M
1318
65157

7 SI
494
64524
4 FA
1397
65178

1 DO
523
64580
# 4 FA#
1480
65198

# 1 DO#
554
64633
5 SO
1568
65217

2 RE
587
64684
# 5 SO#
1661
65235

# 2 RE#
622
64732
6 LA
1760
65252

3 M
659
64777
# 6
1865
65268

4 FA
698
64820
7 SI
1967
65283















二.节拍








 ()  相关知识

每个音符使用1个字节,字节的高4位代表音符的高低,4位代表音符的节拍,2为节拍与节拍码的对照.如果1拍为0.4,1/4拍是0.1,只要设定延迟时间就可求得节拍的时间.假设1/4拍为1DELAY,1拍应为4DELAY,以此类推.所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如表31/41/8节拍的时间设定.


                     2   节拍与节拍码对照




   
   
   
   

1
1/4
1
1/8

2
2/4
2
1/4

3
3/4
3
3/8

4
1
4
1/2

5
11/4
5
5/8

6
11/2
6
3/4

8
2
8
1

A
21/2
A
11/4

C
3
C
11/2

F
33/4
 
 


                3   各调1/4节拍的时间设定      各调1/8节拍的时间设定


   
DELAY
   
DELAY

4/4
125 毫秒
4/4
62 毫秒

3/4
187 毫秒
3/4
94 毫秒

2/4
250 毫秒
2/4
125毫秒

 

三. 编码


建立音乐的步骤:

        1.   先把乐谱的音符找出,然后由表63建立T值表的顺序.   

        2.  T值勤表建立在TABLE1,构成发音符的计数值放在"TABLE".

        3.  简谱码(音符)为高位,节拍为(节拍数)为低4,音符节拍码放在程序的"TABLE". 


                4   简谱对应的简谱码.T. 节拍数



 
 
   
T 
   
   

5
低音 SO
1
64260
1
1/4

6
低音 LA
2
64400
2
2/4

7
低音 TI
3
64524
3
3/4

1
中音 DO
4
64580
4
1

2
中音 RE
5
64684
5
11/4

3
中音 MI
6
64777
6
11/2

4
中音 FA
7
64820
8
2

5
中音 SO
8
64898
A
21/2

6
中音 LA
9
64968
C
3

7
中音 TI
A
65030
F
33/4

1
高音 DO
B
65058



2
高音 RE
C
65110



3
高音 MI
D
65157



4
高音 FA
E
65178



5
高音 SO
F
65217



 
不发音
0
 



1/4拍的延迟时间=187毫秒





DELAY:     MOV  R7.  #02

D2:             MOV  R4.  #187

D3:             MOV  R3.  #248

                   DJNZ  R3. $

                   DJNZ  R4. D3

                   DJNZ  R7. D2

                   DJNZ  R5. DELAY

                   RET
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条