找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 4142|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)C語言無源蜂鳴器使用定時器驅(qū)動程序求分析

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:232366 發(fā)表于 2021-2-10 16:14 來自手機(jī) | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這次一個無源蜂鳴器驅(qū)動算是遇到問題了
此程序并非本人所寫也是借鑒于論壇大神帖子的!
程序如下:
定時器為八位自動重裝模式
定時250us;

void  timer()  interrupt   1
{

static uint16  count=0;
uint16   count;
if(num>0)
{
count++;
if(count<400)
{
beep=~beep;
if(count>=400)
beep=1;
if(count>=800)
{
count=0;
num--;
}

}


}

}
求問:三個if里面的的數(shù)值都決定了蜂鳴器的什么狀態(tài)?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:235200 發(fā)表于 2021-2-10 17:47 | 只看該作者
void  timer()  interrupt   1
{

static uint16  count=0;
uint16   count;
if(num>0)
{
count++;
if(count<400)       //決定鳴叫
{
beep=~beep;
if(count>=400)      //決定不叫
beep=1;
if(count>=800)    //決定鳴叫和不叫的周期
{
count=0;
num--;                //決定鳴叫的次數(shù)
}
回復(fù)

使用道具 舉報

板凳
ID:702386 發(fā)表于 2021-2-10 18:04 | 只看該作者
我來分析一下,如果說錯了多包涵。
這個程序運(yùn)行起來的效果是,蜂鳴器會發(fā)出2000Hz的聲音(類似有源蜂鳴器的頻率),交替響100mS停100mS,響的次數(shù)由num決定。
第一個if(num>0),就是num還沒有自減到0時,才會執(zhí)行里面的代碼。if(count<400),是指在前面400次中斷里(每次中斷250uS),蜂鳴器交替發(fā)聲,這就確定了發(fā)聲的聲音頻率是1s/500us=2000Hz。if(count>=400) beep=1是指,執(zhí)行完前面400次中斷(100mS)后,在接下來的400次中斷(100mS)不發(fā)聲,直到if(count>=800)把count清零,才會回到發(fā)聲的代碼中,當(dāng)然前提是num--后num還沒到0。
回復(fù)

使用道具 舉報

地板
ID:236982 發(fā)表于 2021-2-10 18:33 | 只看該作者
蜂鳴器的鳴響由變量NUM決定:
當(dāng)變量num》時,蜂鳴器以占空比為50%、4KHZ的頻率間歇鳴響
NUM=0,蜂鳴器停止鳴響
第一個IF:蜂鳴器鳴響的先決條件
第二個IF:蜂鳴器開始鳴響1秒
第三個IF:蜂鳴器停止鳴響1秒
回復(fù)

使用道具 舉報

5#
ID:390416 發(fā)表于 2021-2-10 19:04 | 只看該作者
人人學(xué)會單片機(jī) 就是用的無源蜂鳴器,課程第25課和第26課
回復(fù)

使用道具 舉報

6#
ID:213173 發(fā)表于 2021-2-10 21:09 | 只看該作者
樓主抄作業(yè)也抄錯了吧。你這程序只能短暫響一下就沒聲音了。給你改一下并詳細(xì)注釋。
void  timer()  interrupt   1
{//功能:急促響鈴聲,適用于報警
        static uint16  count=0;//靜態(tài)局部計數(shù)變量
//        uint16   count;//錯誤:重復(fù)定義同名變量
        if(num>0)//num響鈴次數(shù)變量
        {
                count++;
                if(count<=1000)//<0.25秒
                        beep=~beep;//蜂鳴器響鈴,頻率2KHz
                if(count>1000) //>0.25秒
                        beep=1;           //蜂鳴器復(fù)位
                if(count>=2000)//0.5秒周期
                {
                        count=0;   //計數(shù)變量清0
                        num--;           //響鈴次數(shù)減1,直減到為0結(jié)束
                }
        }
}
回復(fù)

使用道具 舉報

7#
ID:232366 發(fā)表于 2021-2-11 11:15 | 只看該作者
wulin 發(fā)表于 2021-2-10 21:09
樓主抄作業(yè)也抄錯了吧。你這程序只能短暫響一下就沒聲音了。給你改一下并詳細(xì)注釋。
void  timer()  inter ...

新年好��!   非常感謝回復(fù)解答此程序正式出自您,我也照葫蘆畫瓢抄了一個 對其中運(yùn)行原理弄不明白調(diào)試過程中配合邏輯分析儀調(diào)試硬是沒調(diào)通�。�
回復(fù)

使用道具 舉報

8#
ID:213173 發(fā)表于 2021-2-11 15:19 | 只看該作者
SHANWAZI 發(fā)表于 2021-2-11 11:15
新年好�。�   非常感謝回復(fù)解答此程序正式出自您,我也照葫蘆畫瓢抄了一個 對其中運(yùn)行原理弄不明白調(diào)試過 ...

給你一個驅(qū)動無源蜂鳴器演示程序參考
示例 仿真.zip (155.53 KB, 下載次數(shù): 40)

回復(fù)

使用道具 舉報

9#
ID:232366 發(fā)表于 2021-2-11 16:54 | 只看該作者
給壇友送個祝福:今天‬就是大年三十了,在此祝愿您新年好!新‬春快樂!祝愿您在2021年事事順心‬!天天開心!身健體‬康!闔家歡樂!恭發(fā)喜‬財!事事‬順心!萬事如意[慶祝][慶祝][慶祝][煙花][煙花][煙花][煙花][合十][合十][合十]2021發(fā)發(fā)發(fā)
回復(fù)

使用道具 舉報

10#
ID:232366 發(fā)表于 2021-2-11 16:54 | 只看該作者
wulin 發(fā)表于 2021-2-11 15:19
給你一個驅(qū)動無源蜂鳴器演示程序參考

非常感謝
回復(fù)

使用道具 舉報

11#
ID:232366 發(fā)表于 2021-2-11 17:40 | 只看該作者
wulin 發(fā)表于 2021-2-11 15:19
給你一個驅(qū)動無源蜂鳴器演示程序參考

里面元器件非常齊全很感謝
回復(fù)

使用道具 舉報

12#
ID:420836 發(fā)表于 2021-2-15 02:00 | 只看該作者
感謝大家的解釋,非常有幫助
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表