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

📄 音乐盒.c

📁 基于单片机的一个音乐产生程序。主程序为C语言
💻 C
字号:
#include<REG51.h>
#define uchar unsigned char
#define uint unsigned int
uint timer_number,i;
uchar cnt=0;
uint simple_code,code_h,code_l;
sbit speaker=P1^0;
sbit key=P1^6;
bit flag=0;
void display(uchar);
void delaynms(uchar);
void delay(uchar);
void Seclet(void);
void delay1();
void process(void);

uchar code tab_disp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint code tab0[]={64260,64400,64524,64580,64684,64777,64820,64898,
			 	  64968,65030,65058,65110,65157,65178,65217}; //各种音符的定时初值。
uchar code tab1[]={0x83,0x81,0x94,0x84,
			 	   0xB4,0xA8,
			 	   0x83,0x81,0x94,0x84,
				   0xC4,0xB8,   //第一段
			       0x83,0x81,0xF4,0xD4,
			 	   0xB4,0xA4,0x94,
			 	   0xE2,0x01,0xE1,0xD4,0xB4,
			 	   0xC4,0xB8,0x00};//第二段*/
uchar code tab2[]={0x52,0x61,0x81,0x52,0x21,0x41,
     				0x54,0x02,0x62,
     				0x84,0x71,0x81,0x92,
     				0x84,0x04,
    				//2
     				 0xB2, 0xB2,0x92,0xB2,
    				 0x82,0x01,0x91,0x82,0x62,
     				 0x52,0x52,0x22,0x52,
     				 0x44,0x04,
     				//3
     				0x52,0x01,0x61,0x52,0x42,
     				0x22,0x21,0x41,0x54,
     				0x82,0x01,0x81,0x72,0x82,
     				0x92,0x72,0x84,
    				//4
     				0x92,0x92,0x81,0x91,0xA2,
     				0x94,0x02,0x82,
     				0x62,0x92,0x82,0x52,
     				0x64,0x04,
    				//5
     				0x82,0x91,0xB1,0x92,0x81,0x61,
     				0x52,0x61,0x81,0x51,0x61,0x42,
     				0x22,0x01,0x41,0x61,0x81,0x52,
     				0x44,0x04,0x00};
uchar code tab3[]={
 //甜蜜蜜
     0x11,0x21,0x41,0x51,0x64,0x0c,0x14,0x22,0x11,0x21,0x44,0x08,
	  0x64,0x82,0x92,0x64,0x02,0x42,0x52,0x41,0x52,0x61,
	  0x81,0x64,0x04,0x52,0x52,0x52,0x51,0x61,0x51,0x41,0x42,0x21,
 	  0x11,0x12,0x44,0x02,0x52,0x62,0x02,0x51,0x61,0x51,0x61,0x81,
	  0x54,0x08,0x64,0x82,0x92,0x64,0x02,0x42,0x52,0x41,
	  0x52,0x61,0x81,0x64,0x04,0x52,0x52,0x52,0x51,0x61,0x51,0x41,
	  0x42,0x21,0x12,0x02,0x44,0x02,0x62,0x51,0x41,0x42,0x21,0x11,
	  0x12,0x44,0x08,0x64,0x04,0x14,0x21,0x41,0x11,0x21,
	  0x44,0x08,0x22,0x42,0x22,0x42,0x22,0x21,0x41,0x21,
	  0x11,0x12,0x64,0x08,0x22,0x42,0x22,0x42,0x22,0x21,
	  0x41,0x21,0x11,0x12,0x64,0x04,0x64,0x02,0x81,0x91,0x84,0x02,
	  0x81,0x91,0x84,0x02,0x81,0x91,0x82,0x81,0x91,0x82,0x81,0x91,
	  0x84,0x04,0x64,0x82,0x92,0x64,0x02,0x42,0x52,0x41,0x52,0x61,
	  0x81,0x64,0x04,0x52,0x52,0x52,0x51,0x61,0x51,0x41,0x42,0x21,
	  0x12,0x02,0x44,0x02,0x62,0x51,0x41,0x42,0x21,0x11,0x12,0x44,
	  0x08,0x64,0x08,0x14,0x21,0x41,0x11,0x21,
	  0x44,0x08,0x64,0x82,0x92,0x64,0x02,0x42,0x52,0x41,
	  0x52,0x82,0x64,0x04,0x52,0x52,0x52,0x62,0x52,0x32,0x22,0x12,
	  0x44,0x02,0x52,0x62,0x51,0x62,0x82,0x54,0x04,0x52,0x32,0x22,
	  0x12,0x08
};	
code uchar tab4[]={//1
0x02,0x41,0x51,0x62,0x62,0x52,0x42,0x24,0x02,0x41,0x51,0x62,0x62,0x52,0x42,0x24,0x03,0x21,0x62,0x55,0x03,0x51,0x51,0x61,0x81,0x61,
//2
0x6c,0x02,0x41,0x51,0x62,0x62,0x52,0x42,0x24,0x02,0x41,0x51,0x62,0x82,0x61,0x51,0x41,0x21,0x24,0x03,0x61,
//3
0x58,0x03,0x51,0x52,0x22,0x52,0x45,0x04,0x02,0x41,0x51,0x62,0x62,0x52,0x42,0x24,0x02,0x41,0x51,
//4
0x62,0x62,0x52,0x42,0x24,0x03,0x21,0x62,0x55,0x03,0x41,0x51,0x61,0x81,0x61,0x6c,0x02,0x41,0x51,
//5
0x62,0x62,0x52,0x42,0x24,0x02,0x41,0x51,0x62,0x82,0x61,0x51,0x41,0x21,0x24,0x03,0x61,0x54,0x03,0x61,0x54,0x21,0x41,0x51,0x41,
//6
0x4c,0x02,0x61,0x81,0x82,0x62,0x62,0xb1,0x91,0x94,0x91,0x81,0x91,0xb1,0x91,0x81,0x82,0x82,0x92,0x81,0x51,0x62,0x02,0x61,0x81,0x82,0x62,0x52,0x42,0x54,0x01,0x51,0x51,0x61,
//7
0x71,0x71,0x71,0x81,0x82,0x92,0x84,0x02,0x61,0x81,0x82,0x62,0x62,0xb1,0x91,0x94,0x91,0x81,0x91,0xb1,0x91,0x81,0x82,0x82,0x92,0x81,0x51,0x62,0x02,0x61,0x81,
//8
0x82,0x61,0x61,0x62,0x51,0x41,0x54,0x01,0x51,0x51,0x61,0x71,0x61,0x71,0x81,0x88,0x52,0x62,0x52,0x45,0x48,0x44,0x00};

