單片機蜂鳴器的控制程序與驅動電路圖

2021-01-04 騰訊網

蜂鳴器從結構區分分為壓電式蜂鳴器和電磁式蜂鳴器。壓電式為壓電陶瓷片發音,電流比較小一些,電磁式蜂鳴器為線圈通電震動發音,體積比較小。

按照驅動方式分為有源蜂鳴器和無源蜂鳴器。這裡的有源和無源不是指電源,而是振蕩源。有源蜂鳴器內部帶了振蕩源,如圖1中所示,給了 BUZZ 引腳一個低電平,蜂鳴器就會直接響。而無源蜂鳴器內部是不帶振蕩源的,要讓他響必須給 500Hz~4.5KHz 之間的脈衝頻率信號來驅動它才會響。有源蜂鳴器往往比無源蜂鳴器貴一些,因為裡邊多了振蕩電路,驅動發音也簡單,靠電平就可以驅動,而無源蜂鳴器價格比較便宜,此外無源蜂鳴器聲音頻率可以控制,而音階與頻率又有確定的對應關係,因此就可以做出來「do re mi fa sol la si」的效果,可以用它製作出簡單的音樂曲目,比如生日歌、兩隻老虎等等。

圖1 蜂鳴器電路原理圖

我們來看一下圖1的電路,蜂鳴器電流依然相對較大,因此需要用三極體驅動,並且加了一個 100 歐的電阻作為限流電阻。此外還加了一個 D4 二極體,這個二極體叫做續流二極體。我們的蜂鳴器是感性器件,當三極體導通給蜂鳴器供電時,就會有導通電流流過蜂鳴器。而我們知道,電感的一個特點就是電流不能突變,導通時電流是逐漸加大的,這點沒有問題,但當關斷時,經「電源-三極體-蜂鳴器-地」這條迴路就截斷了,過不了任何電流了,那麼儲存的電流往哪兒去呢,就是經過這個 D4 和蜂鳴器自身的環路來消耗掉了,從而就避免了關斷時由於電感電流造成的反向衝擊。接續關斷時的電流,這就是續流二極體名稱的由來。

蜂鳴器經常用於電腦、印表機、萬用表這些設備上做提示音,提示音一般也很簡單,就是簡單發出個聲音就行,我們用程序簡單做了個 4KHZ 頻率下的發聲和 1KHZ 頻率下的發聲程序,同學們可以自己研究下程序,比較下實際效果。

#include

sbit BUZZ = P1^6; //蜂鳴器控制引腳

unsigned char T0RH = 0; //T0 重載值的高字節

unsigned char T0RL = 0; //T0 重載值的低字節

