单片机音乐的应用

 源:http://blog.163.com/zhaojun_xf/blog/static/3005058020084196558440/

单片机音乐的应用

相关知识

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

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

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

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

    N=Fi÷2÷Fr   N:计数值;

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

                  Fr:要产生的频率;

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

      T=65536-N=65536-Fi÷2÷Fr 

    例如:设K=65536F=1000000=Fi=1MHz,求低音DO261MHz)、中音DO523MHz)、高音DO1046MHz)的计数值。

    T=65536-N=65536-Fi÷2÷Fr=65536-1000000÷2÷Fr=65536-500000/Fr

    低音DOT=65536-500000/262=63627

    中音DOT=65536-500000/523=64580

    高音DOT=65536-500000/1047=65059

    5.C调各音符频率与计数值T的对照表如下:

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

音符

 

1DO

频率(Hz

简谱码(T值)

音符

频率(Hz

简谱码(T值)

262

63628

#4FA#

740

64860

#1DO#

277

63731

5SO

784

64898

2RE

#2RE#

294

63835

#5SO#

831

64934

311

63928

6LA

880

64968

3M

330

64021

#6

932

64994

4FA

349

64103

7SI

988

65030

#4FA#

370

64185

1DO

1046

65058

5SO

392

64260

#1DO#

1109

65085

#5SO#

415

64331

2RE

1175

65110

6LA

440

64400

#2RE#

1245

65134

#6

466

64463

3M

1318

65157

7SI

494

64524

4FA

1397

65178

1DO

523

64580

#4FA#

1480

65198

#1DO#

554

64633

5SO

1568

65217

2RE

587

64684

#5SO#

1661

65235

#2RE#

622

64732

6LA

1760

65252

3M

659

64777

#6

1865

65268

4FA

698

64820

1967

65283

表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/4节拍的时间设定

  

DELAY

  

DELAY

4/4

125毫秒

4/4

62毫秒

3/4

187毫秒

3/4

94毫秒

2/4

250毫秒

2/4

125毫秒

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  节拍值放在R5,决定节拍

         RET

建立音乐的步骤

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

    2. T值表建立在TABLE1,构成发音符是计数值放在“TABLE”

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

相关知识:

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

 

 

  

T

5

低音SO

1

64260

6

低音LA

2

64400

7

低音TI

3

64524

1

中音DO

4

64580

2

中音RE

5

64684

3

中音MI

3

64777

4

中音FA

7

64820

5

中音SO

8

64898

6

中音LA

9

64968

7

中音TI

A

65030

1

高音DO

B

65058

2

高音RE

C

65110

3

高音MI

D

65157

4

高音FA

E

65178

5

高音SO

F

65217

 

不发音

0

 

简谱对应的简谱码、T值、节拍数

8051播放音乐电路图

程序:

C51

        此程序用了外中断INT0,用于换歌曲,当有键按下时,产生中断,奏下一首歌。没有中断时,循环演奏此曲。

  

汇编程序:

    此程序的思想与上边的C51基本一致,不同的是此程序没有用外中断(INT0)。所以次程序只是音乐演奏的基本程序。还有因为80518位的,而此程序仅用一单元作简谱码指针。所以只能放256个简谱。故不能写太长的歌曲。

   简谱码:

          82H         8对应音符   中音5SO  2对应节拍2/4

          01H         0不发音               1对音节拍1/4

          81H         8对应音符   中音5SO  1对应节拍1/4

          94H         9对应音符   中音6LA  4对应节拍1

          84H         8对应音符   中音5SO  4对应节拍1

    此程序是:T0(P3.4)作为控制门铃的按钮每按一次,歌曲就改变。按完6次,再重复循环。按钮接P3.4

   以上三个程序的原理图基本上是一样的,不同的只是有无按钮和按钮的接法。第一个程序的按钮是接INT0P3.2)。第二个程序无按钮。第三个程序的按钮是接T0P3.4)。别的都是一样的。

电子琴

 功能说明:

 1. 由4×4组成的16个按钮矩阵,设计成16个音。

                          

2. 硬件原理图:

程序:

实物图: 

原文地址:https://www.cnblogs.com/LittleTiger/p/3941279.html