找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6080|回复: 48
打印 上一主题 下一主题
收起左侧

51单片机有源蜂鸣器不响求助 困扰我好几天了 附源程序

  [复制链接]
跳转到指定楼层
楼主
即将大二,有源蜂鸣器,用了三极管驱动,蜂鸣器一直不响,困扰我好几天了,求助!!!!
程序:
#include <at89x52.h>

//#define KEY1 P3_2
//#define KEY2 P3_3
//#define LED1 P3_4
//#define LED2 P3_5
//#define BEEP P1_7

sbit KEY1=P3^2;
sbit KEY2=P3^3;
sbit LED1=P3^4;
sbit LED2=P3^5;
sbit BEEP=P1^7;

void delay_nus(unsigned int i);
void delay_nms(unsigned int n);

void main()
{  bit flag=0;
   while(1)
   {
     if((KEY1==0)||(KEY2==0))
         {
           delay_nms(5);   
           if((KEY1==0)||(KEY2==0)){ flag=1; }
           else{ flag=0; }
         }
         else{ flag=0; }

         if(flag){LED1=0; LED2=0; BEEP=0;}
         else{LED1=1; LED2=1; BEEP=1;}
   }
}

void delay_nus(unsigned int i)  //f=11.0592MHz,延时:i>=12 ,i的最小延时单12 us
{
  i=i/10;
  while(--i);
}   

void delay_nms(unsigned int n)  //f=11.0592MHz,延时n ms
{
  n=n+1;
  while(--n)  
    delay_nus(900);         //延时 1ms,同时进行补偿
}
电路图和板子:





1.jpg (31.9 KB, 下载次数: 127)

1.jpg

IMG_2065.JPG (4.33 MB, 下载次数: 128)

IMG_2065.JPG
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

来自 43#
ID:964197 发表于 2021-9-6 12:59 | 只看该作者
结语
重新焊了一下蜂鸣器终于响了,最终原因是有源蜂鸣器正负极接反了,改过来后可以正常响了,说明I/O口和电路都是没问题的。这是本人第一次在这个论坛发问题,感觉学习氛围很好,感谢各位大佬的解答,我从中学到了许多今天开学第一天,终于解决了这个问题,很开心,再次感谢各位!!!
回复

使用道具 举报

来自 44#
ID:964197 发表于 2021-9-6 13:04 | 只看该作者
改正后:

回复

使用道具 举报

沙发
ID:964197 发表于 2021-9-5 17:11 | 只看该作者
回复

使用道具 举报

板凳
ID:964197 发表于 2021-9-5 17:15 | 只看该作者
我一按键两个LED灯都能亮,就是蜂鸣器不响
回复

使用道具 举报

地板
ID:624769 发表于 2021-9-5 17:30 | 只看该作者
JP8 的 2脚1脚 连通的话, R7 如果那个100 是 100R 的话, VCC 出来,通过集电极,到基极,最高可以有 5V / 100R = 50mA 电流, IO口直接就能烧掉。蜂鸣器就绝对不会响了。
回复

使用道具 举报

5#
ID:964197 发表于 2021-9-5 17:34 | 只看该作者
188610329 发表于 2021-9-5 17:30
JP8 的 2脚1脚 连通的话, R7 如果那个100 是 100R 的话, VCC 出来,通过集电极,到基极,最高可以有 5V / ...

那是不是要提高R7的阻值呀
回复

使用道具 举报

6#
ID:624769 发表于 2021-9-5 17:46 | 只看该作者
LittleBoss 发表于 2021-9-5 17:34
那是不是要提高R7的阻值呀

可能,这个IO已经烧掉了,你必须换一个脚了, 电阻至少要 470R 以上,安全起见最好1K
最后,你这个电路很有问题,一般单片机上,三极管开关,都是控制GND,很少控制VCC, 而且多用NPN(能确保关断) 很少用PNP(可能会关不掉),
回复

使用道具 举报

7#
ID:160500 发表于 2021-9-5 18:12 | 只看该作者
断开JP8,运行程序,用万用表检查IO口电压,按键看是否变化
回复

使用道具 举报

8#
ID:964090 发表于 2021-9-5 18:19 | 只看该作者
拿表测下 看下有没有电平
回复

使用道具 举报

