標(biāo)題: 基于C語(yǔ)言switch-case結(jié)構(gòu):4KHZ無(wú)源蜂鳴器單片機(jī)驅(qū)動(dòng)源程序 [打印本頁(yè)]

作者: zhao2022    時(shí)間: 2022-6-25 14:23
標(biāo)題: 基于C語(yǔ)言switch-case結(jié)構(gòu):4KHZ無(wú)源蜂鳴器單片機(jī)驅(qū)動(dòng)源程序
//定時(shí)器每125uS調(diào)用Buz_Output()函數(shù)一次,實(shí)現(xiàn)無(wú)源蜂鳴器4KHZ驅(qū)動(dòng)
//功能參數(shù)說(shuō)明:rbeep=0,蜂鳴器不響。rbeep=1,響1聲。rbeep=3,響2聲。
#define BUZ_OUT_TIME         800        /125uS*800=100mS
#define BUZ_STOP_TIME         800        /125uS*800=100mS
unsigned char rbeep;
unsigned int temp;
void Buz_Output(void)
{
        switch (rbeep)
        {
                case 0:
                        BUZ_GPIO = 0;
                        break;
//響100mS****************************************************
                case 1:
                        BUZ_GPIO = ~BUZ_GPIO;
                        temp ++;
                        if (temp > BUZ_OUT_TIME)  //125uS*800=100mS
                        {
                                temp  = 0;
                                rbeep = 0;                                
                        }
                        break;
//不響100mS****************************************************                        
                case 2:
                        BUZ_GPIO = 1;
                        temp ++;
                        if (temp > BUZ_STOP_TIME)
                        {
                                temp  = 0;
                                rbeep = 1;                                
                        }
                        break;
//響100mS****************************************************                        
                case 3:
                        BUZ_GPIO = ~BUZ_GPIO;
                        temp ++;
                        if (temp > BUZ_OUT_TIME)
                        {
                                temp = 0;
                                rbeep = 2;
                        }
                        break;               
                default:break;
        }
}


作者: datouyuan    時(shí)間: 2022-6-27 09:49
你這驅(qū)動(dòng)還不夠完善。只實(shí)現(xiàn)斷續(xù)響1聲,斷續(xù)響2聲,立刻停3種功能。

我也實(shí)現(xiàn)過4KHZ無(wú)源蜂鳴器驅(qū)動(dòng),代碼框架和你一樣,代碼行數(shù)約為你的一半,但能實(shí)現(xiàn)下列功能。
1.立刻停(rbeep=0;)
2.斷續(xù)響n聲(rbeep=n;),n取值1~253
3.永久斷續(xù)響(rbeep=254;)
4.永久連續(xù)響(rbeep=255;rbeep1=0;)
5.連續(xù)響(n*100)毫秒(rbeep=255;rbeep1=n;)

按我提到的修改代碼,我相信樓主也能做到。

作者: zhao2022    時(shí)間: 2022-6-27 14:08
datouyuan 發(fā)表于 2022-6-27 09:49
你這驅(qū)動(dòng)還不夠完善。只實(shí)現(xiàn)斷續(xù)響1聲,斷續(xù)響2聲,立刻停3種功能。

我也實(shí)現(xiàn)過4KHZ無(wú)源蜂鳴器驅(qū)動(dòng),代 ...

這個(gè)是我初學(xué)時(shí)寫的,確實(shí)有很多改進(jìn)空間
作者: xhaity    時(shí)間: 2022-11-15 22:40
datouyuan 發(fā)表于 2022-6-27 09:49
你這驅(qū)動(dòng)還不夠完善。只實(shí)現(xiàn)斷續(xù)響1聲,斷續(xù)響2聲,立刻停3種功能。

我也實(shí)現(xiàn)過4KHZ無(wú)源蜂鳴器驅(qū)動(dòng),代 ...

可以共享一下嗎?
作者: xhaity    時(shí)間: 2022-11-17 10:08
最近產(chǎn)品需要根據(jù)運(yùn)行狀態(tài)蜂鳴器發(fā)出1聲-6聲的程序,現(xiàn)把代碼共享出來(lái);用的有源驅(qū)動(dòng),可以修改宏定義,改為無(wú)源驅(qū)動(dòng)
作者: xhaity    時(shí)間: 2022-11-17 10:13
最近產(chǎn)品需要根據(jù)運(yùn)行狀態(tài),蜂鳴器 發(fā)出1聲到6聲的鳴叫,用的是有源蜂鳴器,也可以用無(wú)源蜂鳴器,修改宏定義即可,F(xiàn)把代碼共享出來(lái),不管怎么優(yōu)化也沒有大神的代碼少;測(cè)試可用
uint8_t Buzzer_Enable;                //蜂鳴器驅(qū)動(dòng)函數(shù)使能
uint8_t on_time,off_time;   //鳴叫時(shí)間,停止時(shí)間
uint8_t Buzzer_cnt;         //鳴叫次數(shù)
//調(diào)用一次Buzzer_Set_int,蜂鳴器驅(qū)動(dòng)函數(shù)就會(huì)執(zhí)行一次,
//例如想讓蜂鳴器鳴叫,調(diào)用Buzzer_Set_int(蜂鳴次數(shù),蜂鳴時(shí)長(zhǎng),蜂鳴關(guān)時(shí)長(zhǎng))一次,蜂鳴器就會(huì)按照設(shè)定參數(shù)鳴叫。
void Buzzer_Set_int(uint8_t cnt,uint8_t oncnt,uint8_t offcnt)
{
        on_time=oncnt;
        off_time=offcnt;
        on_count = cnt;
        Buzzer_Enable = 1;
}

//蜂鳴器驅(qū)動(dòng)函數(shù),放在定時(shí)器中斷函數(shù)里面,100ms執(zhí)行一次
void Buzzer_Output(void)
{
static uint8_t oncnt,offcnt, buzzercnt = 0;
if(buzzercnt < on_count && offcnt == 0)
{
         oncnt = on_time;
         offcnt = off_time;
         buzzercnt++;
}
else if(buzzercnt>=on_count && offcnt == 0)
{
         Buzzer_Enable = 0;
         buzzercnt = 0;
         oncnt = 0;
         offcnt = 0;
         BEEPOFF();
}
  if(Buzzer_Enable)
        {
                if(oncnt)
                {
                        oncnt--;
                        BEEPON();//蜂鳴器響
                }
                else if(offcnt)
                {
                        offcnt--;
                        BEEPOFF();//蜂鳴器關(guān)
                }
                else
                {
                        if(on_count>0)
                        {
                                BEEPOFF();
                        }
                }
  }
}





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