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

📄 music.c

📁 用单片机播放音乐并用LCD显示的源程序
💻 C
字号:
/***************************************/
/*       CopyRight 2005 LiuYong   		*
/****************************************
	文件名称:Music.C
	文件版本:V1.0
	创建人员:LiuYong  cau_ly@163.com
	创建日期:2005.6.28
	功能描述:用蜂鸣器播放音乐的函数
	相关硬件:at89s52兼容单片机,晶体11.0592M
	修改记录:
***************************************/
#include <regx52.H>
#include "musicda.h"


#define uchar     	unsigned char
#define uint     	unsigned int

sbit BUZZER		=P1^5;

uchar g_ucMusicNo;		//正在播放的曲目的序号
uint g_ucSoundLongCNT;	//
//uint  g_uTempo;	

/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

				音乐数据
				
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/


/*************Music1: Happy birthday*********************/
uchar code SOUNDLONG1[]=
{
 	_8d,_16,_4,_4,_4,_2,
 	_8d,_16,_4,_4,_4,_2,
 	_8d,_16,_4,_4,_4,_4,_4,
 	_8d,_16,_4,_4,_4,_2,
	0
};
uint code SOUNDTONE1[]=
{
	_RE,_RE,_MI,_RE,_SO,_FAr,
	_RE,_RE,_MI,_RE,_LA,_SO,
	_RE,_RE,_RE1,_TI,_SO,_FAr,_MI,
	_DO1,_DO1,_TI,_SO,_LA,_SO,
	0
};
/*************Music2: 月朦胧鸟朦胧*******************/
uchar code SOUNDLONG2[]=
{
 	_2,_4,_2,_4,_2,_4,_2d,
	_2,_4,_4,_4,_4,_1,
	_2,_4,_2,_8,_8,_2,_8,_8,_2d,
	_2,_4,_2,_4,_1,
	0
 	
};
uint code SOUNDTONE2[]=
{
	_1SO,_DO,_MI,_DO,_1LA,_DO,_1SO,
	_MI,_MI,_MI,_RE,_DO,_RE,
	_SO,_SO,_SO,_LA,_SO,_MI,_RE,_DO,_1LA,
	_SO,_SO,_MI,_RE,_DO,
	0
};
/*************Music3: 郊游******************/
uchar code SOUNDLONG3[]=
{
 	_4,_4,_4,_4,_4,
	_4d,_8,_4,_4,_4,_4,_4,
	_4,_4,_4,_4,_4,
	_4,_8,_8,_4,_4,_2,
	0
};
uint code SOUNDTONE3[]=
{
	_RE1,_RE1,_RE1,_TI,_RE1,
	_RE1,_TI,_SO,_TI,_LA,_SO,_RE,
	_MI,_SO,_RE,_SO,_TI,
	_RE1,_SO,_LA,_TI,_LA,_SO,
	0
};
/*************Music4: Three wheel******************/
uchar code SOUNDLONG4[]=
{
 	_8,_8,_8d,_16,
 	_8,_8,_4,
 	_8,_8,_8,_8,
 	_8,_8,_4,

 	_8,_8,_8d,_16,
 	_8,_8,_8d,_16,
 	_8,_16,_16,_8,_16,_16,
 	_8,_8,_4,
	0
};
uint code SOUNDTONE4[]=
{
	_DO,_DO,_RE,_MI,
	_SO,_SO,_MI,
	_SO,_SO,_LA,_TI,
	_DO1,_DO1,_SO,
	_DO1,_DO1,_LA,_SO,
	_MI,_LA,_SO,_MI,
	_DO,_RE,_MI,_SO,_LA,_SO,
	_MI,_RE,_DO,
	0
};
/**************彩虹妹妹**********************/
uchar code SOUNDLONG5[]=
{
 	_4,_8,_8,_4,_8,_8,
 	_8,_4,_8,_2,
 	_4,_8,_8,_4,_8,_8,
 	_8,_4,_8,_2,
 	_4,_8,_8,_8,_8,_8,_8,
 	_8,_4,_8,_2,
 	_4,_4,_4,_8,_8,
 	_8,_4,_8,_2,
	0
};
uint code SOUNDTONE5[]=
{
	_LA,_SO,_MI,_LA,_SO,_MI,
	_LA,_LA,_SO,_LA,
	_LA,_SO,_MI,_LA,_SO,_MI,
	_RE,_RE,_DO,_RE,
	_MI,_MI,_SO,_LA,_DO1,_LA,_SO,
	_MI,_MI,_SO,_DO,
	_MI,_MI,_MI,_MI,_MI,
	_1LA,_1LA,_1SO,_1LA,
	0
};



