你这个用的是2003驱动
发布时间:2018-11-04 18:58

  有人说是频率太高了,请问蜂鸣器到底是怎么个工作原理呢?加上延时以后是如何减缓频率的呢?我把24的晶振换成11.0592的也不响…#includereg52.hsbitbell=P0^1;voidmain(){bell=0;}...

  有人说是频率太高了,请问蜂鸣器到底是怎么个工作原理呢?加上延时以后是如何减缓频率的呢?我把24的晶振换成11.0592的也不响…

  展开全部这得看你的蜂鸣器是有源还是无源,如果是无源的蜂鸣器需要经过变频控制才会发声,对于有源的蜂鸣器则直接输出高低电平就可以。注意,这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。两种蜂鸣器好像一样,但仔细看,两者的高度略有区别,有源蜂鸣器a,高度为9mm,而无源蜂鸣器b的高度为8mm。如将两种蜂鸣器的引脚郡朝上放置时,可以看出有绿色电路板的一种是无源蜂鸣器,没有电路板而用黑胶封闭的一种是有源蜂鸣器。迸一步判断有源蜂鸣器和无源蜂鸣器,还可以用万用表电阻档Rxl档测试:用黑表笔接蜂鸣器 +引脚,红表笔在另一引脚上来回碰触,如果触发出咔、咔声的且电阻只有8Ω(或16Ω)的是无源蜂鸣器;如果能发出持续声音的,且电阻在几百欧以上的,是有源蜂鸣器。

  我要是把延时函数设成void delay(int a,)然后主函数中delay();变成delay(50);就不响了。请问是怎么回事?还有能响的这个程序输出的是方波信号吗?怎么变成方波信号的?麻烦您了…

  你这个用的是2003驱动,为什么要输出低电平呢?2003输出时会取反,按你上面电路你要让蜂鸣器鸣叫应该输出高电平才可以啊。

  有源蜂鸣器你直接输出高电平就可以啦,你可以用线V蜂鸣器就可以鸣叫的。(短接的时候看是否能把单片机与J17 IN5相连的管脚断开,如果不能断开直接接5V问题也不大,只是为了更安全可靠)

  你先试一试,不行再求助,先让蜂鸣器如你所愿响起来,“延时函数设成void delay(int a,)然后主函数中delay();变成delay(50);就不响了”这些问题不要过于纠结,

  这个程序能让蜂鸣器响呢?还有为什么我把延时函数改成void delay(jint a){while(a--); }然后主函数改成delay(50);就不响了呢?麻烦您了…

  a展开全部解决方法: 把蜂鸣器的控制信号由单一的电平 改为不断高低变化的方波。例如:void Warn(void) // 蜂鸣 警告{uchar ii;for(ii=0;ii2;ii++) //循环的次数决定 蜂鸣时间的长短,延时A延时B配合决定声调

  然后主函数中delay();变成delay(50);就不响了。请问是怎么回事?还有能响的这个程序输出的是方波信号吗?怎么变成方波信号的?麻烦您了…

  回答一:void delay() 定义时是 无参数函数,只能delay()这样用; 如果想delay(50)这样用,需要改成void delay(unsigned int n ),然后 n 参与延时循环;

  回答二: 现在你这个程序是保持IO低电平,不是方波信号,方波信号是高低电平循环交替产生的, 例如我的那个函数例子。

  追问不好意思啊,表达错误了…少写了点东西…应该是,我要是把延时函数设成void delay(int a,){ while(a--); }然后主函数中delay();变成delay(50);蜂鸣器就不响了…此外有源蜂鸣器不是需要方波才能响的吗?要是我的程序是保持io口低电平的话为什么也会响呢?是不是我的是无源的呢?无源蜂鸣器可以接受方波信号吗?麻烦您了…

  追答一:建议把 while循环 改成for 循环 ,逻辑更加清晰 不易出错。二: 有源蜂鸣器与无源蜂鸣器在方波的驱动下都会发声;关于有源无源的区别,可以参看bruceleeyou朋友的回答。

  不好意思哈,各处查资料发现我的是无源蜂鸣器,即需要方波信号才能响…我真的费解了,为什么我的程序能让它响呢?程序就是上个追问中贴的图,还有上个追问中的问题我还是不理解…为什么我把延时函数变了就不响了呢?