程序功能
单片机蜂鸣器播放铃芽之旅
程序代码
main.c
#include<reg52.h>
#include<intrins.h>
#include<Music.h> //音乐播放头文件
sbit KEY1 = P3^1;
sbit KEY2 = P3^0;
sbit KEY3 = P3^2;
sbit KEY4 = P3^3;
//--定义使用的IO口--//
sbit BUZZ0 = P2^5; //蜂鸣器控制引脚
sbit BUZZ1 = P0^1;
uchar KEY = 0;
uchar T0_group = 1;
uchar T1_group = 1;
bit start = 0;
uchar skip_t0();
void main()
{
MainInitialize_Music_T0(); //T0初始化
// MainInitialize_Music_T1(); //T1初始化
while(1)
{
if(KEY1 == 0)
{
P2 = ~1;
start = 1;
}
T0_Service();
// T1_Service();
}
}
//T0计时器的主程序服务函数
void T0_Service ()
{
if(tmrflag_T0 == 1 & start == 1) //如果计时器T0退出中断
{
tmrflag_T0 = 0;
switch(T0_group)
{
case 1:
T0_group += PlayMusic_T0(LYHD1_Note1,LYHD1_Beat1); break;
case 2:
T0_group += PlayMusic_T0(LYHD1_Note2,LYHD1_Beat2); break;
case 3:
T0_group += /*skip_t0();*/PlayMusic_T0(LYHD1_Note3,LYHD1_Beat3);
break;
case 4:
T0_group += /*skip_t0();*/PlayMusic_T0(LYHD1_Note4,LYHD1_Beat4);
break;
case 5:
T0_group += PlayMusic_T0(LYHD1_Note5,LYHD1_Beat5); break;
case 6:
T0_group += PlayMusic_T0(LYHD1_Note6,LYHD1_Beat6); break;
case 7:
T0_group += PlayMusic_T0(LYHD1_Note7,LYHD1_Beat7); break;
case 8:
T0_group += PlayMusic_T0(LYHD1_Note8,LYHD1_Beat8); break;
case 9:
T0_group += PlayMusic_T0(LYHD1_Note9,LYHD1_Beat9); break;
case 10:
T0_group += PlayMusic_T0(LYHD1_Note10,LYHD1_Beat10); break;
case 11:
T0_group += PlayMusic_T0(LYHD1_Note11,LYHD1_Beat11); break;
case 12:
T0_group += PlayMusic_T0(LYHD1_Note12,LYHD1_Beat12); break;
case 13:
T0_group += PlayMusic_T0(LYHD1_Note13,LYHD1_Beat13); break;
case 14:
T0_group += PlayMusic_T0(LYHD1_Note14,LYHD1_Beat14); break;
case 15:
T0_group += PlayMusic_T0(LYHD1_Note15,LYHD1_Beat15); break;
case 16:
T0_group += PlayMusic_T0(LYHD1_Note16,LYHD1_Beat16); break;
case 17:
T0_group += PlayMusic_T0(LYHD1_Note17,LYHD1_Beat17); break;
case 18:
T0_group += PlayMusic_T0(LYHD1_Note18,LYHD1_Beat18); break;
case 19:
T0_group += PlayMusic_T0(LYHD1_Note19,LYHD1_Beat19); break;
case 20:
T0_group += PlayMusic_T0(LYHD1_Note20,LYHD1_Beat20); break;
case 21:
T0_group += PlayMusic_T0(LYHD1_Note21,LYHD1_Beat21); break;
case 22:
T0_group += PlayMusic_T0(LYHD1_Note22,LYHD1_Beat22); break;
case 23:
T0_group += PlayMusic_T0(LYHD1_Note23,LYHD1_Beat23); break;
case 24:
T0_group += PlayMusic_T0(LYHD1_Note24,LYHD1_Beat24); break;
case 25:
T0_group += PlayMusic_T0(LYHD1_Note25,LYHD1_Beat25); break;
case 26:
T0_group += PlayMusic_T0(LYHD1_Note26,LYHD1_Beat26); break;
case 27:
T0_group += PlayMusic_T0(LYHD1_Note27,LYHD1_Beat27); break;
case 28:
T0_group += PlayMusic_T0(LYHD1_Note28,LYHD1_Beat28); break;
case 29:
T0_group += PlayMusic_T0(LYHD1_Note29,LYHD1_Beat29); break;
case 30:
T0_group += PlayMusic_T0(LYHD1_Note30,LYHD1_Beat30); break;
case 31:
T0_group += PlayMusic_T0(LYHD1_Note31,LYHD1_Beat31); break;
case 32:
T0_group += PlayMusic_T0(LYHD1_Note32,LYHD1_Beat32); break;
case 33:
T0_group += PlayMusic_T0(LYHD1_Note33,LYHD1_Beat33); break;
case 34:
T0_group += PlayMusic_T0(LYHD1_Note34,LYHD1_Beat34); break;
case 35:
T0_group += PlayMusic_T0(LYHD1_Note35,LYHD1_Beat35); break;
case 36:
T0_group = 1;
start = 0;
tmrflag_T0 = 1;
break;
}
}
}
uchar skip_t0()
{
tmrflag_T0 = 1;
return 1;
}
//T1计时器的主程序服务函数
void T1_Service ()
{
if(tmrflag_T1 == 1 & start == 1) //如果计时器T1退出中断
{
tmrflag_T1 = 0;
switch(T1_group)
{
case 0:
T1_group += PlayMusic_T1(LYHD2_Note1,LYHD2_Beat1,8); break;
case 1:
T1_group += PlayMusic_T1(LYHD2_Note2,LYHD2_Beat2,8); break;
case 2:
T1_group = 0;
start = 0;
tmrflag_T1 = 1;
break;
}
}
}
//计时器T0初始化函数
void MainInitialize_Music_T0()
{
EA = 1; //使能全局中断
TMOD &= 0xf0; //配置T0工作在模式1
TMOD |= 0x01;
TH0 = T0RH;
TL0 = T0RL;
// PT0 = 1;
ET0 = 1; //使能T0中断
TR0 = 1; //启动T0
}
//计时器T1初始化函数
void MainInitialize_Music_T1()
{
EA = 1; //使能全局中断
TMOD &= 0x0f; //配置T0工作在模式1
TMOD |= 0x10;
TH1 = T1RH;
TL1 = T1RL;
ET1 = 1; //使能T1中断
TR1 = 1; //启动T1
}
/* 计时器T0乐曲播放函数 */
uchar PlayMusic_T0(uchar *MusicNote,uchar *MusicBeat)
{
static unsigned char beat = 1; //当前节拍索引
static unsigned char note = 1; //当前节拍对应的音符
static uchar MusicLong = 0;
static uchar MusicSpeed = 0;
enable_T0 = 0;
MusicLong = *MusicNote; //音符数组的第一位是音符的个数
MusicSpeed = *MusicBeat; //节拍数组的第一位是节拍的速度(拍/min)
if (beat <= MusicLong) //判断是否已经播放完
{
note = *(MusicNote+beat)+tone; //提取音符
T0RH = NoteReload[note] >> 8; //刷新计时器预装载值
T0RL = NoteReload[note];
beatTime0 = (*(MusicBeat+beat) *NoteFrequ[note]*2 /MusicSpeed *60 /4 ); //计算节拍所需中断次数
soundTime0 = beatTime0 - (beatTime0 >> 3); //计算发声所需中断次数
if(note != NO+tone) //判断是否为空音符
{
enable_T0 = 1; //使能蜂鸣器发声
}
beat++; //节拍加1
ET0 = 1;
return 0; //未播完,返回0
}
else //播放完,返回1
{
P2 = ~(T0_group+1);
beat = 1; //重置节拍索引值
tmrflag_T0 = 1;
return 1;
}
}
/* 计时器T1乐曲播放函数 */
uchar PlayMusic_T1(uchar *MusicNote,uchar *MusicBeat,uchar MusicLong)
{
static unsigned char beat = 0; //当前节拍索引
static unsigned char note = 0; //当前节拍对应的音符
enable_T1 = 0;
if (beat < MusicLong) //判断是否已经播放完
{
note = *(MusicNote+beat)+tone; //提取音符
T1RH = NoteReload[note] >> 8; //刷新计时器预装载值
T1RL = NoteReload[note];
beatTime1 = (*(MusicBeat+beat) * NoteFrequ[note]) /3; //计算节拍所需中断次数
soundTime1 = beatTime1 - (beatTime1 >> 3); //计算发声所需中断次数
if(note != NO+tone) //判断是否为空音符
{
enable_T1 = 1; //使能蜂鸣器发声
}
beat++; //节拍加1
ET1 = 1;
return 0; //未播完,返回0
}
else //播放完,返回1
{
beat = 0; //重置节拍索引值
tmrflag_T1 = 1;
return 1;
}
}
/* T0中断服务函数,用于控制蜂鸣器发声 */
void InterruptTimer0() interrupt 1
{
TH0 = T0RH; //重新加载重载值
TL0 = T0RL;
if (enable_T0) //使能时反转蜂鸣器控制电平
{
BUZZ0 = ~BUZZ0;
}
else //未使能时关闭蜂鸣器
{
BUZZ0 = 1;
}
if (time0 >= beatTime0) //计时器达到节拍次数
{
time0 = 0; //重置计数器
ET0 = 0;
tmrflag_T0 = 1; //开启下一个节拍
}
else if (time0 == soundTime0)//计时器达到发声次数
{
enable_T0 = 0;
}
time0++;
}
/* T1中断服务函数,用于控制蜂鸣器发声 */
void InterruptTimer1() interrupt 3
{
// EA = 0;
TH1 = T1RH; //重新加载重载值
TL1 = T1RL;
// EA = 1;
if (enable_T1) //使能时反转蜂鸣器控制电平
{
BUZZ1 = ~BUZZ1;
}
else //未使能时关闭蜂鸣器
{
BUZZ1 = 1;
}
if (time1 >= beatTime1) //计时器达到节拍次数
{
time1 = 0; //重置计数器
ET1 = 0;
tmrflag_T1 = 1; //开启下一个节拍
}
else if (time1 == soundTime1)//计时器达到发声次数
{
enable_T1 = 0;
}
time1++;
}
music.h
/*********************Music.h*************************************/
#define uchar unsigned char
#define uint unsigned int
#define L1 0
#define L2 2
#define L3 4
#define L4 5
#define L5 7
#define L6 9
#define L7 11
#define M1 12
#define M2 14
#define M3 16
#define M4 17
#define M5 19
#define M6 21
#define M7 23
#define H1 24
#define H2 26
#define H3 28
#define H4 29
#define H5 31
#define H6 33
#define H7 35
#define NO 36
/*变量tone控制歌曲的原调:
原调C: tone = 0-12
原调C#: tone = 1-12
原调D: tone = 2-12
原调D#: tone = 3-12
原调E: tone = 4-12
原调F: tone = 5-12
原调F#: tone = 6-12
原调G: tone = 7-12
原调G#: tone = 8-12
原调A: tone = 9-12
原调A#: tone = 10-12
原调B: tone = 11-12
*/
char tone = -7;
unsigned char T0RH = 0xFF; //T0重载值的高字节
unsigned char T0RL = 0x00; //T0重载值的低字节
unsigned char T1RH = 0xFF; //T1重载值的高字节
unsigned char T1RL = 0x00; //T1重载值的低字节
bit enable_T0 = 0; //蜂鸣器发声使能标志
bit tmrflag_T0 = 0; //定时器中断完成标志
bit enable_T1 = 0; //蜂鸣器发声使能标志
bit tmrflag_T1 = 0; //定时器中断完成标志
unsigned int time0 = 0; //计时器T0中断次数计数器
unsigned int beatTime0 = 0; //计时器T0节拍所需中断次数
unsigned int soundTime0 = 0; //计时器T0发声所需中断次数
unsigned int time1 = 0; //计时器T0中断次数计数器
unsigned int beatTime1 = 0; //计时器T0节拍所需中断次数
unsigned int soundTime1 = 0; //计时器T0发声所需中断次数
//unsigned int code NoteFrequ[] = { //低音1-7中音1-7和高音1-7对应频率列表
// 262, 294, 330, 349, 392, 440, 494, //低音1-7
// 523, 587, 659, 698, 784, 880, 988, //中音1-7
// 1047, 1175, 1319, 1397, 1568, 1760, 1976, //高音1-7
// 1976
//};
unsigned int code NoteFrequ[] = { //低音1-7中音1-7和高音1-7对应频率列表
262,278,294,312,330,350,370,392,416,440,467,494,
524,555,588,623,660,699,740,784,831,880,933,988,
1047,1109,1175,1245,1319,1397,1480,1568,1662,1760,1865,1976,
1976
} ;
unsigned int code NoteReload[] = { //低音1-7中音1-7和高音1-7对应的定时器重载值
65536 - (11059200/12) / (262*2), //低音1
65536 - (11059200/12) / (278*2), //1#
65536 - (11059200/12) / (294*2), //2
65536 - (11059200/12) / (312*2), //2#
65536 - (11059200/12) / (330*2), //3
65536 - (11059200/12) / (350*2), //4
65536 - (11059200/12) / (270*2), //4#
65536 - (11059200/12) / (392*2), //5
65536 - (11059200/12) / (416*2), //5#
65536 - (11059200/12) / (440*2), //6
65536 - (11059200/12) / (467*2), //6#
65536 - (11059200/12) / (494*2), //7
65536 - (11059200/12) / (524*2), //中音1
65536 - (11059200/12) / (555*2), //1#
65536 - (11059200/12) / (588*2), //2
65536 - (11059200/12) / (623*2), //2#
65536 - (11059200/12) / (660*2), //3
65536 - (11059200/12) / (699*2), //4
65536 - (11059200/12) / (740*2), //4#
65536 - (11059200/12) / (784*2), //5
65536 - (11059200/12) / (831*2), //5#
65536 - (11059200/12) / (880*2), //6
65536 - (11059200/12) / (933*2), //6#
65536 - (11059200/12) / (988*2), //7
65536 - (11059200/12) / (1047*2), //高音1
65536 - (11059200/12) / (1109*2), //1#
65536 - (11059200/12) / (1175*2), //2
65536 - (11059200/12) / (1245*2), //2#
65536 - (11059200/12) / (1319*2), //3
65536 - (11059200/12) / (1397*2), //4
65536 - (11059200/12) / (1480*2), //4#
65536 - (11059200/12) / (1568*2), //5
65536 - (11059200/12) / (1662*2), //5#
65536 - (11059200/12) / (1760*2), //6
65536 - (11059200/12) / (1856*2), //6#
65536 - (11059200/12) / (1976*2), //7
65536 - (11059200/12) / (1976*2), //NO
};
//音符表/节拍表
uchar code LYHD1_Note1[]={17, M6, H3,H3, H1,M7,M6, M5,M3,M5, M6,M7,H1, H2,H1,M7, M5, NO}; //1
uchar code LYHD1_Beat1[]={78, 4, 3,1, 1,1,2, 2,1,1, 2,1,1, 1,1,2 , 4, 4};
uchar code LYHD1_Note2[]={17, M6, H3,H3, H1,M7,M6, M5,M3,M5, M6,M7,H1, H2,H1,M7, M6, NO};
uchar code LYHD1_Beat2[]={78, 4, 3,1, 1,1,2, 2,1,1, 2,1,1, 1,1,2 , 4, 4};
uchar code LYHD1_Note3[]={17, M6, H3,H3, H1,M7,M6, M5,M3,M5, M6,M7,H1, H2,H1,M7, M5, NO}; //5
uchar code LYHD1_Beat3[]={78, 4, 3,1, 1,1,2, 2,1,1, 2,1,1, 1,1,2 , 4, 4};
uchar code LYHD1_Note4[]={17, M6, H3,H3, H1,M7,M6, M5,M3,M5, M6,M7,H1, H2,H1,M7, M6, NO};
uchar code LYHD1_Beat4[]={78, 4, 3,1, 1,1,2, 2,1,1, 2,1,1, 1,1,2 , 4, 4};
uchar code LYHD1_Note5[]={9, H3, H5,H3, H2, H3, H1, H2, M7, M5 }; //9
uchar code LYHD1_Beat5[]={78, 4, 3,1, 4, 4, 4, 4, 4, 4 };
uchar code LYHD1_Note6[]={9, H3, H5,H3, H2, H3, H1, H2, M7, H1 };
uchar code LYHD1_Beat6[]={78, 4, 3,1, 4, 4, 4, 4, 4, 4 };
uchar code LYHD1_Note7[]={17, M6, H3,H3, H1,M7,M6, M5,M3,M5, M6,M7,H1, H2,H1,M7, M5, NO}; //13
uchar code LYHD1_Beat7[]={78, 4, 3,1, 1,1,2, 2,1,1, 2,1,1, 2,1,1 , 4, 4};
uchar code LYHD1_Note8[]={17, M6, H3,H3, H1,M7,M6, M5,M3,M5, M6,M7,H1, H2,H1,M7, M6, NO};
uchar code LYHD1_Beat8[]={78, 4, 3,1, 1,1,2, 2,1,1, 2,1,1, 2,1,1 , 4, 4};
uchar code LYHD1_Note9[]={17, M6, H3,H3, H1,M7,M6, M5,M3,M5, M6,M7,H1, H2,H1,M7, M5, NO}; //17
uchar code LYHD1_Beat9[]={78, 4, 3,1, 1,1,2, 2,1,1, 2,1,1, 2,1,1 , 4, 4};
uchar code LYHD1_Note10[]={18, M6, H3,H3, H1,M7,M6, M5,M3,M5, M6,M7,H1, H2,H1,M7, M6, H1,H2};
uchar code LYHD1_Beat10[]={78, 4, 3,1, 1,1,2, 2,1,1, 2,1,1, 2,1,1 , 6, 1,1 };
uchar code LYHD1_Note11[]={14, H3,H2, H1,H2,H3, H1,H2, H3,H2, H1,H2,H3, H1,H2}; //21
uchar code LYHD1_Beat11[]={78, 3,1, 1,1,6, 2,2, 3,1, 1,1,6, 2,2 };
uchar code LYHD1_Note12[]={13, H3,H2, H1,H2,H3, H1,H2, H3,H2, H1,H2,H3, NO };
uchar code LYHD1_Beat12[]={78, 3,1, 1,1,6, 2,2, 3,1, 1,1,6, 4 };
uchar code LYHD1_Note13[]={23, H6,H5,H5,H5, H3,H3,H3,H2, H2,H2,H2,H2, H2,H1,H1,H2, H3, H1,H2,H3,H2, H1,H1}; //25
uchar code LYHD1_Beat13[]={78, 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,3, 6, 1,1,1,2, 1,2 };
uchar code LYHD1_Note14[]={24, H6,H5,H5,H5, H5,H3,H3,H3, H3,H2,H2,H2, H2,H1,H1,H2, H3, H1,H2,H3,H2, H1,H1,M5};
uchar code LYHD1_Beat14[]={78, 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,3, 6, 1,1,1,2, 1,1,1 };
//XW
uchar code LYHD1_Note15[]={16, M6,H1, M7,M5,M6, NO,M5,M6,M5, M6,H1, H1,H2,H2, H3, NO }; //29
uchar code LYHD1_Beat15[]={78, 2,2, 2,1,5, 1,1, 1, 1, 2,2, 2,1,1, 4, 4 };
uchar code LYHD1_Note16[]={25, H6,H5,H5,H5, H5, H3,H3,H3, H3,H2,H2,H2, H2,H1,H1,H2, H3, H1,H1,H2,H3,H2, H2,H1,H1};
uchar code LYHD1_Beat16[]={78, 1, 1, 1,1, 1, 1 ,1, 1, 1,1, 1, 1, 1,1,1, 3, 5, 1,1,1, 1,1, 1,1,2 };
//
uchar code LYHD1_Note17[]={24, H6,H5,H5,H5, H5,H3,H3,H3, H3,H2,H2,H2, H2,H1,H1,H2, H3, H1,H2,H3,H2, H1,H1,H5};//33
uchar code LYHD1_Beat17[]={78, 1, 1, 1, 1, 1,1,1,1, 1,1,1,1, 1,1,1,3, 6, 1,1,1,2, 1,1,1};
uchar code LYHD1_Note18[]={15, M6,H1, M7,M5,M6, NO,M5, M6,H1, H1,H2,H2, H3, NO,M5};
uchar code LYHD1_Beat18[]={78, 2, 2, 2,1,5, 3,1, 2,2, 2,1,1, 4, 3,1};
uchar code LYHD1_Note19[]={17, M6,H1, M7,M5,M6, H1, H1,H2,H2, NO,H1,H1,H2, H3,H2, H2,H1}; //37
uchar code LYHD1_Beat19[]={78, 2,2, 2,1,3, 2, 2,1,5, 1,1,1,1, 3,1, 3,1};
uchar code LYHD1_Note20[]={8, H1,H5, H3,H2, H1, H2, H3, NO};
uchar code LYHD1_Beat20[]={78, 2,2, 2,2, 4, 4, 6, 10}; //有改动
//
uchar code LYHD1_Note21[]={12, H3,H5, H6,H5, H3, H2, H1, NO, NO, NO,H1,H2};//41
uchar code LYHD1_Beat21[]={78, 2,2, 2,2, 4, 4, 6, 2, 4, 2,1,1}; //有改动
uchar code LYHD1_Note22[]={16, H3,H2,H2, H1,M6, NO,M6,M5, M6,H1,H1, H2,H3, NO,H1,H2};
uchar code LYHD1_Beat22[]={78, 2,1,2, 1,6, 2,1,1, 2,1,2, 1,6, 2,1,1};
uchar code LYHD1_Note23[]={17, H3,H2,H2, H1,M6, NO,M6,M5, M6,H1,H1,H1, H3,H2, NO,H3,H2};//45
uchar code LYHD1_Beat23[]={78, 2,1,2, 1,6, 2,1,1, 1,1,1,2, 1,6, 2,1,1};
uchar code LYHD1_Note24[]={14, H3,H3, H6,H5, NO,H1,M6, H1,H1, H2,H3, NO,M6,M5};
uchar code LYHD1_Beat24[]={78, 3,2, 1,6, 2, 1,1, 3,2, 1,6, 2,1,1};
uchar code LYHD1_Note25[]={16, M6,H1, H1,H2,H3, H3, H2,H1,M7, M6,M5,M6,M6, NO,H3,H2};//49
uchar code LYHD1_Beat25[]={78, 3,1, 1,1,6, 2, 1,1,2, 3,2,1,6, 2,1,1};
uchar code LYHD1_Note26[]={14, H3,H3, H6,H5, NO,H1,M6, H1,H1, H2,H3, NO,M6,M5};
uchar code LYHD1_Beat26[]={78, 3,2, 1,6, 2, 1,1, 3,2, 1,6, 2,1,1};
//XW
uchar code LYHD1_Note27[]={16, M6,H1, H1,H2,H3, H3, H2,H1,M7, M6,M6,M5, M6,M6, NO,H3 }; //53
uchar code LYHD1_Beat27[]={78, 3,1, 1,1,4, 2, 1,1,2, 2,1,2, 1,6, 2,2 };
uchar code LYHD1_Note28[]={21, H2,H1, M7,M6, NO, H6,H5,H5,H5, H3,H3,H3,H2, H2,H2,H2,H2, H2,H1,H1,H2};
uchar code LYHD1_Beat28[]={78, 3,2, 1,6, 4, 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,3, };
uchar code LYHD1_Note29[]={23, H3, H1,H2,H3,H2, H1,H1, H6,H5,H5,H5, H5,H3,H3,H3, H3,H2,H2,H2, H2,H1,H1,H2}; //57
uchar code LYHD1_Beat29[]={78, 6, 1,1,1,2, 1,2, 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,3};
uchar code LYHD1_Note30[]={16, H3, H1,H2,H3,H2, H1,H1,M5, M6,H1, M7,M5,M6, NO,M5,M6,M5};
uchar code LYHD1_Beat30[]={78, 6, 1,1,1,2, 1,1,1, 2,2, 2,1,5, 1,1,1,1};
uchar code LYHD1_Note31[]={23, M6,H1, H1,H2,H2, H3, NO, H6,H5,H5,H5, H5,H3,H3,H3, H3,H2,H2,H2, H2,H1,H1,H2 }; //61
uchar code LYHD1_Beat31[]={78, 2,2, 2,1,1, 4, 4, 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,3, };
uchar code LYHD1_Note32[]={23, H3, H1,H2,H3,H2, H1,H1, H6,H5,H5,H5, H5,H3,H3,H3, H3,H2,H2,H2, H2,H1,H1,H2 };
uchar code LYHD1_Beat32[]={78, 6, 1,1,1,2, 1,2, 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,3, };
uchar code LYHD1_Note33[]={15, H3, H1,H2,H3,H2, H1,H1,M5, M6,H1, M7,M5,M6, NO,M5}; //65
uchar code LYHD1_Beat33[]={78, 6, 1,1,1,2, 1,1,1, 2,2, 2,1,5, 3,1};
uchar code LYHD1_Note34[]={17, M6,H1, H1,H2,H2, H3, NO,M5, M6,H1, M7,M5,M6, H1, H1,H2,H2};
uchar code LYHD1_Beat34[]={78, 2,2, 2,1,1, 4, 3,1, 2,2, 2,1,3, 2, 2,1,5};
uchar code LYHD1_Note35[]={15, NO,H1,H1,H2, H3,H2, H2,H1, H1, H5,H3, H2, M7, NO, M6}; //69
uchar code LYHD1_Beat35[]={78, 1,1,1,1, 3,1, 3,1, 4, 2,2, 4, 4, 4, 4};
// uchar code LYHD1_Note13[]={0, }; //25
// uchar code LYHD1_Beat13[]={78, };
// uchar code LYHD1_Note14[]={0, };
// uchar code LYHD1_Beat14[]={78, };
uchar code LYHD2_Note1[]={ L6, NO, L6, NO, L6, NO, L6, NO };
uchar code LYHD2_Beat1[]={ 4, 4, 4, 4, 4, 4, 4, 4 };
uchar code LYHD2_Note2[]={ L6, NO, L6, NO, L6, NO, L6, NO };
uchar code LYHD2_Beat2[]={ 4, 4, 4, 4, 4, 4, 4, 4 };
//--声明调用函数--//
void MainInitialize_Music_T0(); //主函数初始化函数
uchar PlayMusic_T0(uchar *MusicNote,uchar *MusicBeat);
//音乐播放函数,音符数组,节拍数组,音符/节拍长度
void MainInitialize_Music_T1(); //主函数初始化函数
uchar PlayMusic_T1(uchar *MusicNote,uchar *MusicBeat,uchar MusicLong);
//音乐播放函数,音符数组,节拍数组,音符/节拍长度
void T0_Service ();
void T1_Service ();
简谱
来源B站UP主指尖灬旋律