国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

51單片機蜂鳴器

這篇具有很好參考價值的文章主要介紹了51單片機蜂鳴器。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

前言

一、蜂鳴器介紹

二、蜂鳴器的工作原理

三、示例代碼

總結(jié)


前言


? ? ? ? 這節(jié)來看點輕松的,51單片機的蜂鳴器。

51單片機蜂鳴器

一、蜂鳴器介紹


????????蜂鳴器是一種將電信號轉(zhuǎn)換為聲音信號的器件,常用來產(chǎn)生設(shè)備的按鍵音、報警音等。

????????蜂鳴器按驅(qū)動方式可分為有源蜂鳴器和無源蜂鳴器。

????????有源蜂鳴器:內(nèi)部自帶振蕩源,將正負極接上直流電壓即可持續(xù)發(fā)聲,頻率固定。

????????無源蜂鳴器:內(nèi)部不帶振蕩源,需要控制器提供振蕩脈沖才可發(fā)聲,調(diào)整提供振蕩脈沖的頻率,可發(fā)出不同頻率的聲音,通常是低電平觸發(fā),我們開發(fā)板上的蜂鳴器就是無源蜂鳴器。

? ? ?

二、蜂鳴器的工作原理


? ? ? ? 它的工作原理也很簡單,通過不斷反轉(zhuǎn)BEEP引腳的電平來發(fā)出聲音,而且隨著電平翻轉(zhuǎn)頻率的變化,它的音調(diào)也會變化,依據(jù)此原理可以用蜂鳴器來播放音樂。如果電平不變,那它是不響的,這就好比人敲鼓,把鼓錘放在鼓面上肯定是不會響的哈。

51單片機蜂鳴器

????????不過有源蜂鳴器接電就能響,是因為它內(nèi)部有固定的振蕩源,所以大多有源蜂鳴器音調(diào)也是固定的。我手頭剛好有一塊:

51單片機蜂鳴器

? ? ? ? 連好VCC和GND后,IO端檢測到低電平即可鳴叫。

三、示例代碼


? ? ? 第一個示例:按鍵提示音

#include <REGX52.H>
#include <Delay.H>                   //該Delay函數(shù)是1ms

//蜂鳴器端口:
sbit Buzzer=P1^5;                    //蜂鳴器引腳定義,看開發(fā)板原理圖上是幾就寫幾

void Buzzer_Time(unsigned int ms)    //傳入的參數(shù)為響的時間,單位ms
{
	unsigned int i;
	for(i=0;i<ms;i++)
	{
		Buzzer=!Buzzer;
		Delay(1);                    //該參數(shù)可以決定鳴叫的音調(diào)和時間
	}
}
void Delay(unsigned int xms)         //1ms的延時函數(shù)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}
#include <REGX52.H>
#include "Delay.h"
#include "Key.h"
#include "Nixie.h"
#include "Buzzer.h"
unsigned char KeyNum;
void main()
{
	Nixie(1,0);
	while(1)
	{
		KeyNum=Key();
		if(KeyNum)
		{
			Buzzer_Time(100);        //當按鍵按下時響100ms
			Nixie(1,KeyNum);         //同時數(shù)碼管顯示鍵值
		}
	}
}

第二個示例:播放音樂

? ? ? ? 在定時器中設(shè)置不同的初值以實現(xiàn)不同的頻率,蜂鳴器的音調(diào)也是不同的,需要看著譜子將每個節(jié)拍音調(diào)一一寫進數(shù)組,然后在循環(huán)中輸出到蜂鳴器。

? ? ? ? 這部分需要了解一些樂理知識哈,這是一首《天空之城》的代碼

#include <REGX52.H>
void Timer0Init(void);
void Delay(unsigned int xms);
//蜂鳴器端口定義
sbit Buzzer=P2^5;

//播放速度,值為四分音符的時長(ms)
#define SPEED	500