9#
ID:68468 发表于 2021-9-5 19:11 | 只看该作者
这个问题首先要区分是软件还是硬件造成的,1、取出单片机芯片用一条导线直接短接P17到GND,看蜂鸣器是否能正常鸣响,如不能就是蜂鸣器坏或电阻R7R8坏了。2、插回单片机芯片,在程序中将P17与P35交换,即sbit LED2=P1^7;sbit BEEP=P3^5;重新编译后下载到芯片中试机,如果蜂鸣器响而LED2不亮,说明P17口损坏了,如果蜂鸣器不响而LED2亮,说明P17没坏。另外,按键要一直按着,否则时间太短,蜂鸣器响太短促也听不出来。
回复

使用道具 举报

10#
ID:964197 发表于 2021-9-5 19:28 | 只看该作者
188610329 发表于 2021-9-5 17:46
可能,这个IO已经烧掉了,你必须换一个脚了, 电阻至少要 470R 以上,安全起见最好1K
最后,你这个电路很 ...

我刚刚去学了一下三极管,导通的时候发射极和基极的电压最大不应该是0.7V,然后基极上的电流是7mA吗?(不知道我的理解对不对)
回复

使用道具 举报

11#
ID:964197 发表于 2021-9-5 19:34 | 只看该作者
wysh_2004 发表于 2021-9-5 19:11
这个问题首先要区分是软件还是硬件造成的,1、取出单片机芯片用一条导线直接短接P17到GND,看蜂鸣器是否能 ...

我用电池直接接过蜂鸣器,是可以响的,在程序里将P17与P35交换应该不可行吧,硬件已经决定P1^7和P3^5本来就是分别控制蜂鸣器和LED2的了
回复

使用道具 举报

12#
ID:964197 发表于 2021-9-5 19:42 | 只看该作者
按键只有LED1和LED2亮,蜂鸣器不响

IMG_2066.JPG (4.08 MB, 下载次数: 110)

IMG_2066.JPG
回复

使用道具 举报

13#
ID:964197 发表于 2021-9-5 20:18 | 只看该作者
用万用表测了R7 和 R8 的电阻都是100欧姆
回复

使用道具 举报

14#
ID:964197 发表于 2021-9-5 20:26 | 只看该作者
  1. void main()
  2. {  bit flag=0;
  3. LED1=0; LED2=0; BEEP=0;
  4.    while(1)
  5.    {
  6.   
  7.    }
  8. }
复制代码

主函数改成这样后在单片机上运行,两个LED灯均亮,用万用表测得蜂鸣器两端电压是3.3V左右
回复

使用道具 举报

15#
ID:964197 发表于 2021-9-5 20:42 | 只看该作者
LittleBoss 发表于 2021-9-5 20:26
主函数改成这样后在单片机上运行,两个LED灯均亮,用万用表测得蜂鸣器两端电压是3.3V左右

JP8接通,万用表短接JP8测得基极电流为0,短接蜂鸣器测得电流为47mA
回复

使用道具 举报

16#
ID:417092 发表于 2021-9-5 20:47 | 只看该作者

蜂鸣器到底是有源还是无源
回复

使用道具 举报

17#
ID:964197 发表于 2021-9-5 20:55 | 只看该作者
LittleBoss 发表于 2021-9-5 20:26
主函数改成这样后在单片机上运行,两个LED灯均亮,用万用表测得蜂鸣器两端电压是3.3V左右

测得基极和发射极间的电压为0.7V,发射极和集电极的电压为0
回复

使用道具 举报

18#
ID:964197 发表于 2021-9-5 20:55 | 只看该作者
ZMRGHY 发表于 2021-9-5 20:47
蜂鸣器到底是有源还是无源

是有源的呀
回复

使用道具 举报

19#
ID:624769 发表于 2021-9-5 21:01 | 只看该作者
LittleBoss 发表于 2021-9-5 20:26
主函数改成这样后在单片机上运行,两个LED灯均亮,用万用表测得蜂鸣器两端电压是3.3V左右

主函数这样,符合测试需要。
参考 15楼的 图,一般 单片机驱动蜂鸣器都应该这个样子。
确认一下 JP8 状态是否 闭合,
只要你是 有源蜂鸣器,应该能响。
回复

使用道具 举报

20#
ID:964197 发表于 2021-9-5 21:11 | 只看该作者
本帖最后由 LittleBoss 于 2021-9-5 21:26 编辑

