51单片机如何让蜂鸣器到达条件时只响一声,继续检测下一次条件 满足时再响一下(就是满足响一下以后不

51单片机如何让蜂鸣器到达条件时只响一声,继续检测下一次条件 满足时再响一下(就是满足响一下以后不再持续发声)用到bit位控制。

首先要确定你的蜂鸣器是有源的还是无源的。有源蜂鸣器直接加电压就能响,但是貌似单片机IO口的驱动级别比较低,带不动蜂鸣器(有声但声音不大)。如果是无源的蜂鸣器,那么就要通过IO口输出振荡信号来驱动蜂鸣器了,一般开发板上带的都是这种,你可以调节声音频率的。其实我也是新手,建议以后遇到问题先搜索,比在知道等答案及时得多…我的问题基本上就是这么解决的…
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-06
sbit fmq =P1^0;//蜂鸣器 低电平响
bit q;
void time0_init()
{
TMOD =0X01;
TH0 =0XFC;
TL0 =0X18;
EA =1;
ET0 =1;
TR0 =1;

}

void time0_interrupt() interrupt 1
{
TH0 =0XFC;
TL0 =0X18;

}

void main()
{
time0_init()
while(1)
{
q =0;
delay(1000); //延时 你自己定
q =1;

if(你需要的条件)
{
q =0;
delay(1000);
q =1;

}
//不满足即不响

}

}追问

怎么main函数里没有fmq 只通过q就可以控制 fmq吗?

追答

我是用中断在刷的 你不是说用bit变量控制吗 中断1ms更新一次数据 保证I0口和内部中断值一致啊 当然可以把中断去掉 然后把main里的q换成fmq就行了

追问

看不懂呢 能具体解释一下么 或者不用bit也行 就是你给个函数让他满足条件响一声就行 现在的问题是我一满足蜂鸣器就响个不停

追答

那是你忘了关啦

别忘了在开蜂鸣器之后给个延时代表开的时间
然后关掉 你不关掉当然不会停
sbit fmq =P1^0;

void fmq_run() //写入这个函数就响一下蜂鸣器 放进去就好了 具体条件你自己定

{
fmq =0;
delay(500); //delay你自己打吧 一般0.5秒左右差不多了 长短你自己定

fmq =1;
}

比如

if(xxx)
fmq_run();

追问

不行呢 我这个是有源蜂鸣器 像你这样设置 他就滴滴滴的间断响

追答

当然是写入一次就行了 运行一次就响一次啊 变音调还要改pwm的

本回答被提问者采纳
相似回答