一、蜂鸣器简介
1.1、电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
1.2压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。
1.3在单片机应用的设计上,很多方案都会用到蜂鸣器,大部分都是使用蜂鸣器来做提示或报警,比如按键按下、开始工作、工作结束或是故障等等
1.4自激蜂鸣器是直流电压驱动的,不需要利用交流信号进行驱动,只需对驱动口输出驱动电平并通过放大电路放大驱动电流就能使蜂鸣器发出声音,非常简单
1.5 改变单片机引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。
1.6改变输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小。
二、ULN2003简介
2.1ULN2003 是高耐压、大电流达林顿陈列,由七个硅NPN 达林顿管组成。
2.2ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动蜂鸣器、继电器等负载 。
//蜂鸣器实验
#include "reg52.h"
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit beep=P1^5;
void delay(u16 i)
{
while(i--);
}
void main()
{
while(1)
{
beep=~beep;
delay(10); //延时大约100us 通过修改此延时时间达到不同的发声效果
}
}
在网上找了几首曲子的代码,一下是生日快乐歌的代码,通过改变他的频率,达到不同的效果。
//生日快乐
#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char
sbit beep=P1^5;
uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,
190,212,142,159,212,212,106,126,159,169,190,119,119,119,126,159,142,159,0};
uchar code SONG_LONE[]={9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,
12,9,3,12,12,12,24,0};
void DelayMS(uint x)
{
uchar t;
while(x--)
for(t=0;t<120;t++);
}
void PlayMusic()
{
uint i=0, j, k;
while(SONG_TONE[i]!=0 || SONG_LONE[i]!=0)
{
for(j=0;j<SONG_LONE[i]*20;j++)
{
beep=~beep;
for(k=0;k<SONG_TONE[i]/3;k++);
}
DelayMS(10);
i++;
}
}
void main()
{
beep=0;
while(1)
{
PlayMusic();
DelayMS(500);
}
}