找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4526|回复: 17
收起左侧

有没有谁有51单片机,两个蜂鸣器的程序,一个晶振为12MHZ,另一个为11.0952MHZ

[复制链接]
ID:102056 发表于 2016-9-12 20:10 来自手机 | 显示全部楼层 |阅读模式
不知道为什么我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);
        }
}
回复

使用道具 举报

ID:97438 发表于 2016-9-12 23:19 来自手机 | 显示全部楼层
你用的是有源还是无源的蜂鸣器???这是重点!!!
回复

使用道具 举报

ID:139252 发表于 2016-9-13 00:13 | 显示全部楼层
蜂鸣器!
回复

使用道具 举报

ID:7485 发表于 2016-9-13 07:42 | 显示全部楼层
通电就会响的哪一种不能放音乐。

一个单片机只能同时接一个晶振。如果必须两个可以用跳线切换。
回复

使用道具 举报

ID:138155 发表于 2016-9-13 14:09 | 显示全部楼层
最好用12M的时序比较好控制 精确些 噪音要小很多如果做无源驱动的话 有源和无源蜂鸣器基本上都可以响
回复

使用道具 举报

ID:102056 发表于 2016-9-13 15:18 来自手机 | 显示全部楼层
luoluoluo136 发表于 2016-9-12 23:19
你用的是有源还是无源的蜂鸣器???这是重点!!!

无源蜂鸣器
回复

使用道具 举报

ID:102056 发表于 2016-9-13 15:29 来自手机 | 显示全部楼层
ahshmj 发表于 2016-9-13 07:42
通电就会响的哪一种不能放音乐。

一个单片机只能同时接一个晶振。如果必须两个可以用跳线切换。

该怎么做?我只知道蜂鸣器接口是P1.4
IMG_20160913_152440.jpg
回复

使用道具 举报

ID:102056 发表于 2016-9-13 15:47 来自手机 | 显示全部楼层
wuyibin2003 发表于 2016-9-13 14:09
最好用12M的时序比较好控制 精确些 噪音要小很多如果做无源驱动的话 有源和无源蜂鸣器基本上都可以响

我能看到的开发板上有两个晶振,一个在下载区12MHZ,另一个接在单片机11.0925MHZ,我下载的程序让蜂鸣器唱歌应该按照那个晶振写?上面主题就是我用开发板配套程序下载的,
回复

使用道具 举报

ID:97438 发表于 2016-9-13 16:48 | 显示全部楼层
king@ 发表于 2016-9-13 15:47
我能看到的开发板上有两个晶振,一个在下载区12MHZ,另一个接在单片机11.0925MHZ,我下载的程序让蜂鸣器 ...

你应该按照11.0592写程序。那个12Mhz的晶振是给Pl2303,也就是那个下载芯片用的。
回复

使用道具 举报

ID:102056 发表于 2016-9-13 16:56 来自手机 | 显示全部楼层
luoluoluo136 发表于 2016-9-13 16:48
你应该按照11.0592写程序。那个12Mhz的晶振是给Pl2303,也就是那个下载芯片用的。

程序就是按照11.0952的写的,为什么发出噪声,总体来说听不清楚响应的歌,程序该如何修改?
回复

使用道具 举报

ID:95165 发表于 2016-9-13 16:57 | 显示全部楼层
有可能与晶振有关!详细不太清楚。
回复

使用道具 举报

ID:139326 发表于 2016-9-13 17:17 | 显示全部楼层
蜂鸣器啊
回复

使用道具 举报

ID:97438 发表于 2016-9-13 17:24 来自手机 | 显示全部楼层
king@ 发表于 2016-9-13 16:56
程序就是按照11.0952的写的,为什么发出噪声,总体来说听不清楚响应的歌,程序该如何修改?

你要确定一下你的蜂鸣器是有源的还是无源的,接下来的再说
回复

使用道具 举报

ID:102056 发表于 2016-9-13 18:54 来自手机 | 显示全部楼层
luoluoluo136 发表于 2016-9-13 17:24
你要确定一下你的蜂鸣器是有源的还是无源的,接下来的再说

无源蜂鸣器
回复

使用道具 举报

ID:97438 发表于 2016-9-14 08:53 | 显示全部楼层
那就是程序问题了~看了下你的程序,问题出在这里
void PlayMusic(void)
{
        uInt16 i,j,k;
        i=0;
        j=0;
        k=0;
        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++;
        }
}
加上几句就好了额,局部变量没有初始化。
回复

使用道具 举报

ID:102056 发表于 2016-9-14 10:22 来自手机 | 显示全部楼层
luoluoluo136 发表于 2016-9-14 08:53
那就是程序问题了~看了下你的程序,问题出在这里
void PlayMusic(void)
{

试过改的程序,基本上没有什么变化。
回复

使用道具 举报

ID:97438 发表于 2016-9-14 14:23 | 显示全部楼层
king@ 发表于 2016-9-14 10:22
试过改的程序,基本上没有什么变化。

你用示波器或者逻辑分析仪看一下引脚是否有波形输出~另外,你用stc的单片机,可能要把输出引脚设置成强推挽输出~
回复

使用道具 举报

ID:7485 发表于 2016-9-14 14:39 | 显示全部楼层
单片机边上的那个是。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表