3.2 蜂鸣器模块
3.2.1 蜂鸣器原理图
实验板上的蜂鸣器没有直接与单片机的IO口相连接,需要使用一个杜邦线手动连接(图中黄色的线)。
3.2.2 无源蜂鸣器与有源蜂鸣器介绍
有源和无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它,有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。
有源蜂鸣器:内部有振荡、驱动电路,加电源就可以响,用起来省事,缺点是频率固定,就只一个单音(高、低电平直接驱动,发出滴答的声音)。
无源蜂鸣器: 价格便宜(少了个振荡电路),声音频率可控,可以做出“多来米发索拉西”的效果,缺点是驱动比较麻烦一点。
当前实验板上使用的就是无源蜂鸣器,要操作蜂鸣器需要使用方波进行控制。
3.2.3 示例代码
控制蜂鸣器发出滴答的声音,延时函数可以使用单片机小精灵软件自动生成。
#include <reg51.h> //添加通用的51单片机头文件 #include <intrins.h> void delay200us(void); void BEEP_Ctl(int cmd,int time); sbit BEEP=P1^5; //定义蜂鸣器引脚(需要使用杜邦线连接IO口) int main(void) { int i; while(1) { i=!i; BEEP_Ctl(i,1000); } } /* 开启蜂鸣器(2KHZ~5KHZ方波) 1s等于1000ms 1ms等于1000us 1HZ=s 1KHZ=ms 1MHZ=us 1/5000HZ=0.0002s=200us */ void BEEP_Ctl(int cmd,int time) { int i; if(cmd) //打开蜂鸣器 { for(i=0;i<time;i++) { BEEP=0; delay200us(); BEEP=1; delay200us(); } } else //关闭蜂鸣器 { BEEP=0; for(i=0;i<time;i++)delay200us(); } } void delay200us(void) { unsigned char a,b; for(b=39;b>0;b--) for(a=1;a>0;a--); }
3.2.4 使用无源蜂鸣器播放音乐
电子琴的1234567分别对应CDEFGAB。