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

📄 song.c

📁 单片机音乐c代码
💻 C
字号:
#include<reg51.h>

sbit Beep=P3^0;

unsigned int code MusicFrequency[]={0xF88C,0xF95B,0xFA15,0xFA67,0xFB04,0xFB90,0xFC0C,
                               0xFC44,0xFCAC,0xFD09,0xFD34,0xFD82,0xFDC8,0xFE06,
							   0xFE22,0xFE56,0xFE85,0xFE9A,0xFEC1,0xFEE4,0xFF03};
 /***************************************************************************
 音乐简谱输入,三个数字决定一个音,第一个为音调。输入范围:1-7,
					               第二个为音调高低。输入范围:0-2,(0低音,1中音,2高音)
								   第三个为音长。输入范围:1-8,(音长为n*1/4节)
****************************************************************************/
unsigned char code song[]={5,0,2,5,0,2,6,0,4,5,0,4,1,1,4,7,0,8,5,0,2,5,0,2,
 					  6,0,4,5,0,4,2,1,4,1,1,8,5,0,2,5,0,2,5,1,4,3,1,4,1,1,4,
					  7,0,4,6,0,4,4,1,2,4,1,2,3,1,4,1,1,4,2,1,4,1,1,8,0,0,0};
				
unsigned int SongFreqValue;

void Init(void)
{
	IE = 0x82;
	TMOD = 0x01;
	TR0=1;
}
void irsTime0() interrupt 1
{
	Beep=~Beep;
	TH0=SongFreqValue/256;
	TL0=SongFreqValue%256;	
}
void delay1ms(unsigned int count)
{
	unsigned int i;
	while(count--)
	{
		for(i=0;i<100;i++);
	}	
}

void delay1beat(unsigned char number)
{
	while(number--)
	{
		delay1ms(125);
	}	
}
void main(void)
{
	unsigned char i=0;//音乐位置
	unsigned char musicTone=0;//音调
	unsigned char musicHiLi=0;//音调高低
	unsigned char musicLong=0;//音节长度,以1/4节拍为一个单位(125ms)
	Init();
	while(1)
	{
		for(i=0;;i++)
		{
			musicTone=song[i*3];
			musicHiLi=song[i*3+1];
			musicLong=song[i*3+2];
			if(musicTone==0) break;
			SongFreqValue=MusicFrequency[musicTone+musicHiLi*7];
			delay1beat(musicLong);
		}


	}
}

⌨️ 快捷键说明

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