unsignedcharkeydisp()
{unsignedchartemp,temp1;P3=0xf0;Delay1ms(5);temp=P3;
if(temp!
=0xf0){temp1=P3&0xf0;Delay1ms
(1);
P3=0x0f;Delay1ms(3);temp=P3&0x0f;temp=temp+temp1;
temp=~temp;}returntemp;}
unsignedchargetkey(unsignedchartempkey)
{unsignedcharkey1;switch(tempkey)
{case0x82:
key1=0x21;P0=0xF9,P2=0x30;break;
case0x42:
key1=0x22;P0=0xA4,P2=0x30;break;
case0x22:
key1=0x23;P0=0xB0,P2=0x30;break;
case0x12:
key1=0x24;P0=0xBF,P2=0x30;break;
case0x84:
key1=0x31;P0=0xF9,P2=0xC0;break;
case0x44:
key1=0x32;P0=0xA4,P2=0xC0;break;
case0x24:
key1=0x33;P0=0xB0,P2=0xC0;break;
case0x14:
key1=0x34;P0=0x99,P2=0xC0;break;
case0x88:
key1=0x41;P0=0x92,P2=0xC0;break;
case0x48:
key1=0x42;P0=0x82,P2=0xC0;break;
case0x28:
key1=0x43;P0=0xF8,P2=0xC0;break;
case0x18:
key1=0x44;P0=0XBF,P2=0xC0;break;
default:
break;}
returnkey1;}
voidInitialSound(void)
{BeepIO=1;
Sound_Temp_TH1=(65535-(1/1200)*SYSTEM_OSC)/256;//计算TL1应装入的初值(10ms的初装值)
Sound_Temp_TL1=(65535-(1/1200)*SYSTEM_OSC)%256;//计算TH1应装入的初值
TH1=Sound_Temp_TH1;TL1=Sound_Temp_TL1;
TMOD|=0x11;ET0=1;ET1=0;TR0=0;TR1=1;
EA=1;}
voidBeepTimer0(void)interrupt1//音符发生中断
{BeepIO=!
BeepIO;
TH0=Sound_Temp_TH0;
TL0=Sound_Temp_TL0;}
//*****************************Music*****************龙的传人
unsignedcharcodeMusic_Code[]={0x10,0x02,0x11,0x03,0x15,0x03,0x16,0x02,0x17,0x03,0x16,0x03,0x15,0x02,0x15,0x04,0x11,0x04,0x10,0x01,0x10,0x02,0x11,0x04,0x15,0x04,0x16,0x02,0x17,0x03,0x16,0x03,0x15,0x02,0x15,0x04,0x16,0x04,0x17,0x01,0x10,0x02,0x11,0x03,0x15,0x03,0x16,0x02,0x17,0x03,
0x16,0x03,0x15,0x02,0x15,0x04,0x11,0x04,0x10,0x01,0x11,0x02,0x11,0x02,0x11,0x02,0x15,0x03,0x11,0x03,0x10,0x02,0x10,0x04,0x0F,0x04,0x10,0x01,0x17,0x02,0x17,0x02,0x17,0x02,0x16,0x03,0x15,0x03,0x16,0x02,0x16,0x04,0x17,0x04,0x16,0x01,0x15,0x02,0x15,0x02,0x11,0x02,0x15,0x04,0x11,0x04,0x10,0x02,0x10,0x04,0x0F,0x04,0x10,0x01,0x00,0x00};//小毛驴
unsignedcharcodeMusic_Dode[]={0x15,0x03,0x15,0x03,0x15,0x03,0x17,0x03,0x19,0x03,0x19,0x03,0x1A,0x03,0x1A,0x03,0x1A,0x03,0x1F,0x03,0x19,0x00,0x18,0x03,0x18,0x03,0x1A,0x03,0x1A,0x03,0x17,0x03,0x17,0x03,0x17,0x03,0x17,0x03,0x16,0x03,0x16,0x03,0x16,0x03,0x16,0x03,0x19,0x66,0x19,0x03,0x15,0x03,0x15,0x03,0x15,0x03,0x17,0x03,0x19,0x03,0x19,0x03,0x19,0x03,0x19,0x03,0x1A,0x03,0x1A,0x03,0x1A,0x03,0x1F,0x03,0x19,0x00,0x18,0x03,0x18,0x03,0x18,0x03,0x1A,0x03,0x17,0x03,0x17,0x04,0x17,0x04,0x17,0x03,0x17,0x03,0x16,0x03,0x16,0x03,0x16,0x03,0x17,0x03,0x15,0x00,0x00,0x00};//两只蝴蝶
unsignedcharcodeMusic_Two[]={0x17,0x03,0x16,0x03,0x17,0x01,0x16,0x03,0x17,0x03,0x16,0x03,0x15,0x01,0x10,0x03,0x15,0x03,0x16,0x02,0x16,0x0D,0x17,0x03,0x16,0x03,0x15,0x03,0x10,0x03,0x10,0x0E,0x15,0x04,0x0F,0x01,0x17,0x03,0x16,0x03,0x17,0x01,0x16,0x03,0x17,0x03,0x16,0x03,0x15,0x01,0x10,0x03,0x15,0x03,0x16,0x02,0x16,0x0D,0x17,0x03,0x16,0x03,0x15,0x03,0x10,0x03,0x15,0x03,0x16,0x01,0x17,0x03,0x16,0x03,0x17,0x01,0x16,0x03,0x17,0x03,0x16,0x03,0x15,0x01,0x10,0x03,0x15,0x03,0x16,0x02,0x16,0x0D,0x17,0x03,0x16,0x03,0x15,0x03,0x10,0x03,0x10,0x0E,0x15,0x04,0x0F,0x01,0x17,0x03,0x19,0x03,0x19,0x01,0x19,0x03,0x1A,0x03,0x19,0x03,0x17,0x01,0x16,0x03,0x16,0x03,0x16,0x02,0x16,0x0D,0x17,0x03,0x16,0x03,0x15,0x03,0x10,0x03,0x10,0x0D,0x15,0x00,0x19,0x03,0x19,0x03,0x1A,0x03,0x1F,0x03,0x1B,0x03,0x1B,0x03,0x1A,0x03,0x17,0x0D,0x16,0x03,0x16,0x03,0x16,0x0D,0x17,0x01,0x17,0x03,0x17,0x03,0x19,0x03,0x1A,0x02,0x1A,0x02,0x10,0x03,0x17,0x0D,0x16,0x03,0x16,0x01,0x17,0x03,0x19,0x03,0x19,0x03,0x17,0x03,0x19,0x02,0x1F,0x02,0x1B,0x03,0x1A,0x03,0x1A,0x0E,0x1B,0x04,0x17,0x02,0x1A,0x03,0x1A,0x03,0x1A,0x0E,0x1B,0x04,0x1A,0x03,0x19,0x03,0x17,0x03,0x16,0x03,0x17,0x0D,0x16,0x03,0x17,0x03,0x19,0x01,0x19,0x03,0x19,0x03,0x1A,0x03,0x1F,0x03,0x1B,0x03,0x1B,0x03,0x1A,0x03,0x17,0x0D,0x16,0x03,0x16,0x03,0x16,0x03,0x17,0x01,0x17,0x03,0x17,0x03,0x19,0x03,0x1A,0x02,0x1A,0x02,0x10,0x03,0x17,0x0D,0x16,0x03,0x16,0x01,0x17,0x03,0x19,0x03,0x19,0x03,0x17,0x03,0x19,0x03,0x1F,0x02,0x1B,0x03,0x1A,0x03,0x1A,0x0E,0x1B,0x04,0x17,0x02,0x1A,0x03,0x1A,0x03,0x1A,0x0E,0x1B,0x04,0x17,0x16,0x1A,0x03,0x1A,0x03,0x1A,0x0E,0x1B,0x04,0x1A,0x03,0x19,0x03,0x17,0x03,0x16,0x03,0x0F,0x02,0x10,0x03,0x15,0x00,0x00,0x00};
//***********************************************************
main()
{unsignedchargao_di;InitialSound();while
(1)
{key=getkey(keydisp());while(key==0x21)
{MusicIndex=0x00;InitialSound();
Play(SelectMusic(MusicIndex),0,3,360);}
while(key==0x22){MusicIndex=0x01;InitialSound();
Play(SelectMusic(MusicIndex),0,3,360);}
while(key==0x23){MusicIndex=0x02;InitialSound();
Play(SelectMusic(MusicIndex),0,3,360);}
while(key==0x24){TR0=0;BeepIO=1;key=getkey(keydisp());}
while(key==0x31){InitialSound();if(gao_di==0)
Temp_T=65536-(50000/FreTab[SignTab[0]])*10;//计算计数器初值
else
Temp_T=65536-(50000/FreTab[SignTab[0]])*5;//计算计数器初值
Sound_Temp_TH0=Temp_T/256;Sound_Temp_TL0=Temp_T%256;
TH0=Sound_Temp_TH0;TL0=Sound_Temp_TL0;Delay1ms
(1);TR0=1;
key=getkey(keydisp());if(key!
=0x31)TR0=0;}
while(key==0x32){InitialSound();if(gao_di==0)
Temp_T=65536-(50000/FreTab[SignTab[1]])*10;//计算计数器初值elseTemp_T=65536-(50000/FreTab[SignTab[1]])*5;//计算计数器初值Sound_Temp_TH0=Temp_T/256;Sound_Temp_TL0=Temp_T%256;
TH0=Sound_Temp_TH0;TL0=Sound_Temp_TL0;Delay1ms
(1);TR0=1;
key=getkey(keydisp());if(key!
=0x31)TR0=0;}
while(key==0x33){InitialSound();if(gao_di==0)
Temp_T=65536-(50000/FreTab[SignTab[2]])*10;//计算计数器初值
elseTemp_T=65536-(50000/FreTab[SignTab[2]])*5;//计算计数器初值Sound_Temp_TH0=Temp_T/256;Sound_Temp_TL0=Temp_T%256;
TH0=Sound_Temp_TH0;TL0=Sound_Temp_TL0;Delay1ms
(1);TR0=1;
key=getkey(keydisp());if(key!
=0x33)TR0=0;}while(key==0x34)
{InitialSound();if(gao_di==0)
Temp_T=65536-(50000/FreTab[SignTab[3]])*10;//计算计数器初值
elseTemp_T=65536-(50000/FreTab[SignTab[3]])*5;//计算计数器初值Sound_Temp_TH0=Temp_T/256;Sound_Temp_TL0=Temp_T%256;
TH0=Sound_Temp_TH0;TL0=Sound_Temp_TL0;Delay1ms
(1);TR0=1;
key=getkey(keydisp());if(key!
=0x34)TR0=0;}
while(key==0x41){
InitialSound();if(gao_di==0)
Temp_T=65536-(50000/FreTab[SignTab[4]])*10;//计算计数器初值elseTemp_T=65536-(50000/FreTab[SignTab[4]])*5;//计算计数器初值Sound_Temp_TH0=Temp_T/256;
Sound_Temp_TL0=Temp_T%256;
TH0=Sound_Temp_TH0;TL0=Sound_Temp_TL0;Delay1ms
(1);TR0=1;
key=getkey(keydisp());
if(key!
=0x41)TR0=0;}
while(key==0x42){InitialSound();
if(gao_di==0)
Temp_T=65536-(50000/FreTab[SignTab[5]])*10;//计算计数器初值else
Temp_T=65536-(50000/FreTab[SignTab[5]])*5;//计算计数器初值Sound_Temp_TH0=Temp_T/256;
Sound_Temp_TL0=Temp_T%256;
TH0=Sound_Temp_TH0;
TL0=Sound_Temp_TL0;
Delay1ms
(1);TR0=1;
key=getkey(keydisp());
if(key!
=0x42)TR0=0;}while(key==0x43){InitialSound();
if(gao_di==0)
Temp_T=65536-(50000/FreTab[SignTab[6]])*10;//计算计数器初值else
Temp_T=65536-(50000/FreTab[SignTab[6]])*5;//计算计数器初值Sound_Temp_TH0=Temp_T/256;
Sound_Temp_TL0=Temp_T%256;
TH0=Sound_Temp_TH0;TL0=Sound_Temp_TL0;
Delay1ms
(1);TR0=1;
key=getkey(keydisp());
if(key!
=0x43)TR0=0;}
while(key==0x44){
gao_di=(gao_di++)%2;
key=getkey(keydisp());
if(key!
=0x31)
TR0=0;}}}
unsignedchar*SelectMusic(unsignedcharSoundIndex){
unsignedchar*MusicAddress=0;
switch(SoundIndex){
case0x00:
MusicAddress=&Music_Code[0];//龙的传人
break;case0x01:
MusicAddress=&Music_Dod