到目前为止总结一下,希望大佬分析出问题出在哪:
1.蜂鸣器电池直接接上正负极可以响
2.R7和R8均为100欧姆,正常
3.焊接没问题,严格按照电路图焊接的
4.当主函数改成
void main()
{
LED1=0; LED2=0; BEEP=0;
while(1);
}
JP8打到ON
控制灯亮起,蜂鸣器响时,灯亮蜂鸣器不响
用万用电表测得以下数据
蜂鸣器两端电压是0V
三极管的发射极和基极的电压是0.7V
三极管的发射极和集电极的电压是0V
JP8的1和2间电压为0V
用万用表电流档红黑笔分别接JP8的2和1测得电0mA

如果还有什么需要测的就跟我说一下~


回复

使用道具 举报

21#
ID:964197 发表于 2021-9-5 21:17 | 只看该作者
本帖最后由 LittleBoss 于 2021-9-5 21:23 编辑
LittleBoss 发表于 2021-9-5 21:11
到目前为止总结一下,希望大佬分析出问题出在哪:
1.蜂鸣器电池直接接上正负极可以响
2.R7和R8均为100欧 ...
R7 R8两端电压分别1.3V 、0V
回复

使用道具 举报

22#
ID:624769 发表于 2021-9-5 21:28 | 只看该作者
LittleBoss 发表于 2021-9-5 21:11
到目前为止总结一下,希望大佬分析出问题出在哪:
1.蜂鸣器电池直接接上正负极可以响
2.R7和R8均为100欧 ...

你R7 为 100R   大多数单片机的IO,灌电流只能承受12MA 根本不可能把基极拉低到0。要么拉不低,要么烧IO.
回复

使用道具 举报

23#
ID:964197 发表于 2021-9-5 21:31 | 只看该作者
188610329 发表于 2021-9-5 21:28
你R7 为 100R   大多数单片机的IO,灌电流只能承受12MA 根本不可能把基极拉低到0。要么拉不低,要么烧IO.

我测了R7两端电压是1.3V,然后它的电流是13mA左右,现在我发现发射极与集电极间电压、蜂鸣器两端电压、R8两端电压都是0V,感觉是这三个里面哪里出了问题
回复

使用道具 举报

24#
ID:964197 发表于 2021-9-5 21:39 | 只看该作者
188610329 发表于 2021-9-5 21:28
你R7 为 100R   大多数单片机的IO,灌电流只能承受12MA 根本不可能把基极拉低到0。要么拉不低,要么烧IO.

奇怪了。。。我用万用电表电流档红黑表笔分别接基极和R7的靠近JP8的一端得到的电流值是0.3mA,和我用R7两端电压估算的1.3mA差了蛮远的。。。。
回复

使用道具 举报

25#
ID:417092 发表于 2021-9-5 21:40 | 只看该作者

把蜂鸣器从源极改到发射极。。。
去掉R8限流电阻。
R7换470欧,如果不响换成330欧,
回复

使用道具 举报

26#
ID:624769 发表于 2021-9-5 21:40 | 只看该作者
LittleBoss 发表于 2021-9-5 21:31
我测了R7两端电压是1.3V,然后它的电流是13mA左右,现在我发现发射极与集电极间电压、蜂鸣器两端电压、R8 ...

你直接飞线,把接P17这个地方接到GND 即手动代替 P17 拉低,看看响不响。就知道了。
回复

使用道具 举报

27#
ID:964197 发表于 2021-9-5 21:40 | 只看该作者
188610329 发表于 2021-9-5 21:28
你R7 为 100R   大多数单片机的IO,灌电流只能承受12MA 根本不可能把基极拉低到0。要么拉不低,要么烧IO.

更正一下,是0.3mA和13mA差了蛮远的
回复

使用道具 举报

28#
ID:624769 发表于 2021-9-5 21:56 | 只看该作者
LittleBoss 发表于 2021-9-5 21:40
更正一下,是0.3mA和13mA差了蛮远的

你 0.3MA 蜂鸣器响了么? 没响的话,这电流毫无意义。
回复

使用道具 举报

29#
ID:417092 发表于 2021-9-5 21:57 | 只看该作者
188610329 发表于 2021-9-5 21:40
你直接飞线,把接P17这个地方接到GND 即手动代替 P17 拉低,看看响不响。就知道了。

PNP三极管,b极对地电阻小于以c极电阻时,三极管不会导通。。
PNP使用时,c极直接,接地。。。。
回复

使用道具 举报