/*************************************************
*	函数名称:void T2Init(void)
*	创建日期:2005.6.17
*	功能描述:定时器T2初始化
*	入口参数:uT2Reg:定时器初值
*	返回值: 	无
*	修改日志:
*************************************************/
void T2Init(uint uT2Reg)
{
	CP_RL2=0;	//16位自动重载
	T2MOD=0x00;  //计数增加,外部捕获禁止
	RCLK=0;
	TCLK=0;
	TL2=RCAP2L=uT2Reg&0x00ff;
	TH2=RCAP2H=uT2Reg>>8;
	TR2=1;            // 启动定时器
	ET2=1;		//t2开中断
	EA=1;
}
/*************************************************
*	函数名称:void MusicPlay(uchar ucSL[],uint uST[])
*	创建日期:2005.7.12
*	功能描述:播放某首音乐的函数
*	入口参数:ucSL[]:音节长度的数组;uST[]:音乐频率的数组
*	返回值: 	无
*	修改日志:
*************************************************/
void MusicPlay(uchar ucSL[],uint uST[])
{
	uchar i=0;
	//float fTmp=0;
	while((ucSL[i]!=0)||(uST[i]!=0))
	{
		//fTmp=(float)11059/(float)12000;
		T2Init(0xffff-uST[i]*((float)11059/(float)12000));		//11。0592M的晶体
		g_ucSoundLongCNT=((MODERATO*ucSL[i]*1000L)/8)/uST[i];
		while(g_ucSoundLongCNT!=0);		//等待计数器为0
		TR2=0;			//暂时关闭定时器
		i++;
	}
}
/*************************************************
*	函数名称:void EnjoyMusic(uchar ucNO,bit bOffMusic,bit bSigleFl)
*	创建日期:2005.6.28
*	功能描述:音乐播放的函数
*	入口参数:ucNO:要播放的曲目序号。
*	返回值:  	无      
*	修改日志:
*************************************************/
void EnjoyMusic(uchar ucNO)
{
	switch(ucNO)
	{
		/*******第1首音乐**********/
		case 0:
		{
			MusicPlay(SOUNDLONG1,SOUNDTONE1);	//播放音乐1
			break;	
		}
		/*******第2首音乐**********/
		case 1:
		{
			MusicPlay(SOUNDLONG2,SOUNDTONE2);	//播放音乐2
			break;	
		}
		/*******第3首音乐**********/
		case 2:
		{
			MusicPlay(SOUNDLONG3,SOUNDTONE3);	//播放音乐3
			break;	
		}
		/*******第4首音乐**********/
		case 3:
		{
			MusicPlay(SOUNDLONG4,SOUNDTONE4);	//播放音乐4
			break;	
		}
		/*******第5首音乐**********/
		case 4:
		{
			MusicPlay(SOUNDLONG5,SOUNDTONE5);	//播放音乐5
			break;	
		}
		default:
			break;
	}
}

/*************************************************
*	函数名称:void T2Init(void)
*	创建日期:2005.7.11
*	功能描述:用于音乐的音调半周期定时
*	入口参数:无
*	返回值: 	无
*	修改日志:
*************************************************/
void T2ISR(void) interrupt 5 using 1
{
	TF2=0;				//手动清除溢出标志
	if(g_ucSoundLongCNT!=0)
	{
		g_ucSoundLongCNT--;
	}
	BUZZER=~BUZZER;
}

⌨️ 快捷键说明

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