最近产品需要根据运行状态,蜂鸣器 发出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();
}
}
}
}
|