0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

單片機(jī)有源蜂鳴器驅(qū)動(dòng)之效率編程

j4AI_wujianying ? 來源:cg ? 2018-12-10 16:40 ? 次閱讀

蜂鳴器是很常見的設(shè)備,分為無源和有源兩種。根據(jù)項(xiàng)目需求選擇不同類型的蜂鳴器。最近的項(xiàng)目里有用到有源蜂鳴器對(duì)有源蜂鳴器。還是老一套,把電路板畫完,接著編程。

在項(xiàng)目中原理圖如下:

如果不能保證I/O的輸出性能可以根據(jù)情況增加上拉或者下拉電阻。

切入正題:在程序里面這個(gè)蜂鳴器的驅(qū)動(dòng)就是個(gè)高低電平驅(qū)動(dòng)。高電平三極管導(dǎo)通、蜂鳴器發(fā)聲,低電平三極管關(guān)斷、蜂鳴器不發(fā)聲。這的確很簡(jiǎn)單,程序上最開始我是這樣寫的:

當(dāng)然,如果單片機(jī)沒有很好的I/O跳變函數(shù)也可以這樣修改:

這里稍作解釋:

1)

函數(shù)功能:蜂鳴器發(fā)聲驅(qū)動(dòng)

傳入參數(shù):蜂鳴器發(fā)聲的次數(shù)

2)

傳入的次數(shù)cnt需要再函數(shù)內(nèi)翻倍。這是因?yàn)閭魅氲膮?shù)是想讓蜂鳴器連續(xù)的發(fā)cnt聲。但是蜂鳴器除了發(fā)聲還有不發(fā)聲的時(shí)候。也就是說蜂鳴器每響一次都需要關(guān)閉一次,如果沒有關(guān)閉操作肯定就不會(huì)出現(xiàn)響幾聲而是連續(xù)的響一聲,這個(gè)也很容易推理。

3)

在while循環(huán)完之后需要加一個(gè)蜂鳴器關(guān)閉操作。

這里假如傳進(jìn)的參數(shù)是2,目的是讓蜂鳴器響兩聲。根據(jù)程序的執(zhí)行步驟:

cnt2變成4。

第1次while(4) 蜂鳴器開 cnt自減到3

第2次while(3) 蜂鳴器關(guān) cnt自減到2

第3次while(2) 蜂鳴器開 cnt自減到1

第4次while(1) 蜂鳴器關(guān) cnt自減到0

第5次while(0) 跳出while

可以看出其實(shí)在while之后蜂鳴器狀態(tài)已經(jīng)是關(guān)閉的了,但是保險(xiǎn)起見,確保函數(shù)調(diào)用完之后蜂鳴器是關(guān)閉的狀態(tài)。比如第一個(gè)函數(shù)I/O跳變的就更需要保障了,因?yàn)榇a上只能看出跳變,看不到跳變之后的狀態(tài)。

至此,一個(gè)簡(jiǎn)單的蜂鳴器電路和驅(qū)動(dòng)程序就都溫習(xí)完了,接下來上干貨:

在寫程序的時(shí)候很多時(shí)候講究程序的效率,比如這個(gè)蜂鳴器驅(qū)動(dòng),驅(qū)動(dòng)過程中會(huì)降低效率,厲害的人很快能看出來,就是這個(gè)Delay延時(shí)的問題。但是上面也說了,不延時(shí)也是不行的。所以趨于效率我嘗試著換了一種方法驅(qū)動(dòng)蜂鳴器。

代碼如下:

實(shí)現(xiàn)起來也很簡(jiǎn)單,簡(jiǎn)單說下原理:

1)首先是提供蜂鳴器驅(qū)動(dòng)的I/O配置,

2)其次是定時(shí)器的配置

3)最后是定時(shí)器中斷函數(shù)實(shí)現(xiàn)

我選用的定時(shí)器是項(xiàng)目單片機(jī)中最簡(jiǎn)單的一個(gè)定時(shí)器,配制成1ms中斷,能夠提供溢出中斷。其實(shí)這個(gè)定時(shí)器我常用做計(jì)系統(tǒng)運(yùn)行時(shí)間Systick_ms。但是該項(xiàng)目對(duì)這個(gè)系統(tǒng)時(shí)間沒有用到,那就用這個(gè)定時(shí)器做文章把。

實(shí)現(xiàn)方法:

1、同樣函數(shù)在調(diào)用蜂鳴器驅(qū)動(dòng)的時(shí)候接口是一樣的,傳入的參數(shù)還是蜂鳴器的響聲次數(shù)。

2、函數(shù)體變了,這里改成了兩個(gè)變量的賦值,第一個(gè)BELL_CNT同普通方法中的cnt2,這里不再贅述。第二個(gè)是FLAG_BELL是用來保存蜂鳴器是否需要驅(qū)動(dòng)的狀態(tài)變量。所以既然是調(diào)用驅(qū)動(dòng)函數(shù),那肯定這個(gè)變量要為真。

