要做个MIDI 音乐播放器 现在有一个51单片机的程序,不知道哪位大哥能帮我改成能在ARM 利用LPC2124上用的程序~~~
#include <REGX51.H> unsigned char code MUSIC_01[97]= { 0x34,0x32,0x32,0x34,0x42,0x51, 0x62,0x52,0x42,0x32,0x34,0x04, 0x74,0x74,0x62,0x62,0x64, 0x3c,0x04, 0x64,0x62,0x52,0x42,0x32,0x34, 0x33,0x31,0x32,0x72,0x76,0x72, 0x83,0x81,0x82,0x82,0x82,0x74,0x72, 0x7c,0x04, 0x63,0x61,0x62,0x62,0x64,0x72,0x82, 0x72,0x74,0x72,0x62,0x52,0x42,0x32, 0x42,0x44,0x42,0x42,0x52,0x62,0x52, 0x5c,0x04, 0x64,0x62,0x62,0x64,0x72,0x82, 0x72,0x74,0x72,0x62,0x52,0x42,0x32, 0x42,0x46,0x53,0x41,0x42,0x32, 0x3c,0x04, 0x44,0x48,0x02,0x32, 0x3f, 0x44,0x48,0x02,0x32, 0x3f, 0x34,0x0c, 0xFF }; unsigned char code MUSIC_02[46]= { 0x12,0x52,0x52,0x52,0x56,0x42, 0x32,0x42,0x32,0x22,0x18, 0x82,0x82,0x82,0x82,0x86,0x72, 0xB2,0x72,0x72,0x62,0x58, 0x52,0x82,0x82,0x72,0x56,0x42, 0x32,0x42,0x32,0x22,0x16,0xB2, 0xB2,0x32,0x32,0x22,0x16,0x52, 0x42,0x32,0x22,0xC2,0x88, 0xFF }; unsigned char code MUSIC_03[131]= { 0x52,0x42, 0x58,0x02,0x42,0x52,0x42, 0x38,0x04,0x12,0x32, 0x44,0x42,0x52,0x42,0x32,0x12,0x12, 0xC8,0x04,0x52,0x42, 0x58,0x02,0x42,0x52,0x42, 0x38,0x04,0x12,0x32, 0x44,0x42,0x52,0x42,0x32,0x12,0x32, 0x48,0x04,0x52,0x42, 0x58,0x02,0x42,0x52,0x42, 0x38,0x04,0x12,0x32, 0x44,0x42,0x52,0x42,0x32,0x12,0x11,0x31, 0xC8,0x04,0x52,0x72, 0x78,0x02,0x72,0x82,0x72, 0x58,0x04,0x42,0x42, 0x44,0x42,0x52,0x42,0x32,0x12,0x12, 0x32,0x32,0x3C, 0x09,0x72,0x72,0x82, 0xA2,0x92,0x92,0x82,0x52,0x42,0x42,0x42, 0x58,0x02,0x52,0x52,0x72, 0x84,0x84,0x02,0x12,0x52,0x42, 0x48,0x04,0x52,0x72, 0x72,0x52,0x74,0x02,0xA4,0x92, 0x82,0x92,0x54,0x02,0x82,0x82,0x92, 0x82,0x72,0x52,0x42,0x02,0xC4,0x12, 0x3C, 0xFF }; unsigned char code MUSIC_04[37]= { 0xC4,0x12,0x32,0x44,0x42,0x52, 0x52,0x44,0x32,0x32,0x12,0x14, 0x12,0x12,0x32,0x42,0x54,0x44, 0x4F, 0xC4,0x12,0x32,0x44,0x42,0x72, 0x58,0x42,0x32,0x34, 0x14,0x12,0x32,0x34,0x32,0x12, 0x1F, 0xFF }; unsigned char code MUSIC_05[144]= { 0x52,0x62, 0x74,0x74,0x74,0x34, 0x42,0x34,0x52,0x56,0x42, 0x34,0x34,0x14,0x32,0x12, 0x12,0xC2,0xC4,0x04,0x52,0x62, 0x74,0x74,0x74,0x34, 0x42,0x34,0x52,0x56,0x42, 0x34,0x32,0x12,0x12,0x34,0x42, 0x4C,0x52,0x42, 0x34,0x32,0x42,0x32,0x12,0x12,0xC2, 0xC2,0x54,0x52,0x54,0x52,0x52, 0x42,0x32,0x32,0x12,0x32,0x42,0x32,0x52, 0x5C,0x52,0x42, 0x34,0x32,0x42,0x32,0x12,0x12,0xC2, 0xC2,0x54,0x52,0x54,0x02,0x52, 0x52,0x42,0x32,0x12,0x32,0x84,0x72, 0x7F, 0x0F, 0x74,0x72,0x52,0x54,0x74, 0x82,0x52,0x52,0x72,0x78, 0x34,0x32,0x32,0x42,0x54,0x72, 0x7F, 0x86,0x82,0x72,0x52,0x54, 0x72,0x84,0x32,0x36,0x52, 0x42,0x52,0x42,0x32,0x34,0x12,0x32, 0x32,0x42,0x4C, 0x86,0x82,0x72,0x52,0x54, 0x72,0x84,0x52,0x56,0x52, 0x42,0x52,0x72,0x82,0x52,0x34,0x12, 0x12,0x32,0x3C, 0xFF }; unsigned char code MUSIC_06[85]= { 0x04,0x24,0x14,0xC4, 0x54,0x54,0x48, 0x04,0x54,0x44,0x34, 0x22,0x14,0xB2,0xC8, 0x04,0x12,0xC2,0x16,0x12, 0x76,0x52,0x46,0x12, 0x3F, 0x04,0xB4,0xD4,0xC4, 0x14,0x28,0xC4, 0x14,0x12,0x32,0x16,0xC2, 0x54,0x78,0x34, 0x4C,0x42,0x52, 0x86,0x72,0x76,0x52, 0x74,0x28,0x42,0x52, 0x46,0x12,0x26,0x12, 0xCF, 0x04,0x24,0x14,0xC4, 0x56,0x52,0x48, 0x04,0x54,0x44,0x34, 0x22,0x14,0xB2,0xC8, 0x04,0x34,0x14,0xC4, 0x12,0x32,0x18,0x42,0x42, 0x74,0x58,0x44, 0x3F, 0xFF }; unsigned char code MUSIC_07[138]= { 0xC2,0xC2,0x12, 0x34,0x32,0x32,0x32,0x12,0x12,0x52, 0x54,0x02,0xC2,0x12, 0x32,0x32,0x32,0x32,0x34,0x52,0x72, 0x7C,0x02,0x72, 0x82,0x72,0x82,0x72,0x84,0x72,0x41,0x51, 0x52,0x41,0x31,0x34,0x02,0x32,0x32,0x12, 0x34,0x32,0x12,0x32,0x54,0x42, 0x32,0x32,0x32,0x32,0x34,0x52,0x72, 0x7C,0x72,0x72, 0x82,0x72,0x82,0x72,0x84,0x82,0x72, 0x42,0x52,0x42,0x34,0x12,0x12,0x32, 0xC4,0x52,0x42,0x34,0x12,0x12, 0x31,0x41,0x32,0x3C, 0x0A,0x72,0x82,0xA2, 0x84,0x82,0x72,0x82,0x72,0x52,0x72, 0x78,0x02,0x72,0x82,0xA2, 0x84,0x82,0x72,0x82,0x72,0x82,0x32, 0x38,0x02,0x32,0x42,0x52, 0x64,0x62,0x72,0x82,0x82,0x72,0x82, 0x82,0xA2,0x82,0x82,0x82,0xA2,0x82,0x72, 0x78,0x72,0x32,0x82,0x72, 0x78,0x72,0x82,0xA3,0x51, 0x42,0x51,0x41,0x3C, 0xFF }; unsigned char code MUSIC_08[77]= { 0xC2,0xC2,0x34,0x42,0x42, 0x52,0x41,0x51,0x5C, 0x04,0xC2,0xC2,0x34,0x42,0x42, 0x52,0x31,0x41,0x4C, 0x04,0xC2,0xC2,0x34,0x42,0x42, 0x52,0x41,0x51,0x58,0x32,0x52, 0x4C,0x42,0x32, 0x34,0x32,0x42,0x48, 0x04,0xC2,0xC2,0x34,0x42,0x42, 0x72,0x41,0x51,0x5C, 0x04,0xC2,0xC2,0x32,0x32,0x42,0x42, 0x52,0x42,0x4C, 0x04,0xC2,0xC2,0x34,0x42,0x42, 0x52,0x41,0x51,0x58,0x32,0x52, 0x4C,0x42,0x32, 0x32,0x42,0x4C, 0xFF }; unsigned char code MUSIC_09[]= { 0X54,0XC4,0X12,0X32,0X34, 0X52,0X52,0X52,0X52,0X42,0X32,0X34, 0XC1,0XC2,0X52,0XC2,0X12,0X32,0X34, 0X11,0X12,0X31,0X12,0XC2, 0X78,0X72,0X52,0X52,0X42, 0X32,0X42,0X52,0X11,0XC1,0XC4,0XC1,0XC1,0XC1,0XC1, 0X12,0X32,0X32,0X12,0X42,0X42,0X44, 0XC2,0X12,0X32,0X42,0X52,0X72,0X72,0X82, 0X41,0X51,0X42,0X48,0X42,0X12, 0X3C,0X72,0X62, 0X3C,0X72,0X62, 0X3C,0X72,0X62, 0x21,0x31,0x41,0x51,0x61,0x71,0x81,0x91,0x61,0x71,0x81,0x91, 0X3F, 0X3F, 0X54,0XC2,0XC2,0X42,0XC2,0XC4, 0X34,0X32,0X42,0X52,0XC2,0XC4, 0XD2,0XC2,0X12,0X22,0X38, 0X12,0X22,0X32,0X42,0X48, 0xFF }; unsigned char code MUSIC_10[]= { 0x32,0x31,0x41, 0x52,0x52,0x42,0x31,0x41,0x44,0x31,0x41, 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 MUSIC_11[]= { 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 MUSIC_12[]= { 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 }; //********************************************************************* // 以上为12首音乐代码谱表,根据自己的喜好添加乐谱代码 //********************************************************************* sbit SPK=P3^7; unsigned char code MUSIC_TABLE[]=//音乐谱频率值代码 { 0xFF,0xFF,0xFB,0x90,0xFC,0x0C,0xFC,0x44, 0xFC,0xAC,0xFD,0x09,0xFD,0x34,0xFD,0x82, 0xFD,0xC8,0xFE,0x06,0xFE,0x22,0xFA,0X15, 0XFB,0x04,0xFA,0x67,0xFE,0x85, };
#define LEDCODEPORT P0 #define LEDBITPORT P2 unsigned char code LEDTABLE[]=//数码管显示代码表 { 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71, 0x00,0x40,0x73,0x38,0x3e,0x6e,// ,-,P,L,U,y };
unsigned char LEDBuffer[8]; unsigned char LEDScanCount;
struct MUSIC_STRUCT { unsigned char Data; unsigned char Step; unsigned char Status; unsigned char Number; }; struct MUSIC_STRUCT Music; unsigned char *MusicPointer;
void Delay125MS(unsigned char t)//延时子程序 { unsigned char i,j,k; while(t) { for(i=2;i>0;i--) for(j=125;j>0;j--) for(k=248;k>0;k--); t--; } }
void main(void) { unsigned char a,b; Music.Data=0;//初始化 Music.Step=0; Music.Status=0; Music.Number=0; MusicPointer=&MUSIC_01; if(0==Music.Status) { LEDBuffer[7]=17;//数码管显示"---PAUSE" LEDBuffer[6]=17; LEDBuffer[5]=17; LEDBuffer[4]=18; LEDBuffer[3]=10; LEDBuffer[2]=20; LEDBuffer[1]=5; LEDBuffer[0]=14; } else { LEDBuffer[7]=(Music.Number+1)/10;//数码管显示"XX--PLAy" LEDBuffer[6]=(Music.Number+1)%10; LEDBuffer[5]=17; LEDBuffer[4]=17; LEDBuffer[3]=18; LEDBuffer[2]=19; LEDBuffer[1]=10; LEDBuffer[0]=21; } TMOD=0x11;//定时器初始化为方式1,定时功能 TH1=(65536-1843)/256;//T1定时1mS的初值装入TH1,TL1 TL1=(65536-1843)%256; TR1=1; ET1=1; ET0=1; IT0=1; EX0=1; IT1=1; EX1=1; EA=1; PT0=1; PT1=1; while(1) { if(0!=Music.Status)//判断是否处于播放状态 { if(0xff!=(*MusicPointer))//判断一首歌曲是否播放完毕 { Music.Data=(*MusicPointer)&0x0f;//从歌曲表中取出音乐谱 Music.Step=(*MusicPointer)>>4; a=MUSIC_TABLE[Music.Step*2+0];//根据音阶选择不同的频率值 b=MUSIC_TABLE[Music.Step*2+1]; TH0=a; TL0=b; TR0=1; if((0xff==a)&&(0xff==b))//判断是否为休止符 { TR0=0; SPK=1; } Delay125MS(Music.Data);//根据音拍来决定延时时间 TR0=0; SPK=1; MusicPointer++;//取下一个音乐谱代码 } else { LEDBuffer[3]=17;//一首歌播放完毕,显示"XX-----" LEDBuffer[2]=17; LEDBuffer[1]=17; LEDBuffer[0]=17; Delay125MS(10); Music.Status=0; switch(Music.Number)//重新定位音乐谱指针 { case 0: MusicPointer=&MUSIC_01; break; case 1: MusicPointer=&MUSIC_02; break; case 2: MusicPointer=&MUSIC_03; break; case 3: MusicPointer=&MUSIC_04; break; case 4: MusicPointer=&MUSIC_05; break; case 5: MusicPointer=&MUSIC_06; break; case 6: MusicPointer=&MUSIC_07; break; case 7: MusicPointer=&MUSIC_08; break; case 8: MusicPointer=&MUSIC_09; break; case 9: MusicPointer=&MUSIC_10; break; case 10: MusicPointer=&MUSIC_11; break; case 11: MusicPointer=&MUSIC_12; break; } } } } }
void timer0(void) interrupt 1//音乐频率发生器 { TH0=MUSIC_TABLE[Music.Step*2+0]; TL0=MUSIC_TABLE[Music.Step*2+1]; SPK=~SPK; }
void timer1(void) interrupt 3//显示扫描等操作 { TH1=(65536-1843)/256; TL1=(65536-1843)%256; LEDCODEPORT=LEDTABLE[LEDBuffer][LEDScanCount]]; LEDBITPORT =(LEDBITPORT & 0xf0)|LEDScanCount; LEDScanCount++; if(LEDScanCount==sizeof(LEDBuffer))LEDScanCount=0; }
void int0(void) interrupt 0//音乐播放和暂停按键操作 { unsigned char i,j; EX0=0; for(j=20;j>0;j--) for(i=255;i>0;i--); if(0==Music.Status)Music.Status=1; else { TR0=0; SPK=1; Music.Status=0; } if(0==Music.Status) { LEDBuffer[7]=17;//数码管显示"---PAUSE" LEDBuffer[6]=17; LEDBuffer[5]=17; LEDBuffer[4]=18; LEDBuffer[3]=10; LEDBuffer[2]=20; LEDBuffer[1]=5; LEDBuffer[0]=14; } else { LEDBuffer[7]=(Music.Number+1)/10;//数码管显示"XX--PLAy" LEDBuffer[6]=(Music.Number+1)%10; LEDBuffer[5]=17; LEDBuffer[4]=17; LEDBuffer[3]=18; LEDBuffer[2]=19; LEDBuffer[1]=10; LEDBuffer[0]=21; } while(0==INT0); EX0=1; IE0=0; }
void int1(void) interrupt 2//选曲按键操作 { unsigned char i,j; EX1=0; for(i=20;i>0;i--) for(j=255;j>0;j--); Music.Number++; if(12==Music.Number) { Music.Number=0; } switch(Music.Number)//重新定位音乐谱指针 { case 0: MusicPointer=&MUSIC_01; break; case 1: MusicPointer=&MUSIC_02; break; case 2: MusicPointer=&MUSIC_03; break; case 3: MusicPointer=&MUSIC_04; break; case 4: MusicPointer=&MUSIC_05; break; case 5: MusicPointer=&MUSIC_06; break; case 6: MusicPointer=&MUSIC_07; break; case 7: MusicPointer=&MUSIC_08; break; case 8: MusicPointer=&MUSIC_09; break; case 9: MusicPointer=&MUSIC_10; break; case 10: MusicPointer=&MUSIC_11; break; case 11: MusicPointer=&MUSIC_12; break; } LEDBuffer[7]=(Music.Number+1)/10; LEDBuffer[6]=(Music.Number+1)%10; while(0==INT1); EX1=1; IE1=0; } //************************************************************************** // 将程序装入开发板,开机显示"---PAUSE",按下K1(P3.2)启动播放音乐,再按一下K1 // 暂停播放音乐;按下K2(P3.3)是歌曲选择,每按一次,选择下一首,到最后一首时,又 // 第一首开始.在播放过程中,显示"XX--PLAY",当前曲播放完毕,显示"XX-----",再按 // K1,则又开始播放.更多实验现象,请操作K1和K2两个按键.(fosc=12MHz) //************************************************************************** |