//音符與索引對應(yīng)表,P:休止符,L:低音,M:中音,H:高音,下劃線:升半音符號#
#define P	0
#define L1	1
#define L1_	2
#define L2	3
#define L2_	4
#define L3	5
#define L4	6
#define L4_	7
#define L5	8
#define L5_	9
#define L6	10
#define L6_	11
#define L7	12
#define M1	13
#define M1_	14
#define M2	15
#define M2_	16
#define M3	17
#define M4	18
#define M4_	19
#define M5	20
#define M5_	21
#define M6	22
#define M6_	23
#define M7	24
#define H1	25
#define H1_	26
#define H2	27
#define H2_	28
#define H3	29
#define H4	30
#define H4_	31
#define H5	32
#define H5_	33
#define H6	34
#define H6_	35
#define H7	36

//索引與頻率對照表
unsigned int FreqTable[]={
	0,
	63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,
	64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,
	65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283,
};

//樂譜
unsigned char code Music[]={
	//音符,時值,
	
	//1
	P,	4,
	P,	4,
	P,	4,
	M6,	2,
	M7,	2,
	
	H1,	4+2,
	M7,	2,
	H1,	4,
	H3,	4,
	
	M7,	4+4+4,
	M3,	2,
	M3,	2,
	
	//2
	M6,	4+2,
	M5,	2,
	M6, 4,
	H1,	4,
	
	M5,	4+4+4,
	M3,	4,
	
	M4,	4+2,
	M3,	2,
	M4,	4,
	H1,	4,
	
	//3
	M3,	4+4,
	P,	2,
	H1,	2,
	H1,	2,
	H1,	2,
	
	M7,	4+2,
	M4_,2,
	M4_,4,
	M7,	4,
	
	M7,	8,
	P,	4,
	M6,	2,
	M7,	2,
	
	//4
	H1,	4+2,
	M7,	2,
	H1,	4,
	H3,	4,
	
	M7,	4+4+4,
	M3,	2,
	M3,	2,
	
	M6,	4+2,
	M5,	2,
	M6, 4,
	H1,	4,
	
	//5
	M5,	4+4+4,
	M2,	2,
	M3,	2,
	
	M4,	4,
	H1,	2,
	M7,	2+2,
	H1,	2+4,
	
	H2,	2,
	H2,	2,
	H3,	2,
	H1,	2+4+4,
	
	//6
	H1,	2,
	M7,	2,
	M6,	2,
	M6,	2,
	M7,	4,
	M5_,4,
	
	
	M6,	4+4+4,
	H1,	2,
	H2,	2,
	
	H3,	4+2,
	H2,	2,
	H3,	4,
	H5,	4,
	
	//7
	H2,	4+4+4,
	M5,	2,
	M5,	2,
	
	H1,	4+2,
	M7,	2,
	H1,	4,
	H3,	4,
	
	H3,	4+4+4+4,
	
	//8
	M6,	2,
	M7,	2,
	H1,	4,
	M7,	4,
	H2,	2,
	H2,	2,
	
	H1,	4+2,
	M5,	2+4+4,
	
	H4,	4,
	H3,	4,
	H3,	4,
	H1,	4,
	
	//9
	H3,	4+4+4,
	H3,	4,
	
	H6,	4+4,
	H5,	4,
	H5,	4,
	
	H3,	2,
	H2,	2,
	H1,	4+4,
	P,	2,
	H1,	2,
	
	//10
	H2,	4,
	H1,	2,
	H2,	2,
	H2,	4,
	H5,	4,
	
	H3,	4+4+4,
	H3,	4,
	
	H6,	4+4,
	H5,	4+4,
	
	//11
	H3,	2,
	H2,	2,
	H1,	4+4,
	P,	2,
	H1,	2,
	
	H2,	4,
	H1,	2,
	H2,	2+4,
	M7,	4,
	
	M6,	4+4+4,
	P,	4,
	
	0xFF	//終止標志
};

unsigned char FreqSelect,MusicSelect;

