|
手把手教你使用PIC单片机驱动蜂鸣器(C语言版)——站长原创,如需引用请注明出处
我们来回顾一下,什么是声音?记得在中学的物理课上,老师就教导我们,声音是由震动所产生的。一定频率的震动就产生了一定频率的声音。在我们的增强型PIC实验板中,实验板的RD7口接了一个蜂鸣器,如果我们往它那里送一个高电平,再马上送一个低电平,他就会发出滴嗒的声音。从实验板照片上,我们可以看到一个圆形白色不干胶贴着的东西,它就是蜂鸣器,使用时,我们将其撕掉即可。
| 在实验板的右上部,1602液晶屏接口下方,有一个形状如图1所示的部件,叫做蜂鸣器,也就是BUZZER,它和普通喇叭相比,最重要一个特点是只要按照极性要求加上合适的直流电压,就可以发出固有频率的声音,因此使用起来比起喇叭简单,所以在一些报警要求不高的场合有所使用,还有一个很常见的用法是,当按下按键操作的时候,很多单片机构成的系统会发出声音提示,一般而言,也主要是由它来做的,但是它不能发出语音。虽然它有自己的固有频率,但是它也可以被加以不同频率的方波,从而编制一些简单的音乐。 |

图1:
独立的蜂鸣器原始照片 |
 |
从上面的描述中,很容易就等到一个结论,那就是蜂鸣器的控制和LED的控制对单片机而言是没有区别的,再加上原理图 图2中 三极管的接法,更加使得控制和第一小节LED的控制完全一致了:低电平有效,即I/O口输出“0”就响,反之则不响。

下面是一个蜂鸣器发生的实例程序:
#include<pic.h>
void delay_1ms(void) { unsigned int n; for(n=0;n<50;n++) { NOP(); } } void delay_ms(unsigned int time) { for(;time>0;time--) { delay_1ms(); } }
void main(void) { TRISD=0X00; while(1) { PORTD=0x00; delay_ms(1000); PORTD=0x80; delay_ms(1000); } }
这个程序的核心代码其实只有二句,分别为: PORTD=数值; delay_ms(数值); 前面的语句已在前面的教程中讲过功能与作用,while(1)循环中,即通过语句 PORTD=0x00; delay_ms(1000); PORTD=0x80; 来实现RD7口间断地输出低电平和高电平,中间的delay_ms()为毫秒延时函数,程序中应用为delay_ms(1000);即表示为延时1秒钟时间。因此,程序最终的作用为每隔1秒钟在单片机RD7口输出不现的电平值,我们也由此可以听到蜂鸣器周而复始的“滴嗒”、“滴嗒”响声。
|