/***************************************************************************************************
工程名称: bz_happy
功能描述: 控制蜂鸣器实现播放音乐"生日快乐"***************************************************************************************************/
#include<reg51.h> //包含头文件
sbit BZ=P0^0; //定义蜂鸣器控制管脚
#define uchar unsigned char
#define uint unsigned int
uchar code SOUNDLONG[25]= //"生日快乐"节拍
{
15,5,20,20,20,40,
15,5,20,20,20,40,
15,5,20,20,20,20,20,
15,5,20,20,20,40
};
uchar code SOUNDTONE[25]= //"生日快乐"音调
{
212,212,190,212,159,169,
212,212,190,212,142,159,
212,212,106,126,159,169,190,
119,119,126,159,142,159
};
//**************************************************************************************************
//延时函数
//**************************************************************************************************
delay(uint time) //int型数据为16位,所以最大值为65535
{
uint i,j; //定义变量i,j,用于循环语句
for(i=0;i<time;i++) //for循环,循环50*time次
for(j=0;j<50;j++); //for循环,循环50次
}
//**************************************************************************************************
//播放音调
//**************************************************************************************************
void Play_music()
{
uint Tone,Long; //定义音调变量
uint i,j,k; //定义
for(i=0;i<25;i++) //"生日快乐"的25种音调
{
Tone=SOUNDTONE[i]; //读取音调
Long=30*SOUNDLONG[i]; //读取节拍
for(j=0;j<Long;j++) //输出不同节拍
{
BZ=0; //关闭蜂鸣器
for(k=0;k<Tone;k++); //Tone的不同来区分7种音调
BZ=1; //打开蜂鸣器
for(k=0;k<Tone;k++); //Tone的不同来区分7种音调
}
}
}
//**************************************************************************************************
//主函数
//**************************************************************************************************
void main()
{
while(1)
{
Play_music(); //播放音乐
BZ=0; //关闭蜂鸣器
delay(10000); //关闭蜂鸣器时间
}
}
|