㈠ 怎麼使用單片機控制蜂鳴器發聲
蜂鳴器有兩種,一種是無源的,另一種為有源的,確認的方法為:1)看封裝,如果引腳端為PCB板的,一般為無源的,引腳端為樹脂灌封的,一般為有源的。2)加電實驗,用5V電壓點擊接觸引腳時,只有「噠噠」聲的為無源的,發出一個單音響的為有源的。
兩種蜂鳴器用單片機的控制方法是一樣的,對於無源的,要求單片機送出一組斷續的音頻信號,使蜂鳴器按要求發聲,對於有源蜂鳴器,要求單片機送出一組斷續的電脈沖信號,用於分斷蜂鳴器的通斷狀態,而使有源蜂鳴器發出「嘀...嘀」,「嘀...嘀...嘀」等希望的聲音。
無源蜂鳴器舉例:
/**********************************************************************/
//聲響驅動程序 BELL--整點報時(鬧鍾音兩短一長)
/**********************************************************************/
void Beep(void)
{
uint a;//定義變數用於發聲的長度設置
uchar b;
for(b=2;b>0;b--){
for(a=200;a>0;a--){//第一個聲音的長度
beep = ~beep;//取反揚聲器驅動口,以產生音頻
Delay_1us(500);//音調設置延時
}
DelayM(1000);
}
for(a=1000;a>0;a--){//第一個聲音的長度
beep = ~beep;//取反揚聲器驅動口,以產生音頻
Delay_1us(500);//音調設置延時
}
beep = 1;//音樂結束後揚聲器關閉
}
有源蜂鳴器舉例:
void main(void)
{
NB=0;//有源蜂鳴器初始不送電
while(1)
{
NB=0;//有源蜂鳴器斷電
delay(300);//停一段時間
NB=1;//有源蜂鳴器送電
delay(1000);//響一段時間
}
}
㈡ 51單片機之蜂鳴器
蜂鳴器是一種一體化結構的電子訊響器,採用直流電壓供電,廣泛應用於計算機、列印機、復印機、報警器、電子玩具、汽車電子設備、電話機、定時器等電子產品中作發聲器件。我們開發板上常用的蜂鳴器就是常常說的交流蜂鳴器或直流蜂鳴器(自激式蜂鳴器)。 直流蜂鳴器是給一定的驅動直流電壓就會響。而交流蜂鳴器是需要給蜂鳴器一個脈沖才會響。常見的有PWM波控制蜂鳴器的頻率。脈沖就是高低電平的切換,如下圖:一個方波脈沖
我們用單片機的IO口實現一種這樣高低電平的方波,驅動蜂鳴器發音。我們板子上配的就是交流蜂鳴器。
接下來我們看一下蜂鳴器的硬體電路:
蜂鳴器通過三極體驅動。我們利用杜邦線將蜂鳴器的一端J8連接到板子上P1.5管腳上。
示常式序:
#include "reg52.h"
#include "intrins.h"
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit beep = P1^5;
void delay(uint16 i)
{
while(i--);
}
void main()
{
while(1)
{
beep = ~beep;
delay(10);
}
}
該程序實現蜂鳴器的響和停,程序較為簡單,可以在此基礎上進行擴展。
㈢ 無源蜂鳴器需要2K-5K方波驅動才能發聲,那麼,我該如何設計一款低成本的無源蜂鳴器驅動電路呢
為了節約成本,必須和有源蜂鳴器一樣有一個振盪電路,而有源蜂鳴器主要使用LC振盪電路(即用電感L、電容C組成選頻網路的振盪電路)。若實際搭建此電路,電感參數比較難以控制,而且成本較高。此時,自然會想到簡易的由三極體組成的RC振盪電路。
㈣ 關於單片機蜂鳴器外圍電路的工作原理的問題
1.當單片機的p1.7腳為低電平時,三極體Q1飽和導通,蜂鳴器通電鳴響。若單片機的p1.7腳為高電平時,三極體Q1截止,蜂鳴器沒有電流就不鳴響。
2.那個電阻是限流電阻。限制流入單片機的電流。
㈤ 關於單片機的蜂鳴器
蜂鳴器有直流定壓式的,給電就響。如果是這種蜂鳴器,你給的開關頻率快,使蜂鳴器不能正常發聲。
作電子琴的話不能用這種發聲器。應該用揚聲器,音箱上用的,只是功率小些0.8-3W的。
㈥ 單片機蜂鳴器請教大神
#include <reg51.h>
sbit k=P1^1;
sbit beep=P1^5;
#define uint unsigned int
#define uchar unsigned char
void delayms(xms)
{
uint m,n;
for(m=xms;m>0;m--)
for(n=110;n>0;n--);
}
void T0_int() interrupt 1
{
uint i;
TH0=(65536-dls/256;
TL0=(65536-dls)%256;
beep=~beep;
}
void main()
{
uint dls=500;
TMOD=0x01;
TH0=(65536-dls)/256;
TL0=(65536-dls)%256;
TR0=0;
EA=1;
ET0=1;
while(1)
{
TR0=0;
while(k==0)
{
TR0=1;
dls=500;
delay(100);
dls=1000;
delay(200);
}
}
}
}
㈦ 簡易單片機蜂鳴器驅動電路
不會防止單片機IO輸出的電壓被拉低,只能起到保護三極體的作用。因為蜂鳴器是感性負載,在三極體關閉瞬間,會產生反向高壓,電容在這里會吸收這個高壓。
㈧ 單片機蜂鳴器
1、單片機與蜂鳴器連接圖已附.
2、通常P1、P2、P3口都可以用來作為控制,P0口也可以,但因其內部無上拉電阻,所以外接時,應接一1K的上拉電阻,其他一樣。有源蜂鳴器驅動電路設計,無須外加驅動電路。
3、C語言編程為:
#include<reg51.h>//頭文件
sbit d1=P1^2;//位定義,把P1口的P1.2位設為驅動口,當然其它口也可。
void main()//主函數
{
d1=0//單片機默認狀態為1,不用初始化了,此處直接賦值0則可驅動
};
此為最最簡單的電路程序設計。下載後,蜂鳴器一會一直處於鳴叫狀態。
你可以加一個延時函數,再把d1口置高,可讓它,叫一下關閉。也可以加個while(1)大循環,讓它「滴、滴」不停地叫。還可以設置一個按鍵,按一個亮一下。
隨程序的變化,現象也會各不同。
㈨ 單片機驅動蜂鳴器電路
單片機驅動蜂鳴器電路如下:
蜂鳴器經常用於電腦、列印機、萬用表這些設備上做提示音,提示音一般也很簡單,就是簡單發出個聲音就行,我們用程序簡單做了個 4KHZ 頻率下的發聲和 1KHZ 頻率下的發聲程序代碼如下:
#include
sbit BUZZ = P1^6; //蜂鳴器控制引腳
unsigned char T0RH = 0; //T0 重載值的高位元組
unsigned char T0RL = 0; //T0 重載值的低位元組
voidOpenBuzz(unsigned int frequ);
void StopBuzz();
void main(){
unsigned int i;
TMOD = 0x01; //配置 T0 工作在模式 1,但先不啟動
EA = 1;
while(1){ //使能全局中斷
OpenBuzz(4000); //以 4KHz 的頻率啟動蜂鳴器
for (i=0; i<40000; i++);
StopBuzz(); //停止蜂鳴器
for (i=0; i<40000; i++);
OpenBuzz(1000); //以 1KHz 的頻率啟動蜂鳴器
for (i=0; i<40000; i++);
StopBuzz(); //停止蜂鳴器
for (i=0; i<40000; i++);
}
}
/* 蜂鳴器啟動函數,frequ-工作頻率 */
void OpenBuzz(unsigned int frequ){
unsigned int reload;//計算所需的定時器重載值
reload = 65536 - (11059200/12)/(frequ*2); //由給定頻率計算定時器重載值
T0RH = (unsigned char)(reload >> 8); //16 位重載值分解為高低兩個位元組
T0RL = (unsigned char)reload;
TH0 = 0xFF; //設定一個接近溢出的初值,以使定時器馬上投入工作
TL0 = 0xFE;
ET0 = 1; //使能 T0 中斷
TR0 = 1; //啟動 T0
}
/* 蜂鳴器停止函數 */
void StopBuzz(){
ET0 = 0; //禁用 T0 中斷
TR0 = 0; //停止 T0
}
/* T0 中斷服務函數,用於控制蜂鳴器發聲 */
void InterruptTimer0()interrupt1{
TH0 = T0RH; //重新載入重載值
TL0 = T0RL;
BUZZ = ~BUZZ; //反轉蜂鳴器控制電平
}
㈩ 51單片機的蜂鳴器問題
#include<reg51.h>
sbit beep = P1^7;
char sss;
bit bbb;
//*****************************
void sleep(int ms) //延時
{
int i;
for(;ms > 0; ms--) for(i = 0; i < 124; i++);
}
//******************************
void init() //初始化定時器0
{
TMOD = 0x01;
TH0 = (65535 - 50000) / 256;
TL0 = (65535 - 50000) % 256;
TR0 = 1;
ET0 = 1;
EA = 1;
}
//*******************************
void main()
{
char i;
init(); // 中斷
while(1) {
if (bbb) { //蜂鳴器發出多.
bbb = 0;
for (i = 0; i < 124; i++) {
beep = ~beep;
sleep(1);
}
}
}
}
//********************************
void TIMER0() interrupt 1
{
TH0 = (65535 - 50000) / 256;
TL0 = (65535 - 50000) % 256;
sss++;
if (sss == 20) {
sss = 0;
bbb = 1;
}
}
//********************************