当前位置:首页 > 51单片机 > 正文内容

利用9012三极管提单片机高蜂鸣器音量

以为利用三极管的电流放大作用,给蜂鸣器供应电流,提高音乐音量,是一件很容易的事。没有想到,怎么都不发出声音,经过群友热心交流和自己的不断试验,终于解决。原因究竟在哪里?让我慢慢道来。
(一)首先怀疑三极管放大电流问题:
百度三极管接蜂鸣器的电路图,网上的图片太多了。手中只有1K、100欧电阻、9012PNP三极管,按网上连了一个还是没有声音;

1583920696395.JPGX


(二)怀疑电阻值不对,电路没有工作啊放大状态,用仿真电路实验;为了便于观察,接入了电流表显示;
蜂鸣器仿真时有有源的BUZZER和无源的SOUNDER、SPEAKER;不发声,有人讲电压不能用标记符,有人说只能用SPEAKER,还有人讲电路接翻了。
实践证明使用BUZZER不行;换SPEAKER就好了。上面的电路是可行的。
(三)怀疑程序不对,重新下载个蜂鸣器音乐程序,仿真正常,实际线路还是不能发出声音;
#include
sbit out=P3^0;
unsigned char n=0; //n为节拍常数变量
unsigned char code music_tab[] ={
0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,
0x20, 0x40, 0x1C , 0x1 0,
0x18, 0x10, 0x20 , 0x10,
0x1C, 0x10, 0x18 , 0x40,
0x1C, 0x20, 0x20 , 0x20,
0x1C, 0x20, 0x18 , 0x20,
0x20, 0x80, 0xFF , 0x20,
0x30, 0x1C, 0x10 , 0x18,
0x20, 0x15, 0x20 , 0x1C,
0x20, 0x20, 0x20 , 0x26,
0x40, 0x20, 0x20 , 0x2B,
0x20, 0x26, 0x20 , 0x20,
0x20, 0x30, 0x80 , 0xFF,
0x20, 0x20, 0x1C , 0x10,
0x18, 0x10, 0x20 , 0x20,
0x26, 0x20, 0x2B , 0x20,
0x30, 0x20, 0x2B , 0x40,
0x20, 0x20, 0x1C , 0x10,
0x18, 0x10, 0x20 , 0x20,
0x26, 0x20, 0x2B , 0x20,
0x30, 0x20, 0x2B , 0x40,
0x20, 0x30, 0x1C , 0x10,
0x18, 0x20, 0x15 , 0x20,
0x1C, 0x20, 0x20 , 0x20,
0x26, 0x40, 0x20 , 0x20,
0x2B, 0x20, 0x26 , 0x20,
0x20, 0x20, 0x30 , 0x80,
0x20, 0x30, 0x1C , 0x10,
0x20, 0x10, 0x1C , 0x10,
0x20, 0x20, 0x26 , 0x20,
0x2B, 0x20, 0x30 , 0x20,
0x2B, 0x40, 0x20 , 0x15,
0x1F, 0x05, 0x20 , 0x10,
0x1C, 0x10, 0x20 , 0x20,
0x26, 0x20, 0x2B , 0x20,
0x30, 0x20, 0x2B , 0x40,
0x20, 0x30, 0x1C , 0x10,
0x18, 0x20, 0x15 , 0x20,
0x1C, 0x20, 0x20 , 0x20,
0x26, 0x40, 0x20 , 0x20,
0x2B, 0x20, 0x26 , 0x20,
0x20, 0x20, 0x30 , 0x30,
0x20, 0x30, 0x1C , 0x10,
0x18, 0x40, 0x1C , 0x20,
0x20, 0x20, 0x26 , 0x40,
0x13, 0x60, 0x18 , 0x20,
0x15, 0x40, 0x13 , 0x40,
0x18, 0x80, 0x00
};
void int0() interrupt 1 //采用中断0 控制节拍
{ TH0=0xd8;
TL0=0xef;
n--;
}
void delay (unsigned char m) //控制频率延时
{
unsigned i=3*m;
while(--i);
}
void delayms(unsigned char a) //豪秒延时子程序
{
while(--a); //采用while(--a) 不要采用while(a--); 各位可编译一下看看汇编结果就知道了!
}
void main()
{ unsigned char p,m; //m为频率常数变量
unsigned char i=0;
TMOD&=0x0f;
TMOD|=0x01;
TH0=0xd8;TL0=0xef;
IE=0x82;
play:
while(1)
{
a: p=music_tab[i];
if(p==0x00) { i=0, delayms(1000); goto play;} //如果碰到结束符,延时1秒,回到开始再来一遍
else if(p==0xff) { i=i+1;delayms(100),TR0=0; goto a;} //若碰到休止符,延时100ms,继续取下一音符
else {m=music_tab[i++], n=music_tab[i++];} //取频率常数 和 节拍常数
TR0=1; //开定时器1
while(n!=0) out=~out,delay(m); //等待节拍完成, 通过P1口输出音频(可多声道哦!)
TR0=0; //关定时器1
}
}
(四)再次根据仿真电路检测实际线路,怀疑三极管引脚接错了;网上查阅三极管用数字万用表如何判断;
S9012 (H.331)三极管测试
1 判断是NPN还是PNP型,数字万用表打到二极管档,使用红表笔接触任意引脚,再分别黑表笔接触其他两个引脚,如果数字超范围1,则红表笔一段是基极B,为NPN型;
2 判断E极和C极,档位打到hFE上,把三极管插万用表三极管测试孔上,管型和B极要准确。再翻一下,测试数据大的一次管脚是对的;
QQ群讨论,三极管没有问题;
(五)怀疑仿真使用的是AT89C51,实际是STC12C5204AD;怀疑P0口上拉电阻问题,换P3口;全实验到了,还是不行;怎么办?
(六)无奈之下想到实际电路电流情况如何?借助万用表,测量实际电路电流和电压值,忽然发现蜂鸣器处一导线电压异常,重新拔、插,蜂鸣器突然断续出声音;原来是面包板上一处导线接触不良。真是小问题,大麻烦,困扰一天的问题终于找到病因了,面包板接触不良。
(七)蜂鸣器声音大小调试:
1 更换电阻值,特别去掉蜂鸣器上的电阻,声音明显变大;也可以改变基极电阻,只要处于放大状态,提高输出电流,声音就会增加;
2 网友提出改变PWM也可以提高音量:测试如下根据音符DO对应的周期,计算一个半个周期时长大约2微秒,编程如下。改变延时数字会改变声音频率,不会改变声音大小;但是声音可能超出人耳朵辨别频率,听不到。PWM无效。
#include
sbit BUZZ=P3^0;//蜂鸣器连续的IO口
void delay1ms(unsigned char z) 

