51单片机学习笔记4 -- 蜂鸣器控制

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 <reg52.h>

#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 <reg52.h>
#include <intrins.h>

#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);
		}
	}
}

版权声明:本文为CSDN博主「GenCoder」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36955622/article/details/122404512

GenCoder

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

51单片机+ LCD1602+PCF8574转IIC接口+DHT11数据显示

51单片机+ LCD1602+PCF8574转IIC接口+DHT11数据显示 在做这个实验的时候又一次被自己的不注意,掉坑里面去了,调试了好久都不出数据,结果在延时函数和引脚定义上被自己坑了一把。希望大家在写代码的时候多加注意。 LCD1602

51单片机温度报警

器件:   基于普中51A2单片机 用到的模块:LCD1602、蜂鸣器、4个独立按键、DS18B20温度传感器。现象说明: LCD1602可以显示两行数据,每行可以显示16个字符&#xff

51单片机实战教程(33 步进电机的驱动与控制)

步进电机虽然同为电机的一种,但不能像直流电机或者交流电机那样按额定电压与电流给线圈通上直流或交流电机就可正常运转。它需要专用的驱动器或驱动电路供电,才可正常工作。每给驱动器一个脉冲信号,电机就转动一定角