微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STC89C52单片机蜂鸣器唱歌实验

STC89C52单片机蜂鸣器唱歌实验

时间:11-21 来源:互联网 点击:

一次大概能延时55us
参数介绍:iDelay_Us:执行此延时函数的次数
iNumber1:第一个for语句所用的记录循环的变量
iNumber2:第二个for语句所用的记录循环的变量
返回值:
注意事项:无
////////////////////////////////////////////////////////////////////////
void DelayUs(unsigned int iDelay_Us)
{
uint iNumber1,iNumber2;
for(iNumber1=0;iNumber1 {
for(iNumber2=0;iNumber2<3;iNumber2++);
}
}
////////////////////////////////////////////////////////////////////////
函数名称:FMQ_PlaySong
函数功能:控制实验板上与蜂鸣器相连的引脚输出不同的频率的方波,依次来控制蜂鸣
器唱歌
参数介绍:cNumber:歌曲的选择,0代表“祝你平安”,‘1’代表“路边的野花不要采”
返回值:
注意事项:无
////////////////////////////////////////////////////////////////////////
void FMQ_PlaySong(unsigned char cNumber)
{
uchar cTemp1,cTemp2;
uint iAddr;
cCount = 0;//中断计数器清0
iAddr = cNumber * 217;//歌曲的地址,可以参看SONG[],你就会明白
while(1)
{ //把音码变量数组里的值赋给临时变量
cTemp1 = SONG[iAddr++];
if (cTemp1 == 0xFF) //休止符
{
TR0 = 0;
DelayUs(100); //延时
}
else if (cTemp1 == 0x00) //判断是否歌曲结束
{
return;
}
else
{
cTemp2 = SONG[iAddr++];//判断完,不是休止符与结束符后,让蜂鸣器唱歌
TR0 = 1; //让定时器0开始工作
while(1)
{
FMQ = ~FMQ; //让蜂鸣器不停地在开与关之间切换
DelayUs(cTemp1);
if(cTemp2 == cCount)
{
cCount = 0;
break;
}
}
}
}
}
////////////////////////////////////////////////////////////////////////
函数名称:main
函数功能:完成系统的初始化,让实验板上的蜂鸣器不停循环的唱上面的两首歌
参数介绍:无
返回值:
注意事项:无
////////////////////////////////////////////////////////////////////////
void main()
{
DelayUs(100); //稳定系统
Init_Time0();//定时器0中断初始化
while(1)
{
FMQ_PlaySong(0); //播放“祝你平安”
DelayUs(100); //延时一下,以便播放下一首歌
FMQ_PlaySong(1); //播放“祝你平安”
DelayUs(100); //延时一下,以便播放下一首歌
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top