📄 music.c
字号:
/*-----------------------------------------------
Virtual51 Music Demo
Oscilator:12Mhz
------------------------------------------------*/
#include <Virtual51.h>
#define uint unsigned int
#define uchar unsigned char
#define MHD 0x55AA
#define MREP 0xAA00
#define MEND 0x0000
uchar code pic[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x78,0x88,0x00,0x88,0x78,0x08,
0x00,0x00,0x40,0x40,0xC8,0x00,0x00,0x00,0x00,0x40,0x40,0xC0,0x80,0x40,0x40,0x80,
0x00,0x00,0x40,0xF0,0x40,0x40,0x00,0x00,0x00,0x40,0xC0,0x00,0x00,0x40,0xC0,0x00,
0x00,0x00,0x40,0x40,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x08,0xF8,0x00,0x00,0x00,
0x00,0x00,0xF8,0x88,0x88,0x88,0x08,0x00,0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x03,0x00,0x00,
0x00,0x00,0x08,0x08,0x0F,0x08,0x08,0x00,0x00,0x08,0x08,0x0F,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x07,0x08,0x08,0x04,0x00,0x00,0x00,0x07,0x08,0x08,0x04,0x0F,0x08,
0x00,0x06,0x09,0x09,0x09,0x09,0x07,0x08,0x00,0x00,0x08,0x08,0x0F,0x08,0x08,0x00,
0x00,0x00,0x04,0x08,0x08,0x08,0x07,0x00,0x00,0x00,0x08,0x08,0x0F,0x08,0x08,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0x0C,0x30,0x0C,0xFF,0x01,
0x00,0x08,0xF8,0x00,0x00,0x88,0xF8,0x00,0x00,0x90,0x28,0x28,0x28,0x48,0x48,0x90,
0x00,0x00,0x08,0x08,0xF9,0x00,0x00,0x00,0x00,0xF0,0x08,0x08,0x08,0x08,0x08,0x90,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0x01,0x01,0x01,0x82,0x7C,
0x00,0xF0,0x28,0x28,0x28,0x28,0x28,0xB0,0x00,0x08,0xF8,0x08,0xF0,0x08,0xF0,0x00,
0x00,0xF0,0x08,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0x81,0x81,0x80,0x81,0x81,0x81,
0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,
0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,
0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,
0x00,0x00,0x01,0x01,0x01,0xE1,0x01,0x00,0x00,0x01,0x81,0x00,0x01,0x00,0x21,0x41,
0x00,0x00,0xE1,0x01,0x01,0xC1,0x41,0xC0,0x00,0x00,0x00,0xC0,0x40,0x60,0xC0,0x00,
0xC0,0x40,0x40,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0x81,0xFF,0x80,0x80,0x00,
0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x01,0x00,0x80,0xFF,0x80,0x00,0x01,
0x00,0x78,0x84,0x84,0x84,0x84,0x84,0x78,0x00,0x84,0xFC,0x88,0x04,0x84,0xF8,0x80,
0x00,0x78,0x94,0x94,0x94,0x94,0x94,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xC1,0xA0,0x90,0x88,0x87,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
0x01,0x81,0x41,0x21,0x19,0x27,0xC9,0x11,0x21,0x41,0x81,0x81,0x00,0x21,0xF2,0x08,
0x01,0xF9,0x4F,0x79,0x81,0x7F,0x0A,0xFF,0x00,0x00,0x84,0x7F,0x15,0x24,0xFF,0x04,
0xF3,0x90,0x90,0x93,0xF4,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x80,0x80,0x80,
0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,
0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x01,0x00,
0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x01,0x11,0x11,0xEE,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0xFF,0xAA,0xAA,0xBE,0xAB,0xAA,
0xEA,0x3E,0x20,0x20,0x00,0x20,0xF0,0x09,0x80,0x62,0x1E,0x00,0xFF,0x14,0x22,0x41,
0x80,0x00,0x41,0x21,0xF1,0x0D,0x03,0x41,0x41,0xFB,0x21,0x11,0x09,0x81,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x02,0x02,
0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x03,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
struct
{uint Tone;
uchar Duration; //Delay Time=Duration*10ms
} code music[]={
{MHD,0}, //Tone
{500,4},{1000,4},{1500,4},{2000,4},{2500,4},{3000,4},{3500,4},{4000,4},{4500,4},{5000,4},{5500,4},{6000,4},{6500,4},
{6000,4},{5500,4},{5000,4},{4500,4},{4000,4},{3500,4},{3000,4},{2500,4},{2000,4},{1500,4},{1000,4},
{MREP+24,2},{MEND,50},
{MHD,1}, //"太湖船"
{1323,50},{1572,50},{1323,50},{1176,26},{1323,26},{1572,50},{1323,26},{1176,26},{1323,100},
{1323,50},{1572,50},{1323,26},{1176,26},{1048,50},{1176,50},{1323,26},{1572,26},{1176,100},
{1048,50},{1048,26},{882,26},{785,50},{785,26},{882,26},{1048,50},{1176,26},{1323,26},
{1048,100},{MEND,100},
{MHD,2}, //"鲁冰花"
{2269,140},{1864,46}, {1661,186},{2269,93},{2269,24}, {2506,24}, {2269,24}, {1864,24},
{1661,186},{1864,93}, {2269,46}, {1864,46},{1661,70}, {1397,24}, {1661,70}, {1397,24},
{1244,70}, {1397,24}, {1244,93}, {1046,24},{932,24}, {830,24}, {1046,24}, {932,93},
{1864,93}, {1397,46}, {1864,46}, {1480,24},{1397,24}, {1244,24}, {1480,24}, {1397,93},
{1109,70}, {1244,24}, {1397,46}, {1661,46},{1864,70}, {1480,24}, {1397,93}, {1864,93},
{2269,46}, {1864,46}, {1661,70}, {1397,24},{1661,70}, {1397,24}, {1244,70}, {1397,24},
{1244,93}, {1046,24}, {932,24}, {830,24}, {1046,24}, {932,93}, {2269,186}, {1864,46},
{1661,186},{2269,116},{2506,24}, {2269,24},{1864,24}, {1661,186},{1864,93}, {2269,46},
{1864,46}, {1661,70}, {1397,24}, {1661,70},{1397,24}, {1244,70}, {1397,24}, {1244,93},
{1046,24}, {932,24}, {830,24}, {1046,24},{932,93}, {MEND,100},
{MHD,255},
};
uint ATone;
uchar ADuration,mrepcnt;
uchar Tick=0,keycnt=0;
uchar bdata Flags=0,keycon=0;
sbit To_10ms=Flags^0;
sbit Isrep =Flags^1;
void ShowPicture(uchar byPicID)
{
uchar col,pg;
uchar code *pC;
pC = pic + (byPicID&0x03)*128*8;
for(pg = 0; pg < 8; pg++)
{
LCDCMR = SET_PAGE | pg;
LCDCMR = SET_COL | 0;
for(col = 0; col < 128; col++)
LCDDR = *pC++;
}
}
void main()
{uint p=0;
TMOD=0x01;
LCDCMR=Cls;
LCDCMR=LCD_on;
LCDCMR=INC_enb;
EA=1;ET0=1;TR0=1;
ShowPicture(0);
while (1)
{ATone=music[p].Tone;
ADuration=music[p].Duration;
if (ATone>0x3FFF)
{if ((ATone>>8)==0xAA)
{if (Isrep)
{if (--mrepcnt!=0) p=p-(ATone &0xff);
else
{
p++;
Isrep=0;
}
}
else
{
mrepcnt=ADuration;
p=p-(ATone &0xff);
Isrep=1;
}
continue;
}
if (ATone==MHD)
{
if (ADuration!=255) {p++;continue;}
}
p=0;Isrep=0;
continue;
}
TFR=ATone;
TGCON=(ATone>>8)| 0x80;
while (ADuration>0)
{while (~To_10ms) {}
To_10ms=0;
ADuration--;
}
TGCON=0;
p++;
}
}
void timer0() interrupt 1
{
TL0=0xF4; //10ms Interval,XTAL=12Mhz
TH0=0xD8;
To_10ms=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -