3、通音符演奏的长度分率,〃每4分音符间#dcfincMUSICNUMBER//歌曲的数目sbitBccpIOP26;//定义输出管脚externvoidLEDShow(unsignedintLEDStatus);externunsignedcharGetKey(void);externvoidKeyDispose(unsignedcharKey);externvoidDelayIms(unsignedintcount);externunsignedcharMusicindex;unsignedintcodeFreTab[12]{262,277,294,311,330,349,369,392,4
4、15,440,466,494};//原始频率表unsignedcharcodeSignTab[7]={0,2,4,5,7,9,11};//1~7在频率表中的位置unsignedcharcodeLengthTab[7]={1,2,4,8,16,32,64};unsignedcharSound_Temp_TII0,Sound_Temp_TL0;//音符定时器初值暂存unsignedcharSound_Tcmp_TIIl,Sound_Tcmp_TLl;//咅长定时器初值暂存ffxXxf/^T>^T>**voidInitialSound(void)BeepIO=0;Sound_Tcmp_TIIl=(
5、65535-(1/1200)*SYSTEM_OSC)/256;//计算TL1应装入的初值(10ms的初装值)Sound_Temp_TLl=(65535-(1/1200)*SYSTEM_OSC)%256;//计算Till应装入的初值TH1=Sound_Tcmp_THl;TL1=Sound_Temp_TLl;TMOD
6、=0x11;ETO=1;ET1=0;TRO=0;TRI=0;EA=1;voidBccpTimcrO(void)interrupt1//音符发生中断{BeepIO=IBeepIO;THO=SoundTempTHO;TLO=Sound_Temp_TLO;ffxXx^£xv£x^£x^£
7、x^£xv£xv£x^£x^£x^£x^£x^£x^£x^£xv£x^£xv£x^£x^£x^£x^£xf/^T>^T>**voidPlay(unsignedchar*Sound,unsignedcharSignature,unsignedOctachord,unsignedintSpeed){unsignedintNcwFrcTab[12];//新的频率表unsignedchari,j;unsignedintPoint,LDiv,LDivO,LDivl,LDiv2,LDiv4,CurrcntFre,Tcmp_T,SoundLength;unsignedcharTone,Length,SL,
8、SH,SM,SLen,XG,FD,Key,LEDFlash,OFFSet;for(i=0;i<12;i++)//根据调号及升降八度来生成新的频率表{j二i+Signature;if(j>ID{J二M2;NewFreTab[i]=FreTab[j]*2;}elseNewFreTab[i]=FreTabEj];if(Octachord==1)NewFreTab[i]»=2;elseif(Octachord==3)