void main()
{
	Timer0Init();
	while(1)
	{
		if(Music[MusicSelect]!=0xFF)	//如果不是停止標志位
		{
			FreqSelect=Music[MusicSelect];	//選擇音符對應(yīng)的頻率
			MusicSelect++;
			Delay(SPEED/4*Music[MusicSelect]);	//選擇音符對應(yīng)的時值
			MusicSelect++;
			TR0=0;
			Delay(5);	//音符間短暫停頓
			TR0=1;
		}
		else	//如果是停止標志位
		{
			TR0=0;
			while(1);
		}
	}
}


void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}



void Timer0Init(void)
{
	TMOD &= 0xF0;		//設(shè)置定時器模式
	TMOD |= 0x01;		//設(shè)置定時器模式
	TL0 = 0x18;		//設(shè)置定時初值
	TH0 = 0xFC;		//設(shè)置定時初值
	TF0 = 0;		//清除TF0標志
	TR0 = 1;		//定時器0開始計時
	ET0=1;
	EA=1;
	PT0=0;
}


void Timer0_Routine() interrupt 1
{
	if(FreqTable[FreqSelect])	//如果不是休止符
	{
		/*取對應(yīng)頻率值的重裝載值到定時器*/
		TL0 = FreqTable[FreqSelect]%256;		//設(shè)置定時初值
		TH0 = FreqTable[FreqSelect]/256;		//設(shè)置定時初值
		Buzzer=!Buzzer;	//翻轉(zhuǎn)蜂鳴器IO口
	}
}

????????欣賞下:

51單片機蜂鳴器

總結(jié)


? ? ? ? 主要了解蜂鳴器的分類和驅(qū)動原理就可以了。文章來源地址http://www.zghlxwxcb.cn/news/detail-492813.html

