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

📄 51

📁 51单片机大量源码
💻
字号:
/*************************************************************
程序功能:51单片机演奏单音乐曲
硬件接法:P36控制交流蜂鸣器,发声频率等于P36的方波振荡频率
**************************************************************/
#include "REG52.H"   //包含所选单片机的定义头文件
sbit SPEAKER = P3^6;     //定义音乐输出口

typedef struct                  //定义音符结构
{	unsigned int mFreq;	//发声频率(对应的定时器初值)
	unsigned int mDelay;    //发声时值
}CNote;
unsigned char ReloadH;         //定义定时器T1重装值
unsigned char ReloadL;
/************************************************************
函数:T1_ISR()
功能:定时器T1中断服务函数,产生音乐振荡频率
*************************************************************/
void T1_ISR() interrupt 3
{	TR1 = 0;
	TH1 = ReloadH;
	TL1 = ReloadL;
	TR1 = 1;
	SPEAKER = !SPEAKER;  //音乐声频的半个波
}
/*************************************************************
函数:Delay()
功能:延时0.001~65.536s
参数:t>0时,延时(t*0.001)s
      t=0时,延时65.536s
*************************************************************/
void Delay(unsigned int t)
{	do
	{	TH0 = 0xFC;			//定时器赋初值,定时1ms
		TL0 = 0x66+17;
		TR0 = 1;			//启动定时器
		while ( !TF0 );		//等待定时器溢出
		TR0 = 0;			//关闭定时器
		TF0 = 0;			//清除溢出标志
	} while ( --t != 0 );	//循环t次
}
/***********************************************************
函数:Sound()
功能:演奏一个音符
参数:*note,音符指针,指向要演奏的音符
***********************************************************/
void Sound(CNote *note)
{            //利用定时器T1发出音符的频率
	if ( note->mFreq != 0 )
	{	ReloadH = (unsigned char)(note->mFreq >> 8);
		ReloadL = (unsigned char)(note->mFreq);
		TH1 = 0xFF;
		TL1 = 0xF0;
		TR1 = 1;
	}
	Delay(note->mDelay);   //发声延时
	TR1 = 0;               //停止发声
	TF1 = 0;
	SPEAKER = 1;
	Delay(5);       
}
/************************************************************
函数:Play()
功能:演奏一段乐曲
参数:music[],要演奏的乐曲
*************************************************************/
void Play(CNote music[])
{	unsigned int n = 0;
	for (;;)
	{	if ( music[n].mDelay == 0 ) break;
		Sound(&(music[n]));
		n++;
	}
}

#include "MusicTab.h"	//包含乐曲头文件
void main()     //主程序
{
	TMOD = 0x11;    //设定时器
	ET1 = 1;
	EA = 1;
	for (;;)
	{
          Play(MusicTab);	//演奏第一首乐曲
	  Delay(500);	        //等待数秒
          Play(MusicTab1);	//演奏第二首乐曲
	  Delay(500);	        //等待数秒,再循环播放

	}
}

⌨️ 快捷键说明

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