标题: 单片机蜂鸣器不响 [打印本页]

作者: 51xueze    时间: 2018-4-11 11:06
标题: 单片机蜂鸣器不响
单片机程序:
#include <reg52.h>
sbit beep=P3^6;
void main()
{
  beep=0;
}

収*O_20180411_110526.png (21.37 KB, 下载次数: 76)

収*O_20180411_110526.png

作者: 51xueze    时间: 2018-4-11 11:27
已经生成了hex文件,也已经把程序下载好烧录进去了
作者: STC89C51    时间: 2018-4-11 13:41
51xueze 发表于 2018-4-11 11:27
已经生成了hex文件,也已经把程序下载好烧录进去了

楼主确认下蜂鸣器类型,蜂鸣器有有源和无源之分,楼主恐怕是无源蜂鸣器。
作者: lu工程师    时间: 2018-4-11 13:51
你先测量一下p3.6是不是真的输出0。重点是区分有源蜂鸣器和无源蜂鸣器
作者: red_R    时间: 2018-4-12 22:23
***************************************************************************************/

#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
#include<intrins.h>                //因为要用到左右移函数,所以加入这个头文件

typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;

sbit beep=P1^5;          

/*******************************************************************************
* 函 数 名         : delay
* 函数功能                   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
        while(i--);       
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void main()
{       
        while(1)
        {       
                beep=~beep;
                delay(10); //延时大约100us   通过修改此延时时间达到不同的发声效果       
        }
}
作者: ssz666    时间: 2018-4-13 08:55
beep没有取反,不能使它震动
作者: 092414140zdy    时间: 2018-4-13 09:37
亲,从你发的电路图来看应该是高电平才会发声,如果还不发声,请检查三极管和蜂鸣器是否损坏
作者: 092414140zdy    时间: 2018-4-13 09:39
ssz666 发表于 2018-4-13 08:55
beep没有取反,不能使它震动

浅谈:从电路图看,你的蜂鸣器是高电平工作的,如果还不工作检查三极管和蜂鸣器是否损坏
作者: 092414140zdy    时间: 2018-4-13 09:40
浅谈,从电路图上看是高电平发声的
作者: jljlyzp    时间: 2018-4-13 11:06
楼主的蜂鸣器类型不对吧
作者: 阔爱的钊钊    时间: 2018-4-13 12:06
高电平。

作者: tian1994    时间: 2018-4-13 12:30
你把它输出高电平试试
作者: dianji1983    时间: 2018-4-13 13:26
P3.6为1时才会响吧
作者: suowangmo    时间: 2018-4-13 13:57
蜂鸣器是5V还是3.3V?楼主VCC可改成5V试一试
作者: gxk    时间: 2018-4-13 14:04
三极管是否导通
作者: ahshmj    时间: 2018-4-13 15:05
092414140zdy 发表于 2018-4-13 09:37
亲,从你发的电路图来看应该是高电平才会发声,如果还不发声,请检查三极管和蜂鸣器是否损坏

不是吧?低电平会响吧?
作者: 熊熊生风    时间: 2018-4-13 15:17
量一下就知道了。正常来说,如果是无源的话,你的频率高得耳朵听不见,一般蜂鸣器是1K等K级的频率,你的不精度延时,你得试到秒,之后再降下去。太快了。
注意低级错误 ,例如没有接电。IO口看错。如果有没有万用表,用LED+R试一下。有亮就有电。

作者: 熊熊生风    时间: 2018-4-13 15:19
/*******************************************************************************
* 函 数 名         : delay
* 函数功能                   : 延时函数,i=1时,大约延时10us <-------------------------这个地方大错特错
*******************************************************************************/
void delay(u16 i)
{
        while(i--);        
}

作者: hzcxq    时间: 2018-4-13 15:23
51xueze 发表于 2018-4-11 11:27
已经生成了hex文件,也已经把程序下载好烧录进去了

把beep取反就可以
作者: weidaolai    时间: 2018-4-13 15:29
遇到过这样的问题
作者: luxuan    时间: 2018-4-13 15:31
试试高电平
作者: 51xueze    时间: 2018-4-14 10:33
淘宝上买的,店家说是有源的
作者: 51xueze    时间: 2018-4-14 10:51
经试验,=1的时候,也不响
作者: 51xueze    时间: 2018-4-14 10:55
hzcxq 发表于 2018-4-13 15:23
把beep取反就可以

