最近產品需要根據運行狀態,蜂鳴器 發出1聲到6聲的鳴叫,用的是有源蜂鳴器,也可以用無源蜂鳴器,修改宏定義即可。現把代碼共享出來,不管怎么優化也沒有大神的代碼少;測試可用
uint8_t Buzzer_Enable; //蜂鳴器驅動函數使能
uint8_t on_time,off_time; //鳴叫時間,停止時間
uint8_t Buzzer_cnt; //鳴叫次數
//調用一次Buzzer_Set_int,蜂鳴器驅動函數就會執行一次,
//例如想讓蜂鳴器鳴叫,調用Buzzer_Set_int(蜂鳴次數,蜂鳴時長,蜂鳴關時長)一次,蜂鳴器就會按照設定參數鳴叫。
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;
}
//蜂鳴器驅動函數,放在定時器中斷函數里面,100ms執行一次
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();//蜂鳴器關
}
else
{
if(on_count>0)
{
BEEPOFF();
}
}
}
}
|