【51单片机】程序实验2~4.蜂鸣器-静态数码管-动态数码管-蜂鸣器实验

时间:2024-11-20 07:34:11

蜂鸣器介绍

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于电子产品中作为发声器件。

蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。

与LED相比,由于51单片机的I/O口的驱动电流不足,蜂鸣器无法直接使用其来驱动,而是通过放大电路实现驱动。

我们通过周期性地改变电流的大小和方向,使振动膜片产生稳定的振动,进而使蜂鸣器发声,因此蜂鸣器的控制需要脉冲信号而不是单一信号,且脉冲信号频率一般要求在1.5-5KHz。

实验2 蜂鸣器

#include "reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;

sbit BEEP = P2^5; //定义蜂鸣器控制管脚为BEEP,博主使用的单片机对应管脚为P2.5

void delay_10us(u16 time) //延时函数延用实验1程序
{
	while(time --);
}

void main()
{
	u16 i = 2000; //控制蜂鸣器发声时间的变量
	while(1)
	{
		while(i--)
		{
			BEEP = !BEEP; //使蜂鸣器控制管脚输出在高电平和低电平之间切换
            delay_10us(100); //控制输出信号脉冲周期2*100*10微秒
		}
		i = 0;
		BEEP = 0;
	}
}

蜂鸣器的音高取决于脉冲信号的周期(频率),周期越短(频率越高)音高越高。

蜂鸣器的音量取决于脉冲信号中高电平的占空比(即高电平输出时间在一个周期的占比),占空比越大音量越大。

以下是一个便于控制蜂鸣器的音量的内部循环。

while(i--)
{
	BEEP = 0;
    delay_10us(150); //低电平输出时间占75%
    BEEP = 1;
    delay_10us(50); //高电平输出时间占25%,相较于上一个程序蜂鸣器音量更小
}