栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

51单片机:蜂鸣器

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

51单片机:蜂鸣器

小白向单片机笔记二:蜂鸣器
  • 前言
  • 一、蜂鸣器原理
  • 二、蜂鸣器原理图
    • 1.蜂鸣器代码
    • 2.代码解释
      • 1. 为什么蜂鸣器响,和LED6闪烁中有两个delay()函数?
      • 2. 为什么BEEP=1是关闭LED6, 而i=0是关闭蜂鸣器?
  • 总结


前言

蜂鸣器原理及代码


一、蜂鸣器原理

知识拓展: 根据蜂鸣器发声方式不同,主要分为压电式和电磁式。同时根据蜂鸣器结构,分为有源蜂鸣器和无源蜂鸣器。有源蜂鸣器自带震荡电路,接通电源即可发声。

振荡器电路的作用:产生脉冲信号。

无源蜂鸣器 需要提供一定频率的脉冲信号才能发声,频率一般在 1.5-5KHZ。

通过调节脉冲频率可改变音调,通过改变高低电平占空比可以调节音量。

二、蜂鸣器原理图

蜂鸣器正常工作需要约30mA电流,C51芯片是用来控制,如果用C51芯片驱动蜂鸣器,无法保证其他器件正常工作。所以使用时要放大电流来驱动蜂鸣器(使用三级管或下图的ULN2003D)。

ULN2003D 其中一个功能就是放大电流。

通过C51芯片的P2^5引脚持续输出脉冲信号(即高低电平交替),经过ULN2003D芯片放大电流从BEEP引脚输出到蜂鸣器即可发声。

注意P2^5引脚同时控制着LED6,当脉冲信号在一定频率时,可以观察到LED6的闪烁,这就是为什么在LED实验中会有滴答滴答的声音。

1.蜂鸣器代码
#include "reg52.h"
typedef unsigned int uint  ;
typedef unsigned char uchar	;
sbit BEEP = P2^5 ;

void delay(uint i){
	 while(i--){
	 }
}

void main(){
	uint i=100;//调整脉冲频率
	while(1){
		while(i--){
			

			 
			 BEEP=1;
			 delay(100);
			 BEEP=0;
			 delay(10);
		}
		BEEP=1;	 //关闭第六个LED
		i=0;//关闭蜂鸣器	
	}
}
2.代码解释 1. 为什么蜂鸣器响,和LED6闪烁中有两个delay()函数?

因为在实验过程中可以顺便同时观察LED6的闪烁,如果不考虑LED6的情况,可以只使用一个delay()函数。

2. 为什么BEEP=1是关闭LED6, 而i=0是关闭蜂鸣器?

因为BEEP是由P2^5引脚控制,P2^5同时控制LED6,对于蜂鸣器BEEP为高电平还是低电平都没有关系,因为只有脉冲信号才能使无源蜂鸣器工作。将BEEP设置为高电平,是因为P2^5默认输出的就是高电平。

i=0是因为不执行内循环,从而不产生脉冲信号,从而使得蜂鸣器关闭。单片机配套的开发攻略这部分代码注释有点问题。


总结

如果要自己做些小玩意,数模电很重要,可惜学不会。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942411.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号