到了這里,關(guān)于51單片機蜂鳴器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 51單片機學(xué)習(xí)筆記-9蜂鳴器

    51單片機學(xué)習(xí)筆記-9蜂鳴器

    [toc] 注:筆記主要參考B站江科大自化協(xié)教學(xué)視頻“51單片機入門教程-2020版 程序全程純手打 從零開始入門”。 注:工程及代碼文件放在了本人的Github倉庫。 蜂鳴器 是一種將電信號轉(zhuǎn)換為聲音信號的器件,常用來產(chǎn)生設(shè)備的按鍵音、報警音等提示信號。蜂鳴器按驅(qū)動方式可分

    2024年02月06日
    瀏覽(22)
  • 【【51單片機蜂鳴器實現(xiàn)起風(fēng)了】】

    【【51單片機蜂鳴器實現(xiàn)起風(fēng)了】】

    前面的有兩個非常關(guān)鍵的點希望兄弟們明白 我一開始也失算了 這里兄弟們注意務(wù)必改成int 不然會超出 就會出現(xiàn)播放一半從頭開始的情況 下面是兩份起風(fēng)了代碼直接附上main.c 因為另外的其實和我之前說的模板都一樣復(fù)制粘貼就行 為什么是2份因為什么ABCD大調(diào)我不懂啊 我看樂

    2024年02月16日
    瀏覽(110)
  • 【【51單片機的蜂鳴器實現(xiàn)小星星】】

    【【51單片機的蜂鳴器實現(xiàn)小星星】】

    我們在設(shè)置板子的時候要翻轉(zhuǎn) 翻轉(zhuǎn)IO口是因為使用了步進電機的多余的芯片管腳 我們翻轉(zhuǎn)之后還想讓它保持一段時間 就是先翻轉(zhuǎn)500次 Delay(1)之后 就是最小的單位每隔1ms 周期就是2ms 頻率就是500HZ 蜂鳴器播放音樂 我們首先在前面到現(xiàn)在必須明白一個道理 就是我們的蜂鳴器發(fā)

    2024年02月16日
    瀏覽(20)
  • stm32單片機/51單片機蜂鳴器不響(proteus模擬)

    stm32單片機/51單片機蜂鳴器不響(proteus模擬)

    1提高蜂鳴器電阻,這樣根據(jù)分壓原理,可以提升蜂鳴器2段電壓 2更改蜂鳴器的工作電壓為更小的值,這個可以通過在proteus內(nèi)設(shè)置探針查看電壓值,更改為其值就可以了 我覺得如果不是仿真的話,蜂鳴器額定電壓是不能改的,如果電壓不夠的話好像就只能夠選用合適的三極管

    2024年02月11日
    瀏覽(20)
  • MCU-51:單片機蜂鳴器播放音樂和提示音

    MCU-51:單片機蜂鳴器播放音樂和提示音

    蜂鳴器是一種將電信號轉(zhuǎn)換為聲音信號的器件,常用來產(chǎn)生設(shè)備的按鍵音、報警音等提示信號 蜂鳴器按驅(qū)動方式可分為有源蜂鳴器和無源蜂鳴器 有源蜂鳴器:內(nèi)部自帶振蕩源,將正負極接上直流電壓即可持續(xù)發(fā)聲,頻率固定 無源蜂鳴器:內(nèi)部不帶振蕩源,需要控制器提供振

    2024年02月02日
    瀏覽(23)
  • 33、基于51單片機老人防跌倒蜂鳴器報警系統(tǒng)加速度檢測

    33、基于51單片機老人防跌倒蜂鳴器報警系統(tǒng)加速度檢測

    背景技術(shù) 老年人出門由于身體不靈活、視力較差,容易發(fā)生跌倒,現(xiàn)用的老年人跌倒報警裝置是通過無線對講系統(tǒng)研發(fā)的,它外觀精美,自動化程度高,有很強的專業(yè)性,但是,設(shè)計者忽略了一個問題,因為大多數(shù)老年人使用現(xiàn)代化產(chǎn)品不熟練,隨著視力、操作能力的下降,

    2023年04月08日
    瀏覽(22)
  • 【51單片機】:閃燈、流水燈(從左往右)、流水燈(從右往左)、蜂鳴器。

    【51單片機】:閃燈、流水燈(從左往右)、流水燈(從右往左)、蜂鳴器。

    ? ? ? ? 言歸正傳,一切都回歸本源,從51再來一次,首先就是最簡單的點燈大師。 ? ? ? ? 這么些年從51 到? 32? 再到? arduino? 再到? ESP? 等等,都是從點燈大師開始的。 于是介紹如下: 閃燈 流水燈(從左往右) 流水燈(從右往左) 蜂鳴器 ????????LED燈的原理:LED是發(fā)

    2024年02月11日
    瀏覽(26)
  • 基于51單片機的煙霧檢測+溫度檢測+蜂鳴器報警+光耦+風(fēng)扇+LCD4602液晶顯示(含原理圖/PCB/代碼)

    基于51單片機的煙霧檢測+溫度檢測+蜂鳴器報警+光耦+風(fēng)扇+LCD4602液晶顯示(含原理圖/PCB/代碼)

    講在前面: 51單片機是大多數(shù)電子愛好者的入門級單片機,這款設(shè)計是一個比較綜合的單片機設(shè)計。本文介紹了一個典型的51單片機設(shè)計,希望對各位有幫助。 本人也在其他平臺開源了一些項目和分享: 點擊進入B站傳送門 1)產(chǎn)品功能: 使用51單片機作為控制器,與ADC0832(

    2024年01月22日
    瀏覽(27)
  • 單片機-蜂鳴器

    單片機-蜂鳴器

    蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電 蜂鳴器主要分為 壓電式蜂鳴器 和 電磁式蜂鳴器 兩 種類型。 壓電式蜂鳴器 主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。多諧振蕩器由晶體管或集成電路構(gòu)成,當接通電源后(1.5~15V 直流工

    2024年02月09日
    瀏覽(20)
  • 單片機學(xué)習(xí)-蜂鳴器如何發(fā)出聲音

    單片機學(xué)習(xí)-蜂鳴器如何發(fā)出聲音

    BEEP =! BEEP? ? 為何使用 非運算,這里面 P2 的管腳默認 有上拉電阻,P2^5 輸出高電平 每次循環(huán) 非運算一下 為低電平 ,產(chǎn)生那種評率 0 1? 0 1? 0 1 循環(huán)下去?

    2024年02月11日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包