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

📄 main.c

📁 实验7 在RAM中执行程序代码 实验7 在RAM中执行程序代码 实验7 在RAM中执行程序代码
💻 C
字号:
/*******************************************************************************
程序名称:控制交流蜂鸣器演奏简单的乐曲
硬件接法:P1.2控制交流蜂鸣器,发声频率等于P1.2的方波振荡频率
运行效果:蜂鸣器演奏出动听的乐曲
*******************************************************************************/


#include <reg51.h>


//定义I/O接口
sbit BUZZER = P1^2;


//定义音符结构
typedef struct
{
	unsigned int mFreq;		//发声频率(对应的定时器初值)
	unsigned int mDelay;	//发声时值
}CNote;


//定义定时器T1重装值
unsigned char ReloadH;
unsigned char ReloadL;


/*******************************************************************************
函数:T1_ISR()
功能:定时器T1中断服务函数
*******************************************************************************/
void T1_ISR() interrupt 3
{
	TR1 = 0;
	TH1 = ReloadH;
	TL1 = ReloadL;
	TR1 = 1;
	BUZZER = !BUZZER;
}


/*******************************************************************************
函数: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;
	BUZZER = 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()
{
	unsigned char n;
	TMOD = 0x11;
	ET1 = 1;
	EA = 1;
	for (;;)
	{
		n = 3;
		do
		{
			Play(MusicTab);	//演奏乐曲
		} while ( --n != 0 );
		Delay(5000);	//等待5秒,再循环播放
	}
}

⌨️ 快捷键说明

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