标题:
有没有大神解释一下单片机音乐代码 求帮助
[打印本页]
作者:
1244895028
时间:
2019-3-29 23:03
标题:
有没有大神解释一下单片机音乐代码 求帮助
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit S1=P3^5;
sbit S2=P3^4;
sbit S3=P3^3;
sbit S4=P3^2;
sbit RCK= P2^0;
sbit DS= P2^2;
sbit CLK= P2^1;
sbit Speak=P3^6;//蜂鸣器
uchar stop_flage;
uchar table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//uchar table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar COUNT_1=0,count=0,yimiao=0,j,i; //,stop=0
uchar b=0,zhi;
uint Table_1[3]={0,183,401};
uchar shu=1;
char m=1;
uchar code SONG[] ={ //路边的野花不要采
0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C,
0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0x10,0x18,0x20,
0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,
0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,
0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0x20,
0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F,
0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,
0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,
0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20,
0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0x00,
//祝你平安
0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,
0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,
0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,
0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,
0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,
0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,
0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,
0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,
0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,
0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,
0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,
0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,
//天空之城
0x1c,0x30,0x19,0x30,0x18,0x40,0x19,0x30,0x18,0x30,0x13,0x30,0x19,0x80,
0x26,0x30,0x26,0x30,0x1c,0x40,0x20,0x30,0x1c,0x30,0x18,0x30,0x20,0x60,
0x26,0x30,0x26,0x30,0x24,0x40,0x26,0x30,0x24,0x30,0x18,0x40,0x26,0x60,
0x18,0x20,0x18,0x20,0x18,0x20,0x19,0x40,0x24,0x30,0x24,0x30,0x19,0x30,
0x19,0x60,0x1c,0x30,0x19,0x30,0x18,0x40,0x19,0x30,0x18,0x30,0x13,0x30,
0x19,0x60,0x26,0x30,0x26,0x30,0x1c,0x40,0x20,0x30,0x1c,0x30,0x18,0x30,
0x20,0x80,0x26,0x30,0x24,0x30,0x24,0x30,0x18,0x30,0x19,0x20,0x19,0x30,
0x18,0x30,0x15,0x20,0x15,0x20,0x13,0x20,0x18,0x40,0x18,0x30,0x19,0x30,
0x1c,0x20,0x1c,0x20,0x19,0x30,0x20,0x30,0x1c,0x60,0x18,0x30,0x15,0x30,
0x13,0x40,0x15,0x30,0x13,0x30,0x10,0x30,0x15,0x60,0x20,0x30,0x20,0x30,
0x18,0x30,0x19,0x30,0x18,0x30,0x13,0x30,0x13,0x60,0x1c,0x20,0x19,0x20,
0x18,0x30,0x19,0x30,0x15,0x20,0x15,0x20,0x18,0x40,0x20,0x30,0x20,0x30,
0x12,0x30,0x13,0x30,0x15,0x30,0x18,0x30,0x13,0xc0,0x13,0x80,0x13,0x30,
0x0e,0x80,0x10,0x30,0x10,0x30,0x13,0x20,0x15,0x20,0x18,0x40,0x18,0x30,
0x15,0x30,0x18,0x20,0x15,0x20,0x15,0x30,0x10,0x30,0x13,0x60,0x13,0x30,
0x0e,0x60,0x10,0x60,0x13,0x20,0x15,0x20,0x18,0x40,0x18,0x30,0x15,0x30,
0x15,0x20,0x18,0x20,0x15,0x30,0x19,0x30,0x1c,0x60,0x1c,0x30,0x19,0x30,
0x1c,0xc0,0x00,
};
void Delay_xMs(uint x)//1ms0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,
{
unsigned int i,j;
for( i =0;i < x;i++ )
{
for( j =0;j<3;j++ );
}
}
void Delay(uint del)
{
uint i,j;
for(i=0;i<del;i++)
for(j=0;j<=184;j++);
}
void writ_595(uchar x)
{ uchar dat,y;
dat=x;
for(y=0;y<8;y++)
{
CLK=0;
if((dat&0x80) == 0x80)
DS = 1; //串行数据输出
else
DS = 0;
CLK=1; //移位输入时钟,上升沿输入
dat<<=1;
}
RCK=0; //并行输出时钟
RCK=1;
}
void Time0_Init()
{
TMOD=0x11;
IE=0x8A;
TH0=0xDC;//10ms
TL0=0x00;
TH1=0x4C;// 50ms
TL1=0x00;
}
void Time0_Int() interrupt 1
{
TH0=0xDC;
TL0=0x00;
COUNT_1++;
}
void Time1_Int() interrupt 3
{
TH1=0x4C;// 1ms
TL1=0x00;
count++;
if(count==20)
{
yimiao++;
count=0;
writ_595(table[yimiao%10]);
writ_595(table[yimiao/10]);
writ_595(table[m+1]);
}
}
void Play_Song(uchar i)
{
uchar Temp1,Temp2;//stop=0
uint Addr;
COUNT_1 = 0; //中断计数器清0
if(i==0)
{
Addr=Table_1[--shu];
}
if(i==1)
{
Addr=Table_1[shu];
}
if(i==2)
{
Addr=Table_1[++shu];
}
while(1)
{
Temp1 = SONG[Addr++];
if ( Temp1 == 0xFF ) //休止符
{
TR0 = 0;
Delay_xMs(100);
}
else if ( Temp1 == 0x00 ) //歌曲结束符
{
return;
// stop=1;
}
else
{
Temp2 = SONG[Addr++];
TR0 = 1;
while(1)
{
Speak = ~Speak;
//十位
Delay_xMs(Temp1);
//各位
while(stop_flage)
{
if(S2==0)
{
Delay_xMs(200);
if(S2==0)
{
stop_flage=0;
TR1=1;
while(S2==0);
}
}
}
if(S2==0)//暂停
{
Delay_xMs(200);
if(S2==0)
{
stop_flage=1;
TR1=0;
while(S2==0);
}
}
if(S3==0)//上一首
{
Delay_xMs(200);
if(S3==0)
{
TR1=0;
Delay_xMs(250);
TR1=1;
m--;
// m=0;
if(m<=0)
{
m=0;
// while(Key3==0);
}
yimiao=0;
Addr=Table_1[--shu];
while(S3==0);
}
}
if(S4==0)//下一首
{
Delay_xMs(200);
if(S4==0)
{
m++;
TR1=0;
Delay_xMs(250);
TR1=1;
// m=2;
if(m>2)
{
m=2;
while(S4==0);
}
yimiao=0;
Addr=Table_1[++shu];
while(S4==0);
}
}
if ( Temp2 == COUNT_1 )
{
COUNT_1 = 0;
break;
}
}
}
}
}
main()
{
Time0_Init();
while(1)
{
if(S1==0)//播放 2
{
Delay_xMs(200);
if(S1==0)
{
TR1=1;
Play_Song(m);
TR1=0;
if(S4==0||S3==0)
{
break;
}
}
}
if(S3==0)//上一首
{
Delay_xMs(200);
if(S3==0)
{
m--;
Delay_xMs(6500);
yimiao=0;
TR1=1;
Play_Song(m);
TR1=0;
}
}
if(S4==0)//下一首
{
Delay_xMs(20);
if(S4==0)
{
m++;
yimiao=0;
TR1=1;
Play_Song(m);
TR1=0;
if(S3==0)
{
break;
}
}
}
}
}
这是在网上抄的代码,我想换另外三首,但是数组里的数怎么来的我真的看不懂。
后面的代码是我用音乐转化器得到的代码,每一首都是分开的
#include <REG51.H>
#define uchar unsigned char
sbit beepIO=P3^6;
uchar m,n;
uchar code T[49][2]={{0,0},
{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},
{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},
{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},
{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}
};
uchar code music[][2]={{0,4},
{12,8},{8,4},{8,4},{13,8},{15,4},{15,4},{17,4},{15,2},{17,2},{17,24},{0,8},{8,4},{8,4},{13,8},{15,4},{15,4},{17,4},{13,2},{15,2},{15,24},{0,8},{8,4},{8,4},{13,8},{15,4},{15,4},{17,4},{15,2},{17,2},{17,16},{13,4},{17,4},{15,24},{15,4},{13,4},{13,8},{13,4},{15,4},{15,16},{0,8},{8,4},{8,4},{13,8},{15,4},{15,4},{20,4},{15,2},{17,2},{17,24},{0,8},{8,4},{8,4},{13,4},{13,4},{15,4},{15,4},{17,4},{15,4},{15,24},{0,8},{8,4},{8,4},{13,8},{15,4},{15,4},{17,4},{15,2},{17,2},{17,16},{13,4},{17,4},{15,24},{15,4},{13,4},{13,4},{15,4},{15,24},{15,24},{0,8},{13,4},{8,4},{13,4},{15,4},{15,4},{15,4},{15,4},{20,4},{13,4},{13,4},{13,4},{17,4},{17,16},{10,4},{6,4},{6,4},{13,4},{12,4},{12,4},{10,4},{12,4},{13,4},{13,4},{13,4},{13,2},{15,2},{15,16},{17,4},{17,4},{17,4},{17,4},{15,4},{15,4},{15,4},{20,4},{22,4},{22,4},{22,4},{20,4},{17,16},{18,4},{18,4},{18,4},{22,4},{22,4},{20,4},{20,4},{20,4},{13,4},{13,4},{13,4},{15,4},{13,16},
{0xFF,0xFF}};
void delay(uchar p)
{
uchar i,j;
for(;p>0;p--)
for(i=181;i>0;i--)
for(j=181;j>0;j--);
}
void pause()
{
uchar i,j;
for(i=150;i>0;i--)
for(j=150;j>0;j--);
}
void T0_int() interrupt 1
{
beepIO=!beepIO;
TH0=T[m][0]; TL0=T[m][1];
}
void main()
{
uchar i=0;
TMOD=0x01; EA=1; ET0=1;
while(1)
{
m=music[i][0];n=music[i][1];
if(m==0x00)
{TR0=0;delay(n);i++;}
else if(m==0xFF)
{TR0=0;delay(30);i=0;}
else if(m==music[i+1][0])
{TR0=1;delay(n);TR0=0;pause();i++;}
else
{TR0=1;delay(n);i++;}
}
}
复制代码
作者:
51hei团团
时间:
2019-3-31 02:30
其实那些数组都是频率表
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1