void OpenBuzz(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

StopBuzz(); //停止蜂鳴器

for (i=0; i

OpenBuzz(1000); //以 1KHz 的頻率啟動蜂鳴器

for (i=0; i

StopBuzz(); //停止蜂鳴器

for (i=0; i

}

}

/* 蜂鳴器啟動函數,frequ-工作頻率 */

void OpenBuzz(unsigned int frequ){

unsigned int reload;//計算所需的定時器重載值

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() interrupt 1{

TH0 = T0RH; //重新加載重載值

TL0 = T0RL;

BUZZ = ~BUZZ; //反轉蜂鳴器控制電平

}

另外用蜂鳴器來輸出音樂,僅僅是好玩而已,應用很少,裡邊包含了音階、樂譜的相關內容,程序也有一點複雜,所以就不詳細給大家去講解了。僅提供一個可以播放《兩隻老虎》的程序,大家可以下載到板子上玩玩,滿足一下好奇心。

純文本複製

#include

sbit BUZZ = P1^6; //蜂鳴器控制引腳

unsigned int code NoteFrequ[] = { //中音 1-7 和高音 1-7 對應頻率列表

523, 587, 659, 698, 784, 880, 988, //中音 1-7

1047, 1175, 1319, 1397, 1568, 1760, 1976 //高音 1-7

};

unsigned int code NoteReload[] = { //中音 1-7 和高音 1-7 對應的定時器重載值

};

bit enable = 1; //蜂鳴器發聲使能標誌

bit tmrflag = 0; //定時器中斷完成標誌

unsigned char T0RH = 0xFF; //T0 重載值的高字節

unsigned char T0RL = 0x00; //T0 重載值的低字節

void PlayTwoTiger();

void main(){

unsigned int i;

EA = 1; //使能全局中斷

TMOD = 0x01; //配置 T0 工作在模式 1

TH0 = T0RH;

TL0 = T0RL;

ET0 = 1; //使能 T0 中斷

TR0 = 1; //啟動 T0

while (1){

PlayTwoTiger(); //播放樂曲--兩支老虎

for (i=0; i

}

}

/* 兩支老虎樂曲播放函數 */

void PlayTwoTiger(){

unsigned char beat; //當前節拍索引

unsigned char note; //當前節拍對應的音符

unsigned int time = 0; //當前節拍計時

unsigned int beatTime = 0; //當前節拍總時間

unsigned int soundTime = 0; //當前節拍需發聲時間

//兩隻老虎音符表

unsigned char code TwoTigerNote[] = {

1, 2, 3, 1, 1, 2, 3, 1, 3, 4, 5, 3, 4, 5,

5,6, 5,4, 3, 1, 5,6, 5,4, 3, 1, 1, 5, 1, 1, 5, 1,

};

//兩隻老虎節拍表,4 表示一拍,1 就是 1/4 拍,8 就是 2 拍

unsigned char code TwoTigerBeat[] = {

4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 4, 8,

3,1, 3,1, 4, 4, 3,1, 3,1, 4, 4, 4, 4, 8, 4, 4, 8,

};

//用節拍索引作為循環變量

for (beat=0; beat

while (!tmrflag); //每次定時器中斷完成後,檢測並處理節拍

tmrflag = 0;

if (time == 0){ //當前節拍播完則啟動一個新節拍

note = TwoTigerNote[beat] - 1;

T0RH = NoteReload[note] >> 8;

T0RL = NoteReload[note];

//計算節拍總時間,右移 2 位相當於除 4,移位代替除法可以加快執行速度

beatTime = (TwoTigerBeat[beat] * NoteFrequ[note]) >> 2;

//計算發聲時間,為總時間的 0.75,移位原理同上

soundTime = beatTime - (beatTime >> 2);

enable = 1; //指示蜂鳴器開始發聲

time++;

}else{ //當前節拍未播完則處理當前節拍

//當前持續時間到達節拍總時間時歸零,

//並遞增節拍索引,以準備啟動新節拍

if (time >= beatTime){

time = 0;

beat++;

}else{ //當前持續時間未達到總時間時,

time++; //累加時間計數

//到達發聲時間後,指示關閉蜂鳴器,

//插入 0.25*總時間的靜音間隔,

if (time == soundTime){

enable = 0; //用以區分連續的兩個節拍

}

}

}

}

}

/* T0 中斷服務函數,用於控制蜂鳴器發聲 */

void InterruptTimer0() interrupt 1{

TH0 = T0RH; //重新加載重載值

TL0 = T0RL;

tmrflag = 1;

if (enable){ //使能時反轉蜂鳴器控制電平

BUZZ = ~BUZZ;

}else{ //未使能時關閉蜂鳴器

BUZZ = 1;

}

}

相關焦點

  • 單片機控制的密碼鎖設計(含電路圖及源程序)
    中斷服務程序只要實現三個狀態的計時,待機時需要計時5秒,密碼正確需要計時5s,密碼3次輸入錯誤需要計時15秒。當前處於何種計時,由主程序根據密碼判斷結果來決定。(2)選擇單片機型號和所需外圍器件型號,設計單片機硬體電路原理圖採用MCS51系列單片機At89S51作為主控制器,外圍電路器件包括數碼管驅動、蜂鳴器的輸出驅動、獨立式鍵盤以及發光二極體的輸出等。
  • 蜂鳴器驅動電路設計原理圖講解
    以下介紹的幾種蜂鳴器驅動電路是針對單片機I/O口的驅動電路,適用於現行的壓電式蜂鳴器。
  • 單片機驅動蜂鳴器C51程序
    uchar unsigned char#define uint unsigned intsbit k1=P1^4; //按鈕1sbit k2=P1^5; //按鈕2sbit beep=P3^7; //接蜂鳴器/*********************************************************本程序出自
  • 電路找茬:蜂鳴器驅動低級錯誤電路分析
    電路設計好之後,原理圖發給我檢查,然後我就發現了一個比較低級且容易犯的小錯誤,分享出來和大家一起分析一下。單片機驅動蜂鳴器電路如下圖所示。乍一看沒有什麼問題,但是仔細一分析問題就來了,用上圖所示的電路驅動蜂鳴器可能存在驅動電流不夠,從而導致蜂鳴器不響得現象。
  • 單片機基礎:燥起來吧,蜂鳴器
    導 讀蜂鳴器是電路設計中常用的器件,廣泛用於工業控制、機房監控、門禁、計算機等電子產品的預警發聲器件,驅動電路貌似很簡單,但隨意設計會引來蜂鳴器不發聲,輕微發聲或亂發聲等不良現象,本例來分享分享。二、單片機如何驅動無源電磁式蜂鳴器1、常見的一些電路圖1:典型的錯誤接法,當輸入端為高電平時,兩個電阻的分壓作用,NPN三極體基極電壓Vb = VCC x R2 / R1+R2 = 2.5V (VCC取5V),由於三極體的PN結壓降約0.6~0.7,射極電壓 Vc = Vb-0.7V = 2.5-0.7 = 1.8V ,這個電壓加在蜂鳴器上,因電壓太低
  • 51單片機玩轉物聯網基礎篇04-蜂鳴器
    前言上一節,我們完成了按鍵操作,本節我們學習使用蜂鳴器,首先我們介紹下蜂鳴器,然後完成實驗:上電後默認驅動頻率為5KHZ,通過KEY1控制驅動頻率為1KHZ ,蜂鳴器,KEY2控制驅動頻率為 2KHZ,可以聽到不同的效果。
  • 單片機小白學步(22) IO口:蜂鳴器的使用/三極體的工作原理
    前面我們說了,單片機IO口能通過的電流是有限的,過大的電流可能會燒壞管腳,或者不能正常工作。蜂鳴器和LED相比最主要的區別,就是蜂鳴器比LED需要的電流大很多,電壓一般也會高一些。為了讓單片機驅動蜂鳴器,也就是控制蜂鳴器工作,我們需要使用一些特別的電路。不知道大家是否了解繼電器,繼電器的特點就是用小電流低電壓,控制大電流高電壓電路。
  • 電子設計科普:一個簡單蜂鳴器驅動電路引發的討論
    上個月的時候接手了自己的第一個項目,由於是第一次真正做產品,害怕出錯,讓我大致審一下原理圖。我粗略看了一下還真發現一個問題。問題出在蜂鳴器的驅動電路上。蜂鳴器用的就是5V的有源電磁蜂鳴器,給電就響。在設計中配合按鍵和報警輸出使用。就是如下圖中的蜂鳴器。
  • 一個蜂鳴器的原理圖
    ===============================================================電路圖
  • 51單片機學習14-蜂鳴器驅動
    這篇驅動蜂鳴器,單片機IO口通過開關三極體來驅動蜂鳴器,這裡用PNP的三極體,常用SS8550。三極體b極電阻一般選用1K。仿真圖:程序:源程序:#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit
  • 單片機驅動蜂鳴器原理與設計
    蜂鳴器是一種一體化結構的電子訊響器,本文介紹如何用單片機驅動蜂鳴器,他廣泛應用於計算機、印表機、複印機、報警器、電話機等電子產品中作發聲器件。   蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。
  • 51單片機按鍵控制蜂鳴器啟停程序
    51單片機按鍵控制蜂鳴器啟停程序#include<reg52.h> #define uint unsigned int //宏定義sbit SPK=P3^5; //定義喇叭埠sbit key=
  • 51單片機驅動無源蜂鳴器
    流水燈的程序相對我個人來說比較簡單,但是蜂鳴器有些難度,正常給I/0口一個信號,蜂鳴器既然不響,後經查證是無源蜂鳴器;無源的蜂鳴器,就要通過IO口輸出振蕩信號來驅動蜂鳴器本文引用地址:http://www.eepw.com.cn/article/201612/324157.htm
  • 如何設計低成本蜂鳴器?
    圖1.1 無源蜂鳴器常規驅動電路如圖1所示,此圖為無源蜂鳴器的常規驅動電路。需要在輸入端輸入一定頻率PWM的信號才能使蜂鳴器發聲。為了解放PWM資源,實現簡單控制,必須如有源蜂鳴器一樣提供一個振蕩電路。
  • 單片機驅動數碼管設計詳解(74HC595實現)
    數碼管顯示設計本設計使用了一個4位的數碼管,為共陽型,為了節省單片機的IO口,使用了兩片74HC595作為數碼管的驅動晶片,共佔用3個IO口。2. 74HC595簡介74HC595是8位的移位寄存器,串入並出,並具有鎖存功能,被廣泛的用於數碼管、點陣的驅動電路中。
  • 蜂鳴器常見錯誤電路分析
    蜂鳴器是電路設計中常用的器件,廣泛用於工業控制、機房監控、門禁控制、計算機等電子產品,作為預警發聲器件。然而很多人在設計時往往隨意設計,導致實際電路中蜂鳴器不發聲、輕微發聲和亂發聲的情況發生。
  • 基於單片機的視力保護器設計
    3)畫電路原理圖。4)根據硬體電路及各晶片的時序編寫程序。5)將程序輸入單片機進行軟體測試,查找錯誤,使系統程序更加完善。6)根據電路原理圖及相應元器件的焊接方法焊接硬體電路。7)將程序寫進單片機進行硬體調試。
  • 如何有效編程單片機有源蜂鳴器驅動
    蜂鳴器是很常見的設備,分為無源和有源兩種。根據項目需求選擇不同類型的蜂鳴器。最近的項目裡有用到有源蜂鳴器對有源蜂鳴器。還是老一套,把電路板畫完,接著編程。在項目中原理圖如下:切入正題:在程序裡面這個蜂鳴器的驅動就是個高低電平驅動。高電平三極體導通、蜂鳴器發聲,低電平三極體關斷、蜂鳴器不發聲。這的確很簡單,程序上最開始我是這樣寫的:
  • 成本低、易於編程控制的DLP投影STM32單片機驅動電路研究設計
    打開APP 成本低、易於編程控制的DLP投影STM32單片機驅動電路研究設計 工程師黃明星 發表於 2018-07-27 07:04:00
  • 51單片機之4位數加法計算器的設計報告
    無源蜂鳴器內部不帶震蕩源,所以用直流信號無法令其鳴叫,必須用2K~5K的方波去驅動它。綜合考慮,為了程序控制的方便,選用了方案一。三 硬體電路設計3.1 計算器控制電路圖圖2 計算器控制線路圖3.2 矩陣式鍵盤的設計鍵盤電路如圖3所示。