技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動(dòng)網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 在程序里面這個(gè)蜂鳴器的驅(qū)動(dòng)就是個(gè)高低電平驅(qū)動(dòng)

在程序里面這個(gè)蜂鳴器的驅(qū)動(dòng)就是個(gè)高低電平驅(qū)動(dòng)

時(shí)間:2019-04-02 14:40:59來源:暢學(xué)單片機(jī)

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

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

1.jpg 

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

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

2.jpg 

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

3.jpg 

這里稍作解釋:

1)

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

傳入?yún)?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è)簡單的蜂鳴器電路和驅(qū)動(dòng)程序就都溫習(xí)完了,接下來上干貨:

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

代碼如下:

4.jpg 

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

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

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

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

我選用的定時(shí)器是項(xiàng)目單片機(jī)中最簡單的一個(gè)定時(shí)器,配制成1ms中斷,能夠提供溢出中斷。其實(shí)這個(gè)定時(shí)器我常用做計(jì)系統(tǒng)運(yùn)行時(shí)間Systick_ms。但是該項(xiàng)目對這個(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í)間片的。對應(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可以忽略本條。


聲明:本文為轉(zhuǎn)載類文章,如涉及版權(quán)問題,請及時(shí)聯(lián)系我們刪除(QQ: 2737591964),不便之處,敬請諒解!

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:萬向聯(lián)軸器如何進(jìn)行保養(yǎng)的

下一篇:工業(yè)內(nèi)窺鏡在鐵路行業(yè)中應(yīng)用

中國傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動(dòng)網(wǎng)(m.u63ivq3.com)獨(dú)家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來源“中國傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

相關(guān)資訊

網(wǎng)站簡介|會(huì)員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動(dòng)網(wǎng)-工業(yè)自動(dòng)化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺(tái)

網(wǎng)站客服服務(wù)咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權(quán)所有
粵ICP備 14004826號(hào) | 營業(yè)執(zhí)照證書 | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)