小工具知识网

当前位置: 首页 > 行业知识 > 小白跟做江科大51单片机之蜂鸣器播放音乐

行业知识

小白跟做江科大51单片机之蜂鸣器播放音乐

2026-11-07 03:46:09 来源:互联网转载

1.引入Delay及Timer0相关文件

()

2.编写main.c代码

#include

()

#include "Delay.h"

#include "Timer0.h"

sbit Buzzer=P2^5;

//音符与索引对应表,P:休止符,L:低音,M:中音,H:高音,下划线:升半音符号#

#define P      0

#define L1    1

#define L1_    2

#define L2    3

#define L2_    4

#define L3    5

#define L4    6

#define L4_    7

#define L5    8

#define L5_    9

#define L6    10

#define L6_    11

#define L7    12

#define M1    13

#define M1_    14

#define M2    15

#define M2_    16

#define M3    17

#define M4    18

#define M4_    19

#define M5    20

#define M5_    21

#define M6    22

#define M6_    23

#define M7    24

#define H1    25

#define H1_    26

#define H2    27

#define H2_    28

#define H3    29

#define H4    30

#define H4_    31

#define H5    32

#define H5_    33

#define H6    34

#define H6_    35

#define H7    36

//此数组是取到全部的音

unsigned int FreqTable[]={

    0,

    63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,

    64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,

    65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283,

};

//乐谱,必须使用code,RAM最大128字节

unsigned char code Music[]={

    //音符,时值,

    

    //1

    P,    4,

    P,    4,

    P,    4,

    M6,    2,

    M7,    2,

    

    H1,    4+2,

    M7,    2,

    H1,    4,

    H3,    4,

    

    M7,    4+4+4,

    M3,    2,

    M3,    2,

    

    //2

    M6,    4+2,

    M5,    2,

    M6, 4,

    H1,    4,

    

    M5,    4+4+4,

    M3,    4,

    

    M4,    4+2,

    M3,    2,

    M4,    4,

    H1,    4,

    

    //3

    M3,    4+4,

    P,    2,

    H1,    2,

    H1,    2,

    H1,    2,

    

    M7,    4+2,

    M4_,2,

    M4_,4,

    M7,    4,

    

    M7,    8,

    P,    4,

    M6,    2,

    M7,    2,

    

    //4

    H1,    4+2,

    M7,    2,

    H1,    4,

    H3,    4,

    

    M7,    4+4+4,

    M3,    2,

    M3,    2,

    

    M6,    4+2,

    M5,    2,

    M6, 4,

    H1,    4,

    

    //5

    M5,    4+4+4,

    M2,    2,

    M3,    2,

    

    M4,    4,

    H1,    2,

    M7,    2+2,

    H1,    2+4,

    

    H2,    2,

    H2,    2,

    H3,    2,

    H1,    2+4+4,

    

    //6

    H1,    2,

    M7,    2,

    M6,    2,

    M6,    2,

    M7,    4,

    M5_,4,

    

    

    M6,    4+4+4,

    H1,    2,

    H2,    2,

    

    H3,    4+2,

    H2,    2,

    H3,    4,

    H5,    4,

    

    //7

    H2,    4+4+4,

    M5,    2,

    M5,    2,

    

    H1,    4+2,

    M7,    2,

    H1,    4,

    H3,    4,

    

    H3,    4+4+4+4,

    

    //8

    M6,    2,

    M7,    2,

    H1,    4,

    M7,    4,

    H2,    2,

    H2,    2,

    

    H1,    4+2,

    M5,    2+4+4,

    

    H4,    4,

    H3,    4,

    H3,    4,

    H1,    4,

    

    //9

    H3,    4+4+4,

    H3,    4,

    

    H6,    4+4,

    H5,    4,

    H5,    4,

    

    H3,    2,

    H2,    2,

    H1,    4+4,

    P,    2,

    H1,    2,

    

    //10

    H2,    4,

    H1,    2,

    H2,    2,

    H2,    4,

    H5,    4,

    

    H3,    4+4+4,

    H3,    4,

    

    H6,    4+4,

    H5,    4+4,

    

    //11

    H3,    2,

    H2,    2,

    H1,    4+4,

    P,    2,

    H1,    2,

    

    H2,    4,

    H1,    2,

    H2,    2+4,

    M7,    4,

    

    M6,    4+4+4,

    P,    4,

    

    0xFF    //终止标志

};

unsigned char freselect,Musicselect;

void main()

{

    

    Timer0Init();

    while(1)

    {

        if(Music[Musicselect]!=0xFF)

        {

            freselect=Music[Musicselect];

            Musicselect++;

            Delay(500/4*Music[Musicselect]);

            Musicselect++;

            TR0=0;

            Delay(5);    //音符间短暂停顿

            TR0=1;

        }

        else

        {

            TR0=0;

            while(1);

        }

    }

}

//1ms会有一次中断

//产生500HZ的频率

void Timer0_Routine() interrupt 1

{

    if(FreqTable[freselect])

    {

        TL0 = FreqTable[freselect]%256;        //设置定时初值

      TH0 = FreqTable[freselect]/256;        //设置定时初值

      Buzzer=!Buzzer;

    }

}

3.结果

蜂鸣器之天空之城

上一篇:家园资源包下载攻略,轻松掌握一键下载步骤,资源获取无忧!

下一篇:arcgis怎么添加服务器地址?