3、定時(shí)器中斷函數(shù)里面加上了一個(gè)靜態(tài)變量NOW,他的作用就是和Systic_ms產(chǎn)生一個(gè)50ms的時(shí)間片,干嘛用?肯定是給蜂鳴器開關(guān)之間的延時(shí)用咯。模擬軟件延時(shí)嘛。然后再來分析下這段代碼:

1)首先這個(gè)NOW和Systic_ms是無條件需要賦值保證50ms時(shí)間片的。對(duì)應(yīng)的代碼為NOW=Systick_ms+50;

2)判斷蜂鳴器驅(qū)動(dòng)狀態(tài)變量是不是真,如果不為真就關(guān)閉蜂鳴器,這個(gè)也是無條件的。

3)如果狀態(tài)變量為真:蜂鳴器先跳變Bell_Tog();當(dāng)然如果沒有這個(gè)跳變函數(shù)也可以用上述的判斷cnt的方法,就不多寫了都是一樣的。同時(shí)次數(shù)自減BELL_CNT--;同時(shí)判斷是不是減到0了,減到0了說明響完了啊,那就把狀態(tài)變量賦值為假。再次進(jìn)來不管蜂鳴器是開著的還是關(guān)著的都會(huì)執(zhí)行關(guān)閉操作,這個(gè)跟上面說的保險(xiǎn)一樣。

4)最后,這兩個(gè)變量用的是全局變量,這里是以結(jié)構(gòu)體的形式呈現(xiàn)的,因?yàn)楹芏嗲闆r這兩個(gè)函數(shù)不在一個(gè)C里面。如果硬要寫在一個(gè)C可以忽略本條。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6040

    文章

    44594

    瀏覽量

    636915
  • 蜂鳴器
    +關(guān)注

    關(guān)注

    12

    文章

    892

    瀏覽量

    46024

原文標(biāo)題:?jiǎn)纹瑱C(jī)有源蜂鳴器驅(qū)動(dòng)之效率編程

