不知道为什么我51开发板下载蜂鸣器的程序后,噪音挺大,完全听不出蜂鸣器发出的音乐。
/* ***************************************************** */
// 工 程 : 51单片机开发板
// 文件名 : main.c
// 处理器 : STC89C52RC
// 编译环境 : Keil4 C51
// 系统时钟 : 11.0592MHZ
// 版 本 : V1.0
// 生成日期 : 2014-02-25
// 修改日期 :
// 简单描述 : 本文件是模拟生日快乐歌曲的程序
/* ***************************************************** */
#include <reg52.h>
/* ***************************************************** */
// 宏定义
/* ***************************************************** */
#define uChar8 unsigned char
#define uInt16 unsigned int
/* ***************************************************** */
// 数组定义
/* ***************************************************** */
uChar8 code SONG_TONE[]=
{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,0};
//生日快乐歌节拍表,决定每个音符的间隔长度(停顿的时间)
uChar8 code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,9,
3,12,12,12,12,12,9,3,12,12,12,24,0};
//生日快乐歌节拍表,决定每个音符的演奏长短(工作的时间)
/* ***************************************************** */
// 位定义
/* ***************************************************** */
sbit BEEP = P1^4;
/* ***************************************************** */
// 函数名称:DelayMS()
// 函数功能:毫秒延时
// 入口参数:延时毫秒数(ValMS)
// 出口参数:无
/* ***************************************************** */
void DelayMS(uInt16 ValMS)
{
uInt16 uiVal,ujVal;
for(uiVal = 0; uiVal < ValMS; uiVal++)
for(ujVal = 0; ujVal < 113; ujVal++);
}
/* ***************************************************** */
// 函数名称:PlayMusic()
// 函数功能:播放音乐
// 入口参数:无
// 出口参数:无
/* ***************************************************** */
void PlayMusic(void)
{
uInt16 i,j,k;
while(SONG_LONG[i] != 0 || SONG_TONE[i] != 0)
{
for(j = 0; j < SONG_LONG[i] * 20; j++)
{
BEEP = ~ BEEP;
for(k = 0; k < SONG_TONE[i] / 3; k++);
}
DelayMS(5);
i++;
}
}
/* ***************************************************** */
// 函数名称:main()
// 函数功能:调用播放音乐程序
// 入口参数:无
// 出口参数:无
/* ***************************************************** */
void main()
{
while(1)
{
PlayMusic();
/* **** 稍作停留 **** */
DelayMS(1000);
}
} |