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

📄 beepnew.h

📁 单片机系统开发实例
💻 H
字号:
/*********************************************
*函数功能:发出特定频率、特定音长的声音
*函数参数:频率(Hz)、长度(ms)
*函数名:beep
***********************************************/
void beep(WORD frequency, int length) reentrant
{
	WORD init,downtime, uptime;		//
	flag=1;		//标志
	
	TMOD=1;		//设置定时器0
	times=(int)(((float)(frequency))*((float)length/1000.0));//设置循环周期,也即设置音长的参数
	init=65536-11059200/12/frequency;	//计算指定频率的计数初始值,此参数需经过下面调整
	downtime=volume ;//下降沿宽度调此参数,越大越宽,音量越大
	uptime=init+(WORD)downtime+35;		//计算上升沿宽度定时器参数,+35是程序语句耗时补偿值
	downtime=65536-downtime;			//计算下降沿宽度定时器参数
	if(frequency==10000)				//考虑到一般乐曲10000Hz以上不会出现,故把10000Hz当休止符
	{
		rest=1;							//休止符标记
	}
	else{rest=0;}
	uptimeth0=(BYTE)(uptime>>8);		//给定时器赋初始值做准备
	uptimetl0=(BYTE)(uptime&0x00FF);	
	downtimeth0=(BYTE)(downtime>>8);
	downtimetl0=(BYTE)(downtime&0x00FF);
	TH0=uptimeth0;//第一此赋初始值
	TL0=uptimetl0;
	ET0=1;//开中断
	EA=1;
	TR0=1;//开始计时
	while(times);//等待周期循环结束,也就是等待指定音长的时间
	
	
} 
/*********************************************
*函数功能:播放一首乐曲
*函数参数:乐谱数组、音长数组、数组长度
*函数名:playmusic
***********************************************/
void playmusic(WORD code *note, WORD code *len, int l) reentrant{	
	
	int count;
	EX1=0;
	cancelkeyflag=0;
	playing=1;
	for(count=0;count<l;count++)
	{
		beep(note[count],len[count]); 
		if(cancelkeyflag)
			break;		
	}
	cancelkeyflag=0;
	playing=0;
	EX1=1;  	
} 
/****************************************************************
*函数功能:定时器0中断函数,配合beep函数发出特定频率、特定音长的声音
*函数名:timer0
******************************************************************/

void timer0(void) interrupt 1 using 1
{
	flag=!flag;	        //flag=1,高电平;flag=0,低电平
	if(times==0)		//周期循环结束返回
	{
		ET0=0;
		TR0=0;
		P1|=0x01;
		
		return;
	}
	if(!flag)			//如果当前是高电平,赋低电平时间值,并置输出为低电平
	{
		TH0=downtimeth0;
		TL0=downtimetl0;
		if(!rest)
			P1&=0xFE;
		
	}
	else				//如果当前是低电平,赋高电平时间值,并置输出为高电平,周期循环数减一
	{
		
		TH0=uptimeth0;
		TL0=uptimetl0;
		P1|=0x01;
		times--;
	}
}



⌨️ 快捷键说明

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