文章出處:【微信號(hào):wujianying_danpianji,微信公眾號(hào):?jiǎn)纹瑱C(jī)精講吳鑒鷹】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    單片機(jī)驅(qū)動(dòng)蜂鳴器的問題

    C8051F340單片機(jī),端口設(shè)置為推挽輸出,然后接一個(gè)1K電阻,電阻再接8050的基極,8050發(fā)射極接地,集電極接有源蜂鳴器的負(fù)端,蜂鳴器正端接3.3V電源。現(xiàn)在問題是:
    發(fā)表于 08-17 14:23

    有效編程單片機(jī)有源蜂鳴器驅(qū)動(dòng)的方法

    蜂鳴器是很常見的設(shè)備,分為無源和有源兩種。根據(jù)項(xiàng)目需求選擇不同類型的蜂鳴器。最近的項(xiàng)目里有用到有源蜂鳴器對(duì)
    發(fā)表于 11-24 06:34

    科普一下常見的有源蜂鳴器和無源蜂鳴器

    單片機(jī)編輯庫(kù)一延時(shí)與led燈單片機(jī)編輯庫(kù)二按鍵單片機(jī)編輯庫(kù)三
    發(fā)表于 01-17 07:53

    單片機(jī)驅(qū)動(dòng)蜂鳴器電路圖

    單片機(jī)驅(qū)動(dòng)蜂鳴器電路圖
    發(fā)表于 12-08 11:14 ?1.2w次閱讀
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>蜂鳴器</b>電路圖

    單片機(jī)驅(qū)動(dòng)蜂鳴器原理與編程

    蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,本文介紹如何用單片機(jī)驅(qū)動(dòng)蜂鳴器,他廣泛應(yīng)用于計(jì)算機(jī)、打印機(jī)、復(fù)印機(jī)、報(bào)警器、電話機(jī)等電子產(chǎn)品中作發(fā)聲器件。
    發(fā)表于 12-09 16:47 ?502次下載
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>蜂鳴器</b>原理與<b class='flag-5'>編程</b>

    單片機(jī)驅(qū)動(dòng)蜂鳴器原理與程序設(shè)計(jì)

    通過3個(gè)單片機(jī)驅(qū)動(dòng)蜂鳴器編程和電路設(shè)計(jì),詳細(xì)給各位介紹了單片機(jī)驅(qū)動(dòng)
    發(fā)表于 12-23 14:36 ?8次下載

    51單片機(jī)驅(qū)動(dòng)蜂鳴器演奏音樂的程序和蜂鳴器的原理及有源與無源的區(qū)別

    蜂鳴器發(fā)聲原理是電流通過電磁線圈,使電磁線圈產(chǎn)生磁場(chǎng)來驅(qū)動(dòng)振動(dòng)膜發(fā)聲的,因此需要一定的電流才能驅(qū)動(dòng)它,單片機(jī)IO引腳輸出的電流較小,單片機(jī)
    發(fā)表于 09-20 17:19 ?5次下載
    51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>蜂鳴器</b>演奏音樂的程序和<b class='flag-5'>蜂鳴器</b>的原理及<b class='flag-5'>有源</b>與無源的區(qū)別

    單片機(jī)有源蜂鳴器驅(qū)動(dòng)效率編程資料下載

    電子發(fā)燒友網(wǎng)為你提供單片機(jī)有源蜂鳴器驅(qū)動(dòng)效率編程
    發(fā)表于 04-14 08:53 ?0次下載
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>有源</b><b class='flag-5'>蜂鳴器</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>之</b><b class='flag-5'>效率</b><b class='flag-5'>編程</b>資料下載

    如何有效編程單片機(jī)有源蜂鳴器驅(qū)動(dòng)資料下載

    電子發(fā)燒友網(wǎng)為你提供如何有效編程單片機(jī)有源蜂鳴器驅(qū)動(dòng)資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考
    發(fā)表于 04-21 08:50 ?5次下載
    如何有效<b class='flag-5'>編程</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>有源</b><b class='flag-5'>蜂鳴器</b><b class='flag-5'>驅(qū)動(dòng)</b>資料下載

    單片機(jī)如何關(guān)掉蜂鳴器_如何有效編程單片機(jī)有源蜂鳴器驅(qū)動(dòng)

    蜂鳴器是很常見的設(shè)備,分為無源和有源兩種。根據(jù)項(xiàng)目需求選擇不同類型的蜂鳴器。最近的項(xiàng)目里有用到有源蜂鳴器對(duì)
    發(fā)表于 11-16 14:51 ?7次下載
    <b class='flag-5'>單片機(jī)</b>如何關(guān)掉<b class='flag-5'>蜂鳴器</b>_如何有效<b class='flag-5'>編程</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>有源</b><b class='flag-5'>蜂鳴器</b><b class='flag-5'>驅(qū)動(dòng)</b>

    51單片機(jī)驅(qū)動(dòng)蜂鳴器發(fā)聲教程(掃盲)

    51單片機(jī) 蜂鳴器蜂鳴器發(fā)聲原理是電流通過電磁線圈,使電磁線圈產(chǎn)生磁場(chǎng)來驅(qū)動(dòng)振動(dòng)膜發(fā)聲的,因此需要一定的電流才能驅(qū)動(dòng)它,
    發(fā)表于 11-21 21:06 ?9次下載
    51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>蜂鳴器</b>發(fā)聲教程(掃盲)

    【51單片機(jī)蜂鳴器

    【51單片機(jī)蜂鳴器【51單片機(jī)蜂鳴器1 蜂鳴器介紹1.1蜂鳴器分類2. 電路設(shè)計(jì)3.軟件設(shè)計(jì)
    發(fā)表于 11-23 16:20 ?33次下載
    【51<b class='flag-5'>單片機(jī)</b>】<b class='flag-5'>蜂鳴器</b>

    51單片機(jī) 驅(qū)動(dòng)有源/無源蜂鳴器+Proteus仿真

    51單片機(jī) 驅(qū)動(dòng)有源/無源蜂鳴器+Proteus仿真相關(guān)篇《51單片機(jī) Proteus仿真有源
    發(fā)表于 11-23 17:06 ?50次下載
    51<b class='flag-5'>單片機(jī)</b> <b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>有源</b>/無源<b class='flag-5'>蜂鳴器</b>+Proteus仿真

    單片機(jī)編輯庫(kù)三蜂鳴器

    單片機(jī)編輯庫(kù)一延時(shí)與led燈單片機(jī)編輯庫(kù)二按鍵單片機(jī)編輯庫(kù)三
    發(fā)表于 01-17 12:07 ?4次下載
    <b class='flag-5'>單片機(jī)</b>編輯庫(kù)三<b class='flag-5'>之</b><b class='flag-5'>蜂鳴器</b>

    如何有效編程單片機(jī)有源蜂鳴器驅(qū)動(dòng)?

    蜂鳴器是很常見的設(shè)備,分為無源和有源兩種。根據(jù)項(xiàng)目需求選擇不同類型的蜂鳴器。最近的項(xiàng)目里有用到有源蜂鳴器對(duì)
    發(fā)表于 02-10 11:29 ?4次下載
    如何有效<b class='flag-5'>編程</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>有源</b><b class='flag-5'>蜂鳴器</b><b class='flag-5'>驅(qū)動(dòng)</b>?