⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 music.c

📁 说明: Virtual51是一个动态可视化的MCS-51全功能模拟程序
💻 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 + -