📄 遥控控制音乐.c
字号:
0x52,0x52,0x42,0x32,0x34,0x71,0x11,
0x74,0x71,0x71,0x11,0x31,0x34,0x32,
0x32,0x32,0x32,0x31,0x41,0x44,0x32,0x41,0x51,
0x52,0x52,0x72,0x81,0x41,0x44,0x52,0x41,0x31,
0x32,0x32,0x42,0x51,0x71,0x74,0x71,0x71,
0x12,0x31,0x31,0x31,0x52,0x42,0x32,0x32,0x41,0x31,
0x34,0x52,0x51,0x71,
0x72,0x71,0x71,0x72,0x71,0x81,0x84,0x52,0x42,
0x32,0x32,0x32,0x41,0x51,0x54,0x51,0x71,
0x72,0x72,0x72,0x81,0xA1,0xA2,0x82,0x72,0x52,
0x42,0x32,0x32,0x12,0x44,0x51,0x71,
0x72,0x72,0x71,0x82,0x71,0x84,0x52,0x42,
0x32,0x32,0x32,0x41,0x51,0x54,0x51,0x71,
0x72,0x72,0x72,0x81,0xA1,0xA2,0x82,0x72,0x51,0x41,
0x42,0x42,0x44,0x32,0x51,0x61,
0x72,0x42,0x44,0x52,0x41,0x31,
0x34,0x52,0x41,0x31,0x34,0x52,0x42,
0x52,0x32,0x52,0x81,0x71,0x74,0x51,0x71,
0x82,0x81,0x71,0x72,0x81,0x71,0x74,0x51,0x41,0x31,
0x42,0x41,0x51,0x42,0x31,0x41,0x44,0x52,0x41,0x31,
0x34,0x52,0x41,0x31,0x34,0x52,0x42,
0x52,0x32,0x52,0x81,0x71,0x74,0x51,0x41,
0x82,0x82,0xA2,0x71,0x81,0x72,0x71,0x51,0x41,0x31,
0x44,0x41,0x31,0x41,0x51,0x44,0x52,0x52,
0x42,0x31,0x34,0x52,0x41,0x31,
0x42,0x31,0x34,
0xFF};
//第十一首 偏偏喜欢你
unsigned char code song11[]={
0XC2,0XB2,
0X36,0X52,0X42,0X32,0X11,0XC1,0XB2,
0XC6,0X12,0XC4,0X12,0XC2,
0X76,0XA2,0X82,0X72,0X51,0X41,0X32,
0X4C,0X42,0X32,
0X74,0X82,0X74,0X82,0X72,
0X52,0X41,0X38,0X32,0X42,
0X16,0XC2,0X72,0X52,0X42,0X42,
0X3C,0XC2,0XB2,
0X36,0X52,0X42,0X32,0X11,0XC1,0XB2,
0XC6,0X12,0XC4,0X12,0XC2,
0X76,0XA2,0X82,0X72,0X51,0X41,0X32,
0X4C,0X42,0X32,
0X76,0X82,0X74,0X82,0X72,
0X53,0X41,0X38,0X32,0X42,
0X16,0XC2,0X72,0X52,0X41,0X51,0X12,
0XCC,0XC2,0XB2,
0X16,0XC2,0X72,0X52,0X42,0X42,
0X3C,0X32,0X32,
0X26,0X22,0X24,0X42,0X32,
0x22,0x12,0x18,0x02,0x52,
0X46,0X12,0X44,0X72,0X82,
0X5C,0X52,0X52,
0X46,0X42,0X74,0X42,0X32,
0X36,0X42,0X58,
0X82,0X72,0X62,0X52,0X46,0X32,
0X3C,0X12,0XB2,
0X36,0X52,0X42,0X32,0X11,0XC1,0XB2,
0XC6,0X12,0XC4,0X12,0XC2,
0X76,0XA2,0X82,0X72,0X51,0X41,0X32,
0X48,0X02,0X42,0X52,0X62,
0X76,0X82,0X74,0X82,0X72,
0X56,0X41,0X38,0X32,0X22,
0X16,0XC2,0X72,0X52,0X42,0X42,
0X3C,0X04,0X04,0X04,0X04,
0xFF};
//第十二首
unsigned char code song12[]={
0x34,0x32,0x34,0x34,0x24,0x34,0x32,0x32,0x24,0x38,0x44,0x58,0x48,
0x34,0x32,0x34,0x34,0x24,0x38,0x34,0x7F,0x34,0x32,0x34,0x32,
0x24,0x38,0x34,0x24,0x38,0x44,0x58,0x48,0x34,0x32,0x34,0x34,
0x24,0x38,0x34,0x7F,0x16,0x4C,0x74,
0x78,0x64,0x54,0x48,0x54,0x64,0x58,0x44,0x34,0x24,0x38,0x24,
0x14,0x12,0x21,0x11,0x78,0x68,0x3F,0x4C,0x74,
0x78,0x64,0x52,0x42,0x48,0x54,0x64,0x58,0x44,0x34,0x24,0x38,0x24,
0x24,0x38,0x44,0x58,0x48,0x3C,
0xFF};
unsigned char code* code songs[]={song1,song2,song3,song4,song5,song6,
song7,song8,song9,song10,song11,song12}; //指向12首歌
//100ms
void delay100ms(void)
{
unsigned char i,j,k;
for(i=200;i>0;i--)
for(j=20;j>0;j--)
for(k=10;k>0;k--) ;
}
void sing_song()
{ //回xxxxxx
song=songs[song_number];
IR_OK=0; //不能少掉!!!!
j=0;
while(*(song+j)!=0xFF) //是否取到结束码
{
if(IR_OK==1){break;} //这一句很重要的!! //回22222
k=*(song+j)&0x0F; //后4位为多少个1/4拍
l=*(song+j)>>4; //song(song+j)[]中所放的每个字节
//前4位乘2表示为音符频率在数组yin[]中的位置
TH1=yin[2*l]; //置初值
TL1=yin[2*l+1];
TR1=1; //起动定时器0
if ((yin[2*l]==0xff)&&(yin[2*l+1]==0xff)) //如果取到的都是休止符,则不输出音频
{
TR1=0;SPK=1;SPK1=1;
}
for(i=k;i>0;--i) //节拍K为多少就执行多少个1/4拍
{
delay();
}
TR1=0;
j++;
} //回22222
} //回xxxxxx
void main()
{ //回main
TMOD=0x10; //timer0工作在方式1
IE=0x88; //EA=1;ETO=1;
IT0=1; //外部中断0触发方式控制位,下降沿触发
EX0=1; //外部中断0(INT0)中断允许位
EA=1; //总中断
IP=0x01; //定义外部中断0优先于定时器中断的优先级
IR_OK=0; //不能少掉!!!!
while(1)
{ //回xxxxxx
/*// song=song6;
song=songs[song_number];
//P2=song_number; //演奏第三首
IR_OK=0; //不能少掉!!!!
j=0;
while(*(song+j)!=0xFF) //是否取到结束码
{
if(IR_OK==1){break;} //这一句很重要的!! //回22222
k=*(song+j)&0x0F; //后4位为多少个1/4拍
l=*(song+j)>>4; //song(song+j)[]中所放的每个字节
//前4位乘2表示为音符频率在数组yin[]中的位置
TH1=yin[2*l]; //置初值
TL1=yin[2*l+1];
TR1=1; //起动定时器0
if ((yin[2*l]==0xff)&&(yin[2*l+1]==0xff)) //如果取到的都是休止符,则不输出音频
{
TR1=0;SPK=1;SPK1=1;
}
for(i=k;i>0;--i) //节拍K为多少就执行多少个1/4拍
{
delay();
}
TR1=0;
j++;
} */ //回22222
if(IR_OK==1)
{ if(song_number==0)
{P2=0x00;sing_song();} //显示并演奏第1首
else if(song_number==1)
{P2=0x01;sing_song();} //显示并演奏第2首
else if(song_number==2)
{P2=0x02;sing_song();} //显示并演奏第3首
else if(song_number==3)
{P2=0x03;sing_song();} //显示并演奏第4首
else if(song_number==4)
{P2=0x04;sing_song();} //显示并演奏第5首
else if(song_number==5)
{P2=0x05;sing_song();} //显示并演奏第6首
else if(song_number==6)
{P2=0x06;sing_song();} //显示并演奏第7首
else if(song_number==7)
{P2=0x07;sing_song();} //显示并演奏第8首
else if(song_number==8)
{P2=0x08;sing_song();} //显示并演奏第9首
else if(song_number==9)
{P2=0x09;sing_song();} //显示并演奏第10首
else if(song_number==10)
{P2=0x0a;sing_song();} //显示并演奏第11首
else if(song_number==11)
{P2=0x0b;sing_song();} //显示并演奏第12首
else{SPK=0;delay100ms();SPK=1;delay100ms();
SPK=0;delay100ms();SPK=1;P2=0x0f;} //蜂鸣器叫,表明没有歌啦
}
} //回xxxxxx
} //回main
/*每个音符的发声*/
void timer1() interrupt 3 using 1
{
TH1=yin[2*l];
TL1=yin[2*l+1];
SPK1=SPK;
SPK = !SPK;
SPK1=!SPK1;
}
/*延时1/4拍时间即187ms*/
void delay(void)
{
unsigned char a,b,c;
for(a=251;a>0;a--)
for(b=106;b>0;b--)
for(c=2;c>0;c--);
}
void t0(void) interrupt 0 using 2//外部中断0的函数
{
m++ ;
if(m==100)
{
EA=0; //总中断
IR_OK=1;
song_number++;
if(song_number==12) song_number=0;
EA=1; //总中断
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -