1. 蜂鳴器種類
蜂鳴器分爲有源蜂鳴器和無源蜂鳴器: 判斷有源蜂鳴器和無源蜂鳴器可用萬用表電阻檔Rxl檔測試:用黑表筆接蜂鳴器“+”引腳,紅表筆在另一引腳上來回觸碰,如果觸發出咔咔聲且電阻只有8Ω(或16Ω)的是無源蜂鳴器,如果能發出持續聲音的,且電阻在幾百Ω以上的,是有源蜂鳴器。
這裏的源不是指電源,而是指震盪源。也就是說有源蜂鳴器內部帶震盪源。所以只要一通電就會叫。而無源內部不帶震盪源,所以如果用直流信號無法令其鳴叫,必須用2K~5K的方波去驅動。
2.單片機與蜂鳴器連接
原理圖:
由於單片機的電流驅動不了蜂鳴器,因此需要增加一個三極管進行電流放大,原理圖如下圖所示:
代碼:
//蜂鳴器
#include<reg51.h>
#include"delay.h"
#define on 0 //宏定義,低電平0爲開蜂鳴器
#define off 1
sbit speak=P2^3;
void main()
{
speak=on;
delay(500);
speak=off;
delay(500);
}
3.蜂鳴器與流水燈
在流水燈亮的同時,蜂鳴器響,即兩者同步,原理圖如下圖所示:
代碼
//流水燈報警
#include<reg51.h>
#include<intrins.h>
#include"delay.h"
sbit speak=P2^3;
#define on 0
#define off 1
void main()
{
P1 = 0xfe; //1111 1110
while(1)
{
delay(500);
P1 = _crol_(P1,1); //將P1循環左移一位
speak=on;
delay(500);
speak=off;
}
}
4.擴展 蜂鳴器演奏音樂
#include<reg51.h>
#include"delay.h"
#define uchar unsigned char
sbit speak =P2^3;
bit flag; //標誌音樂輸出腳電平的高低
uchar ptr=0x00;
uchar high;
uchar low;
uchar code music[]={
0xfc,0x44,0x7f, 0xfc,0x44,0x7f, 0xfc,0x44,0xff, 0xfa,0x68,0xff,
0xfd,0x23,0x7f, 0xfd,0x23,0x7f, 0xfd,0x23,0xff, 0xfc,0x44,0xff,
0xfc,0x44,0x7f, 0xfd,0x23,0x7f, 0xfd,0x82,0xff, 0xfd,0x82,0xff,
0xfd,0x23,0x7f, 0xfd,0x23,0x7f, 0xfc,0xac,0xff, 0xff,0xff,0xff,
0xfc,0xac,0x7f, 0xfd,0x23,0x7f, 0xfd,0x34,0xff, 0xfd,0x34,0xff,
0xfd,0x23,0x7f, 0xfc,0xac,0x7f, 0xfd,0x23,0xff, 0xfd,0x44,0xff,
0xfc,0x44,0x7f, 0xfd,0x23,0x7f, 0xfc,0xac,0xff, 0xfa,0x68,0xff,
0xfc,0x0c,0x7f, 0xfc,0xac,0x7f, 0xfc,0x44,0xff, 0xff,0xff,0xff,
0x00
}; //happy new year 歌曲
void Init(void); //函數聲明
void main()
{
uchar time;
Init();
TH0=high;
TL0=low;
while(1)
{
if(music[ptr]!=0xff&&music[ptr]!=0x00)
{
TR0=0;
speak=1;
delay(10);
high=music[ptr];
low= music[ptr+1];
time=music[ptr+2];
delay(time);
ptr+=3;
}
else if(music[ptr]==0xff)
{
time=music[ptr+2];
delay(time);
ptr+=3;
}
else
{
TR0=0;
speak=1;
delay(2000);
ptr=0;
}
}
}
void Count1(void) interrupt 1
{
TH0=high;
TL0=low;
if(flag==0)
{
speak=0;
flag=1;
}
else
{
speak=1;
flag=0;
}
}
void Init()
{
TMOD=0x01;
EA=1;
ET0=1;
}