uchar code tab5[]={//    月亮代表我的心
//1
0x02,0x12,0x45,0x62,0x85,0x42,0x35,0x62,0x84,0x02,0x82,0x95,0xa2,0xb5,0x92,
//2
0x8c,0x62,0x52,0x45,0x42,0x44,0x62,0x52,0x45,0x42,0x44,0x52,0x62,
//3
0x55,0x42,0x24,0x64,0x5c,0x02,0x12,0x45,0x62,0x85,0x42,0x35,0x62,0x84,0x02,0x82,0x95,0xa2,0xb5,0x92,0x8c,0x62,0x52,0x45,0x42,0x44,0x62,0x52,0x45,0x42,0x44,0x52,0x62,0x55,0x22,0x34,0x42,0x52,0x4c,0x84,
//4
0x65,0x52,0x44,0x84,0x3c,0x22,0x32,0x25,0x34,0x24,0x14,0x6c,0x84,
//5
0x65,0x52,0x44,0x84,0x3c,0x22,0x32,0x45,0x42,0x45,0x51,0x61,0x5c,0x02,0x12,
//6
0x45,0x62,0x85,0x42,0x35,0x62,0x85,0x82,0x95,0xa2,0xb5,0x92,0x8c,0x62,0x52,
//7
0x45,0x42,0x44,0x62,0x52,0x45,0x42,0x44,0x52,0x62,0x55,0x22,0x34,0x42,0x52,0x4c,
//重复
0x62,0x52,0x45,0x42,0x44,0x62,0x52,0x45,0x42,0x44,0x52,0x62,0x55,0x22,0x34,0x42,
0x52,0x4c,0x62,0x52,0x45,0x42,0x44,0x62,0x52,0x45,0x42,0x44,0x52,0x62,0x55,0x22,0x34,0x42,0x52,0x4c,0xf,00};	
uchar code tab6[]={ //2
 0x82,0x62, 0x64,0x82,0x52,0x54,0x62,0x52,
 //3
0x52,0x42,0x48,0x42,0x32,0x22,0x32,0x42,
0x32,0x42,0x42,0x52,0x62, 0x6C,0x82,0x62,
0x64,0x82,0x52,0x54,0x62,0x52,0x52,0x42,
0x48,0x42,0x32,
 //4
 0x22,0x32,0x42,0x32,0x32,0x42,0x42,0x52,
0x48,0x02,0x82,0x92,0xA2,0xB4,0xA2,0xB2,
0xA2,0x92,0x92,0x81,0x71,0x84,0x32,0x82,
0x44,0x52,0x62, 0x72,0x62,0x52,0x42,0x34,0x82,0x62,
 //5
0x64,0x82,0x52,0x54,0x62,0x52,0x52,0x42,0x48,0x42,
0x32,0x22,0x32,0x42,0x32,0x32,0x42,0x42,0x52,0x6C,
0x82,0x62,
 //6
 0x64,0x82,0xC2,0xC4,0xB2,0xA2,
 0xA2,0xB2,0xA8,0x42,0x32,
 0x22,0x32,0x42,0x32,0x32,0x42,0x42,0x52,
 0x48,0x02,0x82,0x92,0xA2,
 //7
 0xB4,0xA2,0xB2,0xA2,0x92,0x82,0x92,
 0x92,0x82,0x84,0x82,0x42,0x52,0x62,
 0x74,0x62,0x72,0x82,0x42,0x52,0x62,
 0x62,0x62,0x64,0x02,0x92,0xA2,
 //8
 0xB4,0xA2,0xB2,0xC2,0xB2,0xC2,0xD2,
 0xD2,0x82,0x84,0x82,0x42,0x52,0x62,
 0x74,0x62,0x72,0x62,0x52,0x52,0x42,
 0x32,0x42,0x48,0x02,0x82,
 0xD2,0xC2,0x82,0xD2,0xC4,0xC2,0xF2,
 //9
 0x02,0x72,0x62,0x72,0x82,0xA2,0xA2,0xC2,
 0xBC,0x82,0x62,
 0x32,0x42,0x44,0x02,0x82,0x92,0x0A2,
 0xB4,0xA2,0xB2,0xC2,0xB2,0xA2,0x92,
 //10
 0x92,0x82,0x84,0x02,0x42,0x52,0x62,
 0x74,0x62,0x72,0x82,0x42,0x42,0x92,
 0x92,0x82,0x84,0x02,0x82,0x92,0xA2,
 0xB4,0xA2,0xB2,0xC2,0xA2,0xC2,0xD2,
 //11
 0xD2,0x82,0x84,0x02,0x42,0x52,0x62,
 0x74,0x62,0x72,0x82,0x42,0x44,
 0x51,0x61,0x51,0x41,0x4C,
 0x08,0x02,0x82,0x92,0x0A2,
 0xB4,0xA2,0xB2,0xA2,0x92,0x82,0x72,
 //12
 0x72,0x82,0x8C,
 0x72,0x62,0x52,0x42,0xA4,0xA4,
 0xBF,0x00
};
uchar code tab7[]={
//同桌的你
0x52,0x52,0x52,0x52,0x32,0x42,
0x56,0x76,0x62,0x62,0x62,0x62,
0x42,0x62,0x56,0x56,0x52,0x52,
0x52,0x52,0x72,0x62,0x46,0x44,
0xf2,0x42,0x42,0x42,0x42,0x33,
0x21,0x16,0x14,0xf2,0x82,0x82,
0x82,0x82,0x52,0x62,0x84,0x82,
0xa6,0x92,0x92,0x92,0x93,0x81,
0x72,0x66,0x66,0x72,0x72,0x72,
0x72,0x72,0x82,0x96,0x54,0xf2,
0x72,0x72,0x82,0x92,0x82,0x72,
0x86,0x86,0x00
};
uchar code tab8[]={
//路边的野花不要采
0xc2,0xa1,0xc1,0xd4,0xc2,0xa1,
0xc1,0xd4,0xc2,0xa1,0xc1,0xd2,
0xc2,0xa2,0xa2,0xa4,0xc2,0xa1,
0xc1,0xd4,0xc2,0xa1,0xc1,0xd4,
0xc2,0xa1,0xc1,0x92,0xa2,0x82,
0x82,0x84,0xa4,0xa2,0xc2,0x62,
0x84,0x62,0x84,0x94,0xa2,0x96,
0x94,0x92,0x72,0x62,0x62,0x32,
0x52,0x63,0x91,0x72,0x62,0x62,
0x56,0x84,0x82,0x62,0x62,0x92,
0x72,0x62,0x52,0x62,0x92,0x72,
0x72,0x66,0x63,0x81,0x32,0x52,
0x62,0x52,0x64,0x63,0x81,0x32,
0x52,0x64,0x64,0x62,0x84,0x92,
0xa4,0x94,0x98,0x98,0xc4,0x72,
0x62,0x32,0x56,0x62,0x51,0x61,
0x72,0x62,0x52,0x22,0x54,0x62,
0x51,0x61,0x72,0x62,0x54,0xf4,
0xc4,0xc4,0xa2,0xd2,0xc4,0xa2,
0x92,0xa2,0xc2,0xc2,0x96,0xa4,
0x64,0x82,0x92,0xa4,0x92,0x82,
0x62,0x52,0x86,0x72,0x72,0x62,
0x72,0x62,0x92,0x74,0x32,0x52,
0x62,0x92,0x72,0x72,0x66,0x82,
0x92,0xa2,0xc2,0xc2,0x94,0x52,
0x62,0x82,0x92,0xa2,0xa2,0x86,
0x88,0x84,0xf4,0x00
};
uchar code  tab9[]={
//小芳 
0xa1,0x61,0x61,0x61,0x62,0xa2,
0xa2,0x62,0x94,0x93,0x61,0x62,
0x92,0x92,0x62,0x84,0x82,0x32,
0x32,0x81,0x81,0x81,0x31,0x74,
0x72,0x52,0x51,0x61,0x72,0x68,
0xa1,0x61,0x61,0x61,0x62,0xa2,
0xa2,0x62,0x94,0x92,0x61,0x61,
0x62,0x92,0x92,0x62,0x84,0x82,
0x32,0x33,0x81,0x82,0x32,0x74,
0x72,0x52,0x51,0x61,0x72,0x68,
0xc1,0xa3,0xa4,0x91,0xa2,0x61,
0x84,0xf1,0x91,0x91,0x91,0x93,
0x61,0x82,0x91,0xa1,0xa4,0xc1,
0xa3,0xa4,0x91,0xa2,0x61,0x62,
0x82,0x91,0x91,0x91,0x82,0x71,
0x61,0x68,0xd1,0xd1,0xd1,0xc1,
0xa1,0xa1,0xa1,0xc1,0xd1,0xd1,
0xd1,0xb1,0xa4,0xf1,0x91,0x91,
0x91,0x93,0x61,0x81,0x81,0x81,
0x91,0xa4,0xd1,0xd1,0xd1,0xc1,
0xa1,0xa1,0xa1,0xc1,0xd1,0xd1,
0xd1,0xb1,0xa4,0x81,0x82,0x81,
0x71,0x61,0x71,0x61,0x68,0x00 }; 
main()
{
	TMOD=0x01;
	ET0=1;
	EA=1;
	while(1)
	{
		Seclet();
aa:    	display(cnt);
		switch(cnt)
		{
			case 0:
	        do 
			{simple_code=tab1[i]; Seclet();
			if(flag){flag=0;goto aa;}
			process();}while(simple_code!=0);
			cnt++;
			break;
			case 1:
			do
			{simple_code=tab2[i];Seclet();
			if(flag){flag=0;goto aa;}
			process();}while(simple_code!=0);
			cnt++;
			break;
			case 2:
			do
			{simple_code=tab3[i]; Seclet();
			if(flag){flag=0;goto aa;}
			process();}while(simple_code!=0);
			cnt++;
			break;
			case 3:
			do
			{simple_code=tab4[i]; Seclet();
			if(flag){flag=0;goto aa;}
			process();}while(simple_code!=0);
			cnt++;
			break;
			case 4:
			do
			{simple_code=tab5[i]; Seclet();
			if(flag){flag=0;goto aa;}
			process();}while(simple_code!=0);
			cnt++;
			break;
			case 5:
			do
			{simple_code=tab6[i]; Seclet();
			if(flag){flag=0;goto aa;}
			process();}while(simple_code!=0);
			cnt++;
			break;
			case 6:
			do
			{simple_code=tab7[i]; Seclet();
			if(flag){flag=0;goto aa;}
			process();}while(simple_code!=0);
			cnt++;
			break;
			case 7:
			do
			{simple_code=tab8[i]; Seclet();
			if(flag){flag=0;goto aa;}
			process();}while(simple_code!=0);
			cnt++;
			break;
			case 8:
			do
			{simple_code=tab9[i]; Seclet();
			if(flag){flag=0;goto aa;}
			process();}while(simple_code!=0);
			cnt=0;
			break;
			default:
			break;
		}
		i=0;
		delay(3);
	}
}
void timer0_int(void) interrupt 1 using 0
{
	TH0=timer_number/256;
	TL0=timer_number%256;
	speaker=!speaker;	
}	
void delay(uchar count)
{
	uint z;
	for(z=0;z<count;z++)
	{delay1();}
}
void process(void)
{
		code_h=simple_code/0x10;
		code_l=simple_code%0x10;
		i++;
		if(code_h!=0)
			{
				timer_number=tab0[code_h-1];
				TR0=1;
				delay(code_l);				
			}
	else{	TR0=0;
		delay(code_l);}
}

void delaynms(uchar x )
{
	uchar  j;
	while(x--)
	{
		for(j=0;j<120;j++)
		{;}
	}
}

void display(uchar dis)
{
	P0=tab_disp[dis];
	P2=0x01;
}
void Seclet(void)
{
	if(!key)
	{
		delaynms(10);
		if(!key)
		{	
			while(!key);
			cnt++;
			flag=1;
			TH0=0;
			TL0=0;
			i=0;
			if(cnt==10)cnt=0;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -