这个是程序
#include"reg51.h"
sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2;
sbit p13=P1^3;
sbit p17=P1^7;
sbit p20=P2^0;
sbit p21=P2^1;
sbit p22=P2^2;
sbit p23=P2^3;
sbit p30=P3^0;
sbit p31=P3^1;
sbit p32=P3^2;
sbit p33=P3^3;
sbit p34=P3^4;
sbit p35=P3^5;
sbit p36=P3^6;
sbit p37=P3^7;
code int sszymmh[] = {
6,2,6, 5,2,2, 3,2,4, 5,2,4,
1,3,4, 6,2,2, 5,2,2, 6,2,8,
3,2,4, 5,2,2, 6,2,2, 5,2,4,
3,2,2, 2,2,2, 1,2,2, 6,1,3, 5,2,2,
3,2,3, 2,2,8, 2,2,6, 3,2,4,
5,2,4, 5,2,2, 6,2,2, 3,2,4,
2,2,4, 1,2,8, 5,2,6, 3,2,2,
2,2,2, 1,2,2, 6,1,2, 1,2,2,
5,1,16, 0,0,0,
};
code TwoButterfly[]={1,2,2, 2,2,2, 3,2,2, 1,2,2, 1,2,2, 2,2,2,3,2,2, 1,2,2, 3,2,2, 4,2,2, 5,2,3, 3,2,2,4,2,2, 5,2,3, 5,2,1, 6,2,1,
5,2,1,4,2,1, 3,2,2, 1,2,2, 5,2,1, 6,2,1, 5,2,1,4,2,1, 3,2,2, 1,2,2, 2,2,2,5,1,2,1,2,4, 2,2,2, 5,1,2,1,2,4,0,0,0
};
code xxx[]={1,2,3,1,2,3,5,2,3,5,2,3,6,2,2,6,2,2,5,2,5,
4,2,3,4,2,3,3,2,3,3,2,3,2,2,3,2,2,3,1,2,5,
5,2,3,5,2,3,4,2,3,4,2,3,3,2,3,3,2,3,2,2,5,
5,2,3,5,2,3,4,2,3,4,2,3,3,2,3,3,2,3,2,2,5,
0,0,0};
code nfdsm[]={5,1,2, 3,1,3, 5,1,1, 1,2,3, 6,1,2, 1,2,2,
5,1,4, 5,1,2, 1,1,1, 2,1,1, 3,1,2, 2,1,1, 1,1,1, 2,1,4, 5,1,2,
3,1,1, 5,1,1, 1,2,2, 7,1,1, 6,1,2, 1,2,2, 5,1,4, 5,1,2, 2,1,1,
3,1,1, 4,1,2, 7,0,1, 1,1,4, 6,1,2, 1,2,2, 1,2,4, 7,1,2, 6,1,1,
7,1,1, 1,2,4, 6,1,1, 7,1,1, 1,2,1, 6,1,1, 6,1,1, 5,1,1, 3,1,1,
1,1,1, 2,1,8, 5,1,2, 3,1,1, 5,1,1, 1,2,2, 7,1,1, 6,1,2, 1,2,2,
5,1,4, 5,1,2, 2,1,1, 3,1,1, 4,1,2, 7,0,2, 1,1,4, 0,0,0};
code int dyyfb[]={63628,63835,64021,64103,64260,64400,64524,64580,64684}; //低音音符表
code int zyyfb[]={64580,64684,64777,64820,64898,64968,65030,65059,65110};//中音音符表
code int gyyfb[]={65059,65110,65157,65178,65217,65252,65282}; //高音音符表
void mdelay(unsigned int t)
{
unsigned char n;
for(;t>0;t--)
for(n=0;n<125;n++)
{;}
}
void bfyf(int i) //播放音符
{
p10=1; p17=0;
while(1)
{
if(TF0==1)
{
p17=~p17;
TF0=0;
TR0=0;
TH0=i/256;
TL0=i%256;
TR0=1;
}
if(p32==1&p31==1&p30==1)
{ p10=0;
break;
}
}
}
int bfyy(int k,int fyyjl) //播放音乐
{
int i=0;
int n=0;
int aa[]={1};
int b[]={1};
int c[]={1};
if(k==1)
{
if(sszymmh[fyyjl]==0){fyyjl=0;}
aa[1]=sszymmh[fyyjl+2];
for(n=1;n<8;n++)
{
if(sszymmh[fyyjl]==n)
{
if(sszymmh[fyyjl+1]==1)
{
aa[0]=dyyfb[n-1];
}
if(sszymmh[fyyjl+1]==2)
{
aa[0]=zyyfb[n-1];
}
if(sszymmh[fyyjl+1]==3)
{
aa[0]=gyyfb[n-1];
}
}
}
}
else if(k==2)
{ if(TwoButterfly[fyyjl]==0){fyyjl=0;}
aa[1]=TwoButterfly[fyyjl+2];
for(n=1;n<8;n++)
{
if(TwoButterfly[fyyjl]==n)
{
if(TwoButterfly[fyyjl+1]==1)
{
aa[0]=dyyfb[n-1];
}
if(TwoButterfly[fyyjl+1]==2)
{
aa[0]=zyyfb[n-1];
}
if(TwoButterfly[fyyjl+1]==3)
{
aa[0]=gyyfb[n-1];
}
}
}
}
else if(k==3)
{
if(xxx[fyyjl]==0){fyyjl=0;}
aa[1]=xxx[fyyjl+2];
for(n=1;n<8;n++)
{
if(xxx[fyyjl]==n)
{
if(xxx[fyyjl+1]==1)
{
aa[0]=dyyfb[n-1];
}
if(xxx[fyyjl+1]==2)
{
aa[0]=zyyfb[n-1];
}
if(xxx[fyyjl+1]==3)
{
aa[0]=gyyfb[n-1];
}
}
}
}
else if(k==4)
{
if(nfdsm[fyyjl]==0){fyyjl=0;}
aa[1]=nfdsm[fyyjl+2];
for(n=1;n<7;n++)
{
if(nfdsm[fyyjl]==n)
{
if(nfdsm[fyyjl+1]==1)
{
aa[0]=dyyfb[n-1];
}
if(nfdsm[fyyjl+1]==2)
{
aa[0]=zyyfb[n-1];
}
if(nfdsm[fyyjl+1]==3)
{
aa[0]=gyyfb[n-1];
}
}
}
}
TH0=aa[0]/256;
TL0=aa[0]%256;
TR0=1;
TH1=0;
TL1=0;
TR1=1;
while(1)
{
if(TF1==1)
{
i=i+1;
TF1=0;
TR1=0;
TH1=0;
TL1=0;
TR1=1;
}
if(i>=30*aa[1])
{
TR0=0;
TR1=0;
i=0;
fyyjl=fyyjl+3;
break;
}
if(TF0==1)
{
p17=~p17;
TF0=0;
TR0=0;
TH0=aa[0]/256;
TL0=aa[0]%256;
TR0=1;
}
if(p37==1)
{
break;
}
if(p20==1&p21==1&p22==1&p23==1)
{
break;
}
}
return fyyjl;
}
int v() //按键扫描
{ int i=0;
p33=0;
p34=1;
p35=1;
if(p32==0)
{
i=1;
return i;
}
if(p31==0)
{
i=2;
return i;
}
if(p30==0)
{
i=3;
return i;
}
p33=1;
p34=0;
p35=1;
if(p32==0)
{
i=4;
return i;
}
if(p31==0)
{
i=5;
return i;
}
if(p30==0)
{
i=6;
return i;
}
p33=1;
p34=1;
p35=0;
if(p32==0)
{
i=7;
return i;
}
if(p31==0)
{
i=8;
return i;
}
if(p30==0)
{
i=9;
return i;
}
return 0;
}
void main()
{ int fyyjl=0;//放音乐记录
int ngaj=0; //哪个按键
p17=0;
TMOD=0x01;
IE=1002;
while(1)
{
int aa[9]={1};
if(p37==1)
{
ngaj=v();
if(ngaj>0)
{
TH0=dyyfb[ngaj-1]/256;
TL0=dyyfb[ngaj-1]%256;
TR0=1;
bfyf(dyyfb[ngaj-1]);
}
}
if(p37==0)
{
if(p20==0)
{fyyjl=bfyy(1,fyyjl);}
else if(p21==0)
{fyyjl=bfyy(2,fyyjl);}
else if(p22==0)
{fyyjl=bfyy(3,fyyjl);}
else if(p23==0)
{
fyyjl=bfyy(4,fyyjl);
}
else{fyyjl=0;}
}
}
} |