30#
ID:624769 发表于 2021-9-5 22:03 | 只看该作者
ZMRGHY 发表于 2021-9-5 21:57
PNP三极管,b极对地电阻小于以c极电阻时,三极管不会导通。。
PNP使用时,c极直接,接地。。。。

我不知道你想说什么, 他打算 P17 = 0,让蜂鸣器响,我告诉他不会响,让他把打算通过 P17 拉到 0 的地方手动接到 GND, 来代替 P17 = 0, 看看是不是会响, 有什么问题么?
回复

使用道具 举报

31#
ID:417092 发表于 2021-9-5 22:20 | 只看该作者
188610329 发表于 2021-9-5 22:03
我不知道你想说什么, 他打算 P17 = 0,让蜂鸣器响,我告诉他不会响,让他把打算通过 P17 拉到 0 的地方 ...

为什么,不直接说清原因呀
回复

使用道具 举报

32#
ID:624769 发表于 2021-9-5 22:32 | 只看该作者
ZMRGHY 发表于 2021-9-5 22:20
为什么,不直接说清原因呀

我前面很直接的说了一大堆原因了,你没看到么?
还有热心的15楼图都贴出来了,我也让他参考15楼的图了,你没看到?
他非要认死理,那么只能让他最简单的方法自己看到结果,然后再讲其他道理了。
回复

使用道具 举报

33#
ID:624769 发表于 2021-9-5 22:47 | 只看该作者
ZMRGHY 发表于 2021-9-5 22:20
为什么,不直接说清原因呀

抱歉, 可能刷新的问题,是 16楼帖的图, 贴图的人还是你。 其实我们俩 和他传递的是一个信息。所以,你没必要和我辩论。我在最开始 6楼 就跟他说要三极管控制GND ,而不是控制 VCC 电阻要换到 470R, 你在16楼也贴了图,他坚持不改,你有别的办法么?
回复

使用道具 举报

34#
ID:417092 发表于 2021-9-5 22:57 | 只看该作者
188610329 发表于 2021-9-5 22:32
我前面很直接的说了一大堆原因了,你没看到么?
还有热心的15楼图都贴出来了,我也让他参考15楼的图了 ...

抱歉,网络问题。延时太多。只看到了。。。我的楼层上一层,你说让他把基极接地。。。。
前面的真的没看到
回复

使用道具 举报

35#
ID:964197 发表于 2021-9-5 23:01 | 只看该作者
我刚刚给我师兄看了看板子他说我的蜂鸣器接反了,他的板子蜂鸣器没问题,我们用的是同一个电路,我打算重新接一下蜂鸣器试试
回复

使用道具 举报

36#
ID:964197 发表于 2021-9-5 23:15 | 只看该作者
明天去基地重新焊一下蜂鸣器试试
回复

使用道具 举报

37#
ID:417092 发表于 2021-9-5 23:53 | 只看该作者
LittleBoss 发表于 2021-9-5 23:15
明天去基地重新焊一下蜂鸣器试试

我在Proteus 仿真了一下。。仿真不出效果。。。。
需要知道,可以驱动蜂鸣器的最低电压,和蜂鸣器自身电阻。。。
你可以,测量一下驱动蜂鸣器的最低电压,和蜂鸣器自身电阻。
然后在Proteus 仿真了一下。。。
比自己计算电阻大小好用多了。。。。
使用Proteus 仿真可以,节省很少人工计算
回复

使用道具 举报

38#
ID:401564 发表于 2021-9-6 09:31 | 只看该作者
这是一个很简单的问题,真的,经常动手的人,很快就能找到问题
1,先把单片机蜂鸣器的IO设定成强推挽输出模式(数据手册上有,自己设定)
2,不要三极管,直接把这个输出IO连接到蜂鸣器,不用分正负,没必要
3,不要任何按键什么的,直接给这个IO输出一个1KHZ的方波,可以用定时器
4,蜂鸣器响了,电路和程序就对了,蜂鸣不响,硬件电路或者程序有问题
蜂鸣器会响的,声音是小点而已,不分正负的
回复

使用道具 举报

39#
ID:428114 发表于 2021-9-6 10:38 | 只看该作者
有源蜂鸣器是有极性的。
不响,接反的可能性极大。
回复

使用道具 举报

40#
ID:950946 发表于 2021-9-6 11:00 | 只看该作者
按理说不应该,你拿仪表测一下io口。看是不是坏了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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