1.蜂鸣器简介
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示
1.分类
按其驱动方式的原理分,可分为:有源蜂鸣器(内含驱动线路,也叫自激式蜂鸣器)和无源蜂鸣器(外部驱动,也叫他激式蜂鸣器);
按构造方式的不同,可分为:电磁式蜂鸣器和压电式蜂鸣器;
按封装的不同,可分为:DIP BUZZER(插针蜂鸣器)和SMD BUZZER(贴片式蜂鸣器);
按电流的不同,可分为:直流蜂鸣器和交流蜂鸣器,其中,以直流最为常见压电式蜂鸣器,用的是压电材料,即当受到外力导致压电材料发生形变时压电材料会产生电荷。同样,当通电时压电材料会发生形变。
2.有源蜂鸣器和无源蜂鸣器
下面有绿色电路板的一种是无源蜂鸣器,没有电路板而用黑胶封闭的一种是有源蜂鸣器
这里的“源”不是指电源。而是指震荡源。
也就是说有源蜂鸣器内部带震荡源,所以只要一通电就会叫;而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫,必须用2K~5K的方波去驱动它
有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。无源蜂鸣器的优点是:1。便宜,2。声音频率可控,可以做出“多来米发索拉西”的效果。3。在一些特例中,可以和LED复用一个控制口;有源蜂鸣器的优点是:程序控制方便 。
3.区分有源蜂鸣器和无源蜂鸣器
判断有源蜂鸣器和无源蜂鸣器,可以用万用表电阻档Rxl档测试:用黑表笔接蜂鸣器"+"引脚,红表笔在另一引脚上来回碰触,如果触发出咔、咔声的且电阻只有8Ω(或16Ω)的是无源蜂鸣器,如果能发出持续声音的,且电阻在几百欧以上的,是有源蜂鸣器
4.蜂鸣器驱动电路
由于蜂鸣器的工作电流比较大,以单片机的I/O 口是无法直接驱动的,所以要利用放大电路来驱动,一般使用三极管来放大电流
2.电路图绘制
先看看蜂鸣器的原理图,单片机的蜂鸣器控制引脚串联1k电阻经三极管连接到蜂鸣器
在Protues中找出来三极管和蜂鸣器,三极管直接搜PNP即可,不用找详细型号,需要做水平镜像翻转,接地与按键并到一起,其他的参照原理图接
3.蜂鸣器控制
51开发板上搭载的蜂鸣器是有源蜂鸣器,只需要高低电平来控制即可,也就是和LED的控制方式一样,参考程序如下
#include
#define ON 0
#define OFF 1
sbit BUZZER = P0^7;
void delay_ms(unsigned int nms)
{
unsigned int i,j;
for(i=nms;i>0;i--)
for(j=113;j>0;j--);
}
void main()
{
BUZZER = ON;
delay_ms(200);
BUZZER = OFF;
delay_ms(200);
while(1);
}
蜂鸣器在protues上不能做仿真,也就是不能看到蜂鸣器是否有响应控制,只能找开发板进行蜂鸣器测试
4.程序补充
学习了蜂鸣器控制后,可以结合前面的LED和按键,如下面代码可做参考
#include #include
#define ON 0
#define OFF 1
sbit KEY1 = P3^3;
sbit KEY2 = P3^4;
sbit KEY3 = P3^6;
sbit KEY4 = P3^7;
sbit BUZZER = P0^7;
void delay_ms(unsigned int nms)
{
unsigned int i,j;
for(i=nms;i>0;i--)
for(j=113;j>0;j--);
}
void main()
{
unsigned int i;
P1 = 0xff;
while(1)
{
if(KEY1 == ON){
delay_ms(10);
if(KEY1 == ON)
{
BUZZER = ON;
}
while(KEY1 == ON);
}
if(KEY2 == ON){
delay_ms(10);
if(KEY2 == ON)
{
BUZZER = OFF;
}
while(KEY2 == ON);
}
if(KEY3 == ON){
delay_ms(10);
if(KEY3 == ON)
{
P1 = 0xfe;
for(i=8;i>0;i--)
{
delay_ms(150);
P1 = _crol_(P1,1);
}
}
while(KEY3 == ON);
}
if(KEY4 == ON){
delay_ms(10);
if(KEY4 == ON)
{
P1 = 0x7f;
for(i=8;i>0;i--)
{
delay_ms(150);
P1 = _crol_(P1,-1);
}
}
while(KEY4 == ON);
}
}
}
关键字:51单片机 蜂鸣器控制
引用地址:
51单片机学习笔记4 -- 蜂鸣器控制
推荐阅读最新更新时间:2024-11-17 02:01
基于51单片机中断跳出指令“RETI”浅议
RETI =RET指令+通知CPU中断服务已结束。 最近在基于51单片机编程的过程中出现了个很奇怪的问题 程序执行中在寄存器EA=1,ET0=1,TR0=1条件下,单TF0=1时并没有执行中断 。在有过单片机中断编程经历者都知道当EA=1,ET0=1的条件下,满足TF0=1时,如果在此期间没有更高优先级的中断执行的情况下定时器中断0必定会产生中断响应。而在我所编写的程序中仅使用了定时器中断0,一个中断也就谈不上存在优先级问题。经过我对自己程序的检查并对各教材中断程序对比发现我的程序中的一个问题:由于中断的不可控性决定其跳出中断返回主程序的不确定,而由于程序需要中断跳出后能跳到指定的地址。为了解决这个问题我在中断结束的地方
[单片机]
51单片机的工作原理
51单片机与很多单片机的工作原理是一致的,而且都遵循冯诺依曼架构,即就是数据区和代码区是区分开来的。在单片机中的具体表现就是程序ROM区和数据RAM区。 本文将以应用最广泛的51单片机为例来解析单片机的工作原理。 一、微处理器 主要包括ALU(算数逻辑运算单元)和控制部件。 先来说ALU,它执行的是单片机的数学运算(如:+、-、*、/、%、 、 、++、--等等)。逻辑运算单元执行单片机的逻辑运算(如:与、或、非、==、!、!=、同或、异或、||、&&等等)。其实说到这里,我们很容易就能想到C语言也是在执行以上这些逻辑运算和数学运算。 再来看一下控制部件,它是控制单片机的程序计数器PC向程序存储器获取指令和操作数的
[单片机]
用51单片机矩阵键盘控制数码管显示数字
#include reg51.h //头文件 #define keys P1//宏定义矩阵键盘 #define smg P0//宏定义数码管 sbit SMGA=P2^2;//位定义 sbit SMGB=P2^3; sbit SMGC=P2^4; unsigned int table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f ,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴数码管字形码 unsigned int k; void delay()//延时函数 { unsigned char a,b; for(a=0;a
[单片机]
用Proteus学习51单片机之I2C(IIC)总线
在学习单片机的过程中,我常有这样的烦恼:随随便便一个芯片,少则占用三五个IO口,一般的就占用8个,稍微想用多一点芯片吧,老觉得IO口不够用。学串口的时候觉得串口是个好东西,连两条线就够了,现在学到I2C,觉得这也是一个非常好的东西,也是两条线,还能给每个总线上的设备设立地址,简直就是一个小网络了。 I2C总线使用两条线,一条是时钟线,称为SCL,一条是数据线,称为SDA,各个设备就并在总线上,每一个总线上的设备都有一个自己的地址,主机在操作设备的时候,都会先发送一个地址码,告诉被操作机,接下来的命令由它接收。 接下来说一下I2C总线的数据有效性。I2C总线进行数据传送时,要求SCL为高电平时,SDA上的数据必需保持稳定,换言之,当
[单片机]
自制51单片机常用头文件(红外解码)
/*-------------------------------------------------------------------------- IR.H The user function is C51. Copyright (c) 1988-2004 Keil Elektronik GmbH sum zhaojun All rights reserved. --------------------------------------------------------------------------*/ #ifndef __IR_H__ #define __IR_H__ #define uchar unsigne
[单片机]
51单片机的串口参数
常用模式为模式1和模式3 1. 波特率可变 2. 起始位为1,停止位为1,数据位为8, 3. 模式3可以选择奇偶校验位 ====================================================================== 最近刚好有项目使用到51的串口,整理了一下资料,固先记下,留待后用 模式0: 常用扩展IO 模式1: 波特率可变; 1位起始+8\位数据+,停止1位, 模式2:波特率固定; 模式3:波特率可变; 1位起始+8位数据+奇偶校验位+停止1位,
[单片机]
51单片机基础之定时器中断(二)
TMOD寄存器: 这里讲一下TMOD寄存器,这个寄存器可以选择开启定时器0还是1,还有可以决定定时器以什么方式工作。如图: 代码: #include reg51.h sbit LED=P2^0; typedef unsigned char u8; typedef unsigned int u16; void time1_init(void) { TMOD|=0x10; //TMOD是一个寄存器,用来决定定时器的工作方式,高四位决定定时器1,目前是工作方式1,即16位定时计数。 TH1=0xfc; //定时器高八位 TL1=0x18; //定时器低
[单片机]
基于51单片机的计时器设计
一.系统概述 系统使用的模块有AT89C51单片机+74HC573锁存器+8位共阴数码管+按键+小灯+蜂鸣器。 本设计采用51单片机为核心控制器,系统内设置了24秒的定时,通过按键可以控制定时的开始和关闭,当定时时间到达后就会点亮小灯并通过蜂鸣器进行报警。 二.仿真概述 1.采用数码管显示定时时间,并且定时过程也会在数码管上显示。 2.烟雾浓度的报警值可以通过按键设定,按键可以对阈值进行加减。 3.定时时间到达后小灯就会亮起,并且蜂鸣器就会进行报警。 4.定时时间结束后2秒后定时器就会被重置。 三.程序设计 使用Keil 51进行程序设计,打开Proteus时程序是默认烧录的状态,如果没有烧录点击AT89C
[单片机]