標(biāo)題: 單片機(jī)C語(yǔ)言無(wú)源蜂鳴器使用定時(shí)器驅(qū)動(dòng)程序求分析 [打印本頁(yè)]

作者: SHANWAZI    時(shí)間: 2021-2-10 16:14
標(biāo)題: 單片機(jī)C語(yǔ)言無(wú)源蜂鳴器使用定時(shí)器驅(qū)動(dòng)程序求分析
這次一個(gè)無(wú)源蜂鳴器驅(qū)動(dòng)算是遇到問(wèn)題了
此程序并非本人所寫(xiě)也是借鑒于論壇大神帖子的!
程序如下:
定時(shí)器為八位自動(dòng)重裝模式
定時(shí)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--;
}

}


}

}
求問(wèn):三個(gè)if里面的的數(shù)值都決定了蜂鳴器的什么狀態(tài)?
作者: csmyldl    時(shí)間: 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ù)
}
作者: zsw3721    時(shí)間: 2021-2-10 18:04
我來(lái)分析一下,如果說(shuō)錯(cuò)了多包涵。
這個(gè)程序運(yùn)行起來(lái)的效果是,蜂鳴器會(huì)發(fā)出2000Hz的聲音(類(lèi)似有源蜂鳴器的頻率),交替響100mS停100mS,響的次數(shù)由num決定。
第一個(gè)if(num>0),就是num還沒(méi)有自減到0時(shí),才會(huì)執(zhí)行里面的代碼。if(count<400),是指在前面400次中斷里(每次中斷250uS),蜂鳴器交替發(fā)聲,這就確定了發(fā)聲的聲音頻率是1s/500us=2000Hz。if(count>=400) beep=1是指,執(zhí)行完前面400次中斷(100mS)后,在接下來(lái)的400次中斷(100mS)不發(fā)聲,直到if(count>=800)把count清零,才會(huì)回到發(fā)聲的代碼中,當(dāng)然前提是num--后num還沒(méi)到0。
作者: suuy79    時(shí)間: 2021-2-10 18:33
蜂鳴器的鳴響由變量NUM決定:
當(dāng)變量num》時(shí),蜂鳴器以占空比為50%、4KHZ的頻率間歇鳴響
NUM=0,蜂鳴器停止鳴響
第一個(gè)IF:蜂鳴器鳴響的先決條件
第二個(gè)IF:蜂鳴器開(kāi)始鳴響1秒
第三個(gè)IF:蜂鳴器停止鳴響1秒
作者: 人人學(xué)會(huì)單片機(jī)    時(shí)間: 2021-2-10 19:04
人人學(xué)會(huì)單片機(jī) 就是用的無(wú)源蜂鳴器,課程第25課和第26課
作者: wulin    時(shí)間: 2021-2-10 21:09
樓主抄作業(yè)也抄錯(cuò)了吧。你這程序只能短暫響一下就沒(méi)聲音了。給你改一下并詳細(xì)注釋。
void  timer()  interrupt   1
{//功能:急促響鈴聲,適用于報(bào)警
        static uint16  count=0;//靜態(tài)局部計(jì)數(shù)變量
//        uint16   count;//錯(cuò)誤:重復(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;   //計(jì)數(shù)變量清0
                        num--;           //響鈴次數(shù)減1,直減到為0結(jié)束
                }
        }
}
作者: SHANWAZI    時(shí)間: 2021-2-11 11:15
wulin 發(fā)表于 2021-2-10 21:09
樓主抄作業(yè)也抄錯(cuò)了吧。你這程序只能短暫響一下就沒(méi)聲音了。給你改一下并詳細(xì)注釋。
void  timer()  inter ...

新年好。   非常感謝回復(fù)解答此程序正式出自您,我也照葫蘆畫(huà)瓢抄了一個(gè) 對(duì)其中運(yùn)行原理弄不明白調(diào)試過(guò)程中配合邏輯分析儀調(diào)試硬是沒(méi)調(diào)通!!
作者: wulin    時(shí)間: 2021-2-11 15:19
SHANWAZI 發(fā)表于 2021-2-11 11:15
新年好!   非常感謝回復(fù)解答此程序正式出自您,我也照葫蘆畫(huà)瓢抄了一個(gè) 對(duì)其中運(yùn)行原理弄不明白調(diào)試過(guò) ...

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


作者: SHANWAZI    時(shí)間: 2021-2-11 16:54
給壇友送個(gè)祝福:今天‬就是大年三十了,在此祝愿您新年好!新‬春快樂(lè)!祝愿您在2021年事事順心‬!天天開(kāi)心!身健體‬康!闔家歡樂(lè)!恭發(fā)喜‬財(cái)!事事‬順心!萬(wàn)事如意[慶祝][慶祝][慶祝][煙花][煙花][煙花][煙花][合十][合十][合十]2021發(fā)發(fā)發(fā)
作者: SHANWAZI    時(shí)間: 2021-2-11 16:54
wulin 發(fā)表于 2021-2-11 15:19
給你一個(gè)驅(qū)動(dòng)無(wú)源蜂鳴器演示程序參考

非常感謝
作者: SHANWAZI    時(shí)間: 2021-2-11 17:40
wulin 發(fā)表于 2021-2-11 15:19
給你一個(gè)驅(qū)動(dòng)無(wú)源蜂鳴器演示程序參考

里面元器件非常齊全很感謝

作者: TTQ001    時(shí)間: 2021-2-15 02:00
感謝大家的解釋?zhuān)浅S袔椭?




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1