//延时1MS


unsigned int x,y;

for(x=z;x>0;x--)

for(y=112;y>0;y--);
}
void main(){
while(1){


BUZZ = 0;
delay1ms(2);

BUZZ=1;
delay1ms(2);
}
}
通过本实例,反思调试过程,希望给大家借鉴。


扫描二维码推送至手机访问。

版权声明:本文由智凡单片机c语言入门发布,如需转载请注明出处。

分享给朋友:

相关文章

STC单片机的编程与下载

STC单片机的编程与下载

       单片机与其它逻辑IC最大的不同之处就是能够按照用户意愿进行工作。然而其毕竟不是人脑,不能够理解人类的自然语言,这样就需要们按照其能够读懂的语言对其...

51单片机学习笔记——按键实验

51单片机学习笔记——按键实验

一.独立按键实验1.电路原理图2.说明:使用排线连接JP10的和JP12,JP8连接JP5。本实验通过八个独立按键控制八个LED小灯。按键时会抖动,所以要消抖。3.消抖检测先给按键对应的I/O口置1;...

51单片机简单串口功能

51单片机简单串口功能

最近实现了用LabVIEW作为上位机(以及下位机)与51单片机进行字符串的传输的功能,在此展示供大家学习参考。上位机部分:上位机能实现PC上面输入一个字符串,在单片机上能够接受到的功能。前提有两个,一...

STC单片机下载器的制作

STC单片机下载器的制作

       每一种单片机都有下载器,一般的均不集成下载电路,需要使用TTL电平进行下载,新的电脑往往不能够输出其所使用的电平信号。目前无论是笔记本还是台式机大...

开发环境搭建基于KEIL和PROTEUS7.8

开发环境搭建基于KEIL和PROTEUS7.8

学习好单片机怎能不会搭建开发环境呢?对于我这样的软文直接在各大搜索网站就会有教程,但是结合自己的经历和教训让我们道路会平坦一点。需要软件:1.KEIL基于C51版本百度网盘:链接: https://p...

51单片机用STC12即可够用,STC15针脚变了,没必要用STC15

51单片机用STC12即可够用,STC15针脚变了,没必要用STC15

以前用了几片STC12C5A60S2,挺好用的。与传统51单片机针脚兼容,程序也差不多,又可以直接串口下载程序,非常方便。最近以为STC15比较新型,于是买了STC15F2K60S2,结果焊板时才发现...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。