【普中51单片机教程 - 2】:蜂鸣器

蜂鸣器的介绍


  1. 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于电子产品中作为发声器件。
  2. 蜂鸣器主要分为压电式蜂鸣器(无源蜂鸣器)和电磁式蜂鸣器(有源蜂鸣器)两种类型。
  3. 无源和有源的区别:”源“的不同,其中的”源“不是电源,而是多谐振荡电路
  4. 无源蜂鸣器要发出声音必须提供一定频率的脉冲信号(脉冲频率通常在1.5~5KHz),而有源蜂鸣器发出声音只需要提供电源即可。
  5. 判断蜂鸣器是否为有源或无源:无源的底部是裸露的,有源的底部是封装好的;无源的体积较大,有源的体积较小。(如下图:左边为无源,右边为有源)
    在这里插入图片描述

蜂鸣器的原理图


因为单片机IO口驱动能力较弱,而驱动蜂鸣器通常需要30mA的电流,可通过三极管放大电流。本次的采用的驱动电路为ULN2003D芯片对电流进行放大。
而ULN2003D芯片可以看作是一个”非“电流,当输入为低(0)时输出为高(1),输入为高(1)时输出为低(0)。
在这里插入图片描述

软件设计


实现功能:实现8位LED灯从左到右移动,每次移动结束,蜂鸣器发出声音,一段时间后再关闭,即让管脚输出一定频率的脉冲信号(高低电平)控制无源蜂鸣器。(注意:本次用到为无源蜂鸣器)

#include<reg51.h>
#include"intrins.h"

#define LED_PORT P2
sbit BEEP = P2^5;

typedef unsigned char u8;
typedef unsigned int u16;

void delay_10us(u16 ten_us)
{
	while(ten_us--);
}

void main()
{
	u8 i = 0;
	while(1)
	{
		u16 j = 2000;
		LED_PORT = 0xfe;
		for(i=0;i<7;i++)
		{
			LED_PORT = _crol_(LED_PORT,1); //循环左移
			delay_10us(10000);
		}
		while(j--)
		{
			BEEP=!BEEP;
			delay_10us(100); //高低电平的时间都为1ms,所以T=2ms,频率f=1/T=0.5KHz
		}
	}
}
  • 汇编实现
ORG 0000H
AJMP MAIN

MAIN:
     MOV P0, #00H    ; 数码管清零
     MOV A, #0FEH
     MOV P2.5, #1    ; 给P2.5赋初值,P2.5也是控制LED灯的D6,所以一开始先赋1,为高电平
     MOV R3, #8      ; LED灯循环
     MOV R4, #5000   ; 蜂鸣器循环

LED:                 ; LED从左到右移动
    MOV P2, A
    LCALL DELAY500MS
    RL A
    DJNZ R3, LED

BEEP:
    CPL P2.5
    LCALL DELAY200US;高低电平的时间都为200us,所以T=400us,频率f=1/T=2.5kHZ
    ; 51单片机用的是无源蜂鸣器,脉冲信号的频率通常为1.5kHz~5kHz
    DJNZ R4, BEEP      ;循环5000次,蜂鸣器响1S
    AJMP MAIN
    

DELAY500MS:   ;误差 0us
    MOV R7,#0CDH
DL1:
    MOV R6,#74H
DL0:
    MOV R5,#09H
    DJNZ R5,$
    DJNZ R6,DL0
    DJNZ R7,DL1
    RET 

DELAY200US:   ;误差 0us
    MOV R6,#27H
DL2:
    MOV R5,#01H
    DJNZ R5,$
    DJNZ R6,DL2
    RET

若想保持音调不变(频率不变),想改变声音的大小,则通过改变占空比的大小即可,也就是增加高电平的时间,减短低电平的时间。
占空比:占空比是指在一个脉冲循环内,通电时间(高电平)相对于总时间所占的比例。
可将其中蜂鸣器的代码块改为如下所示:

		while(j--)
		{
			BEEP = 0;
			delay_10us(50);
			BEEP=1;
			delay_10us(150);
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

街 三 仔

你的鼓励是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值