哇,真的响了,谢谢你,不过我还想知道是什么原理,我看单片机郭天祥51单片机教学视频里说的,直接让它=0就可以了,为什么我这里还有取反呢?
作者: 51xueze    时间: 2018-4-14 10:55
我在后面加了一句beep=~beep; 它就响了
作者: 微醺123    时间: 2018-4-14 11:27
改成 beep=~beep;试试
作者: tian11tian    时间: 2018-4-15 14:07
你运行时看看引脚的电平输入是否正确,如果正确就是蜂鸣器的问题了
作者: 1798618258    时间: 2018-4-15 21:17
蜂鸣器类型,引脚电压测量
作者: 1314250    时间: 2018-4-15 22:39
楼主你可以首先看一下你那蜂鸣器是有源还是无源的,如果是有源的你还需要外加电路,还有就是你蜂鸣器是高电平触发还是低电平触发,这都关系你蜂鸣器响不响的
作者: 1314250    时间: 2018-4-15 22:40
知道了吗
作者: 515652    时间: 2018-4-15 23:07
Q1坏了
作者: 51xueze    时间: 2018-4-16 08:42
1314250 发表于 2018-4-15 22:40
知道了吗

我怎么看它是有源还是无源呢?
作者: minmin609    时间: 2018-4-16 10:04
蜂鸣器高电平发声,或者有时还可以看看你的仪器坏了没
作者: 国Q    时间: 2018-4-16 10:20
可以试试延迟,把高点电平都输出看看就知道是程序问题还是硬件问题了,如果那样不响,那就是硬件上有问题了,再检查你的电路有没有真的连通了或者没有短路
作者: 冯工    时间: 2018-4-16 10:53
有源蜂鸣器你这样写没问题,但是无源蜂鸣器就有问题
作者: 51demo    时间: 2018-4-16 10:58
你这个是无源蜂鸣器   需要给一定方波才会响
作者: zichao    时间: 2018-4-16 11:04
有源和无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路
作者: Southpaw    时间: 2018-4-16 11:23
高电平发声,P0口需要上拉电阻
作者: sky5656556    时间: 2018-4-16 11:39
main里面增加while(1)语句,不行的话就改为脉冲去驱动看看
作者: husb2018    时间: 2018-4-16 11:43
beep=~beep;表明你用的蜂鸣器是无源的,有源蜂鸣器beep=0;就会一直响
作者: wmsh2018    时间: 2018-4-16 12:14
高电平
作者: jianchen221    时间: 2018-4-16 13:20
换个三极管试试 ,还有那个蜂鸣器有个本来就是不响的
作者: jianchen221    时间: 2018-4-16 13:21
你可以试试speaker  或者看看电压有没有给够
作者: 长得很正派    时间: 2018-4-16 13:30
程序里beep取反应该没问题了
作者: chinaliu    时间: 2018-4-16 13:35
高电平触发
作者: 42456565    时间: 2018-4-16 13:45
你这个是无源蜂鸣器
要来回取反才行
作者: daiyingqiang    时间: 2018-4-16 15:00
来个pwm脉冲试试
作者: gjn921    时间: 2018-4-16 15:25
单片机输出驱动蜂鸣器,还是单片机拉低然后电源驱动蜂鸣器了
作者: larou    时间: 2018-4-16 15:43
给高电平试试
作者: 13622983180    时间: 2018-4-16 16:36
可以试一下=
作者: 123哈哈    时间: 2018-4-16 16:39
用高频三极管  
作者: 308    时间: 2018-4-16 16:48
是不是有源蜂鸣器
作者: 092414140zdy    时间: 2018-5-9 08:42
husb2018 发表于 2018-4-16 11:43
beep=~beep;表明你用的蜂鸣器是无源的,有源蜂鸣器beep=0;就会一直响

回答的好
作者: Hobgoblin    时间: 2018-5-9 10:04
先确定有源还是无源,一个是高电平驱动的一个是低电平的
作者: fzhlpp    时间: 2018-5-9 10:14
说这个图是高电平使Q1导通的回去好好学习三极管原理......
作者: zzx51    时间: 2018-5-11 19:05
如果是无源蜂鸣器要写一个程序产生一个方波才能发声
作者: superbear    时间: 2019-5-8 09:11
你用的应该是无源蜂鸣器 它必须通过对beep取反才能获得一定频率的声音  如果你希望beep=0就可以一直响必须还要用有源的蜂鸣器
作者: hhsl    时间: 2019-5-8 10:18
是无缘蜂鸣器吧
作者: yunyunyun    时间: 2019-5-8 15:24
STC89C51 发表于 2018-4-11 13:41
楼主确认下蜂鸣器类型,蜂鸣器有有源和无源之分,楼主恐怕是无源蜂鸣器。

那就是蜂鸣器信号没对
作者: 哇哇叫    时间: 2019-5-8 16:34
应该是beep的问题,试试取反,这里面涉及了你的蜂鸣器时有源和无源的问题
作者: TIANYUS    时间: 2019-5-9 21:31
beep没有取反,已经产生错误了
作者: lnp    时间: 2019-5-9 21:49
注意蜂鸣器正负极,如果两引脚的高度不一样,长为正短为负。然后试试输出为高电平。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1