51单片机 | 蜂鸣器实验

2023-05-16

文章目录

    • 一、 蜂鸣器介绍
    • 二、硬件设计
    • 三、软件设计
    • 四、实验现象

  通过单片机的一个 IO 口控制 板载无源蜂鸣器,实现蜂鸣器控制。

一、 蜂鸣器介绍

  蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、 打印机、 复印机、 报警器、 电子玩具、 汽车电子设备、 电话机、 定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器电磁式蜂鸣器两种类型。
  压电式蜂鸣器(无源蜂鸣器)主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V 直流工作电压),多谐振荡器起振,输出 1.5~5kHZ 的音频信号,阻抗匹配器推动压电蜂鸣片发声。
  电磁式蜂鸣器(有源蜂鸣器)由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
  其实一句话就可概括它们之间的区别,想要压电式蜂鸣器发声,需提供一定频率的脉冲信号(高低电平);想要电磁式蜂鸣器发声,只需提供电源即可。
  我们开发板上使用的蜂鸣器是无源蜂鸣器,属于压电式蜂鸣器类型。这里说的有源和无源,并不是指电源的意思,而是指蜂鸣器内部是否含有振荡电路,有源蜂鸣器内部自带振荡电路,只需提供电源即可发声,而无源蜂鸣器则需提供一定频率的脉冲信号才能发声,频率大小通常在 1.5-5KHz 之间。蜂鸣器实物图如下图所示:
在这里插入图片描述
  对于无源蜂鸣器,如果改变频率就可以调节蜂鸣器音调,产生各种不同音色、音调的声音。如果改变输出电平的高低电平占空比,则可以改变蜂鸣器的声音大小
  对于有源蜂鸣器,通常内部已经固定了频率,对于调节频率或占空比可能改变不了蜂鸣器的音调和音量,当然也有的有源蜂鸣器可以实现和无源蜂鸣器一样的效果。

二、硬件设计

  在前面章节中我们已经对 51 单片机的 GPIO 做了简单介绍,并且还使用了其中 IO 口直接控制开发板上的 LED。对于本章要实现蜂鸣器的控制,我们能否直接使用单片机的 IO 口驱动呢?答案是否定的,因为 51 单片机 IO 口的驱动能力较弱(即使外接上拉电阻),而蜂鸣器驱动需要约 30mA,所以非常困难,即使可以驱动,那对于整个芯片的其它 IO 剩下驱动能力就更加弱甚至无法工作。所以,我们不会直接使用 IO 口驱动蜂鸣器,而是通过三极管把电流放大后再驱动蜂鸣器,这样 51 单片机的 IO 口只需要提供不到 1mA 的电流就可控制蜂鸣器。所以我们也经常说到 51 单片机是用来做控制的,而不是驱动。
  我们开发板上的蜂鸣器模块电路如下图所示:
在这里插入图片描述
  从图中可以看出,蜂鸣器控制管脚直接连接到 51 单片机的 P2.5 管脚上。图中并没有使用三极管进行电流放大,而是使用 ULN2003 芯片来驱动,有关 ULN2003芯片只需知道当 P2.5 输出高电平,BEEP 则输出低电平;当 P2.5 输出低电平,BEEP 则输出高电平,类似一个非门。
  开发板上使用的是无源蜂鸣器,它需要一定频率的脉冲(高低电平)才会发声,因此需要让 P2.5 脚以一定频率不断输出高低电平信号才能控制蜂鸣器发出声音。

三、软件设计

  蜂鸣器实验所实现的功能是:让蜂鸣器发出声音,一段时间后再关闭,即让 P2.5管脚输出一定频率的脉冲信号(高低电平)控制无源蜂鸣器
  我们直接复制前面创建好的工程模板,将复制过来的模板文件夹重新命名为“5-蜂鸣器实验”。打开工程直接在 main.c 源文件内进行编程,main.c 内代码如下:

/*
实验名称:蜂鸣器实验
接线说明:
实验现象:下载程序后蜂鸣器发出声音,一段时间后关闭
*/

#include "reg52.h"

//对系统默认数据类型进行重定义 
typedef unsigned char u8;
typedef unsigned int u16;

//将P2.5管脚定义为BEEP
sbit BEEP = P2^5;

/*
函 数 名 : delay_10us
函数功能 : 延时函数,ten_us=1 时,大约延时 10us
输 入 : ten_us
*/
void delay_10us(u16 ten_us)
{
	while (ten_us--);
}



void main()
{
	u16 i = 2000;	
	while (1)
	{  	
	 	while (i--)
		{
			//P2.5管脚有上拉电阻,默认输出为高电平
			BEEP = !BEEP; //产生一定频率的脉冲信号
			//假设脉冲信号频率为2Khz,那么周期为0.5ms
			delay_10us(50);
		}
		i = 0; //清零,否则会一直响不会停止
		BEEP = 0; //关闭蜂鸣器
	}
}

至此,整个程序就编写完成,我们编译一下,如下图所示:
在这里插入图片描述
可以看到没有错误,也没有警告。
  若要改变音调可以修改延时时间,但要注意频率不能太大或者太小。若要改变音量,可以修改 BEEP 输出高电平时间。比如:将循环中设置为:

BEEP=1;
delay_10us(190);
BEEP=0;
delay_10us(10);

四、实验现象

  使用 USB 线将开发板和电脑连接成功后(电脑能识别开发板上 CH340 串口),把编译后产生的.hex 文件烧入到芯片内,可以听到开发板上蜂鸣器发出美妙的声音,一段时间后关闭。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机 | 蜂鸣器实验 的相关文章

  • canvas四个点画矩形,中垂线,以及顶点拖拽

    场景 xff1a 已知四个点 xff0c 画出矩形 xff0c 并且计算出每个中垂线 xff0c 并加箭头 xff0c 标识符 xff0c 点击四个顶点还能拖拽进行变动 vue span class token operator lt sp
  • promise.all([]).then(() => {}).catch(() => {})异步处理

    场景 xff1a 在同一时间 xff0c 同时调用相同的接口 xff08 唯一不同 xff1a 接口传参不一样 xff09 简单写法 xff1a Promise span class token punctuation span span
  • git 修改远程仓库地址,用户名,地址

    在git上新建项目 然后讲本地原来的git clone地址更换成新建仓库的clone 地址 方法一 xff1a 1 删除本地仓库当前关联的无效远程地址 xff0c 再为本地仓库添加新的远程仓库地址 git remote span class
  • Docker Dockerfile

    什么是Dockerfile Dockerfile 是一个用来构建镜像的文本文件 xff0c 文本内容包含了一条条构建镜像所需的指令和说明 使用Dockerfile定制镜像 仅讲解如何运行Dockerfile 文件来定制一个镜像 1 定制一个
  • websocket

    在WebSocket API中 xff0c 浏览器和服务器只需要完成一次握手 xff0c 两者之间就直接可以创建持久性的连接 xff0c 并进行双向数据传输 webSocket方法 ws send 向服务器发送数据ws close 关闭连接
  • 搭建electron-vue下

    搭建electron vue下 npm install 后续问题Version 9 of Highlight js has reached EOL npm run dev 后续ReferenceError Unknown plugin 34
  • Centos 7 安装VNC步骤

    Centos7 安装 VNC 步骤 一 安装 1 以root 用户运行以下命令来安装vncserver yum install tigervnc server 2 同样运行以下命令来安装vncviewer yum install vnc 3
  • [记录]Ubuntu18.04使用桥接模式实现上网

    前言 一般在虚拟机中采用NAT模式就可以上网 其最大优势是虚拟系统接入互联网非常简单 xff0c 你不需要进行任何其他的配置 xff0c 只需要宿主机器能访问互联网即可 但是这种方式 虚拟机可以通过主机 单向访问 网络上的其他主机 xff0
  • Linux-浅谈系统调用

    我们开始研究操作系统中一个非常重要的概念 系统调用 大多数程序员在写程序时都很难离开系统调用 xff0c 与系统调用打交道的方式是通过库函数的方式 xff0c 库函数用来把系统调用给封装起来 xff0c 要理解系统调用的概念还需要一些储备知
  • 可复用软件模块的接口设计

    在上一篇博客中模块化代码的基本写法举例 青衫客36的博客 CSDN博客 xff0c 我们给出了模块化代码的基本写法 xff0c 本文我们继续探讨对menu程序进行改造 xff0c 使之成为可复用软件模块 下面先引入可重用软件的一些相关概念
  • Makefile实验

    一 准备C程序 1 input h ifndef INPUT H define INPUT H void input int int a int b endif 2 input c include lt stdio h gt include
  • CSAPPLab2- BombLab

    写在前面 xff1a 本次实验对GDB的使用提出了较高要求 xff0c 对GDB调试不了解的读者可以先移步到笔者的这篇博客 GDB调试实验 青衫客36的博客 CSDN博客 由于老师发布的压缩包中有48个bomb代码包 xff0c 根据 学号
  • 代码优化- 前端优化

    常量折叠 基本思想 xff1a 在编译期间计算表达式的值 xff08 编译时静态计算 xff09 例如 xff1a a 61 3 43 5 61 61 gt a 61 8 xff0c if true amp amp false 61 61
  • Haffman编码(算法导论)

    上次算法导论课讲到了Haffman树 xff0c 笔者惊叹于Haffman编码的压缩效果 xff0c 故想自己亲自动手尝试写一个极简的Haffman压缩程序 首先 xff0c 我们来了解一下什么是Haffman编码 Haffman编码 赫夫
  • C++ Primer- 变量声明和定义的关系

    为了允许把程序拆分成多个逻辑部分来编写 xff0c C 43 43 语言支持分离式编译 xff08 separatecompilation xff09 机制 xff0c 该机制允许将程序分割为若干个文件 xff0c 每个文件可被独立编译 如
  • Compiler Lab2- 自制极简编译器

    笔者实现的这个超级迷你版编译器 xff08 词法分析 语法分析 生成中间代码 xff08 cpp xff09 xff09 仅支持四则运算 xff0c 功能真的是非常非常简单 xff0c 不过其中的流程 xff08 词法分析 gt 语法分析
  • 贪心算法实现最佳任务调度实验

    题目描述 一个单位时间任务是恰好需要一个单位时间完成的任务 给定一个单位时间任务的有限集S 关于S 的一个时间表用于描述S 中单位时间任务的执行次序 时间表中第1 个任务从时间0 开始执行直至时间1 结束 xff0c 第2 个任务从时间1
  • 在CentOS安装CMake

    你或许听过好几种 Make 工具 xff0c 例如 GNU Make xff0c QT 的 qmake xff0c 微软的 MS nmake xff0c BSD Make xff08 pmake xff09 xff0c Makepp xff
  • CSAPP Lab3- bufbomb

    实验目标 xff08 1 xff09 掌握函数调用时的栈帧结构 xff08 2 xff09 利用输入缓冲区的溢出漏洞 xff0c 将攻击代码嵌入当前程序的栈帧中 xff0c 使得程序执行我们所期望的过程 实验代码 xff08 1 xff09
  • 金蝶部署SpringBoot+vue项目总结

    金蝶部署SpringBoot 43 vue项目文章目录 文章目录 金蝶部署SpringBoot 43 vue项目文章目录前言一 金蝶部署中两个重要概念1 域2 应用基础上下文 二 部署准备1 前后台打包2 部署过程3 部署成功后的注意事项

随机推荐

  • Gazebo-Realsense 编译问题解决

    64 Gazebo仿真 Realsense 编译问题解决 参考 这篇文章配置 首先git clone代码到你的工作空间 git clone https github com nilseuropa realsense ros gazebo g
  • docker快捷添加用户组,远离sudo困扰

    使用docker命令时 xff0c 总是需要root权限 xff0c 同时还要验证密码 xff0c 过于麻烦便将root添加进docker分组 xff0c 远离sudo困扰 span class token comment 创建docker
  • 全注解下的SpringIoc 续4-条件装配bean

    Spring Boot默认启动时会加载bean xff0c 如果加载失败 xff0c 则应用就会启动失败 但是部分场景下 xff0c 我们希望某个bean只有满足一定的条件下 xff0c 才允许Spring Boot加载 xff0c 所以
  • 卡尔曼滤波结果和图优化的融合

    仅使用卡尔曼滤波结果作为初始值辅助NDT算法的进行 xff0c 并没有进行实际融合 论文地址 算法流程 扩展的卡尔曼滤波融合GPS 惯性测量单元IMU 编码器里程计得到融合后的定位信息 基于3D NDT配准得到激光里程计 建图优化 融合单帧
  • Kalibr工具进行相机IMU标定

    github地址 xff1a https github com ethz asl kalibrWiki文档 xff1a https github com ethz asl kalibr wiki camera imu calibration
  • 保研复试-计算机网络复习

    计算机网络是我专业课里成绩较高的课 xff0c 老师应该会问到 xff0c 面试的时候计网也是公司里爱问的科目 整理一下看到的网上的一些保研 考研复试题 xff0c 便于复习 一 计算机网络的体系结构 1 计算机网络的分类 按分布范围 xf
  • Hbase的API

    Hbase API 文章目录 Hbase API准备工作Namespace DDL1 Junit执行代码模板2 创建namespace的API3 列出所有的namespace4 列出所有namespace中的表名5 修改namespace的
  • 【Python】 matplotlib 以pdf形式保存图片

    Python matplotlib 以pdf形式保存图片 span class token keyword import span matplotlib span class token punctuation span pyplot as
  • 51单片机 | 点亮第一个LED | LED 闪烁实验 | LED流水灯实验

    文章目录 一 51单片机GPIO介绍1 GPIO概念2 GPIO 结构框图与工作原理2 1 P0端口2 2 P1端口2 3 P2端口2 4 P3端口 2 5 要点 二 LED简介三 硬件设计四 软件设计1 点亮第一个LED2 LED 闪烁实
  • matlab二维矩阵可视化几种方法

    目录 一 pcolor 二 imagesc 三 spy 四 文末彩蛋 一 pcolor 以一个100x100块对角矩阵B为例 1 xff1a 原生pcolor 可以在矩阵维度不大时进行可视化 xff0c 带小方格 矩阵比较大时画出整体为黑色
  • 【ROS入门】双系统安装和ros安装踩坑

    记录一下安装Ubuntu双系统和和ros过程中踩的坑 xff0c 防止下次再犯错 一 双系统安装与删除 双系统的安装比一开始想的说实话要简单得多 xff0c 随便用u盘制作一个系统安装盘 xff0c 或者在u盘里面放需要的Ubuntu镜像
  • 【ROS入门】TF与URDF

    一 什么是TF TF全程就是transform xff0c 就是一个坐标系的转换 在ROS中坐标的转换是一个很重要的内容 xff0c 主要还是因为机器的不灵活性 xff0c 如果是人 xff0c 完全可以灵活地控制手臂去抓取一个物体 xff
  • 树莓派3B+——系统安装及显示

    树莓派3B 43 系统安装及显示 目录 树莓派3B 43 系统安装及显示系统安装显示显示器显示3 5寸显示屏显示pc显示 树莓派3B 43 系统安装及显示 初次接触树莓派 xff0c 花了差不多一天的时间把系统的安装和显示全部搞定 xff0
  • VSLAM 相关知识点总结

    VSLAM 相关知识点 这篇文章是对VSLAM涉及的知识点进行系统性的总结和更新 xff0c 一些内容来源至VSLAM经典教材 xff0c 博客 xff0c 和开源项目 引用材料如下表 SLAM十四讲高博古月老师的技术博客崔神的github
  • Windows下CLion中文乱码最有效的解决方式

    作者开发环境 Windows 10 Clion 18 3 MinGW W64 很多人都遇到了Clion的中文乱码问题 xff0c 然后在CSDN上面寻找解决办法 比如这篇很有代表性https blog csdn net Cbk XLL ar
  • Neutron复盘及学习笔记

    前言 对于openstack neutron xff0c 曾花费很多的时间去看它的源码 xff0c 结果啥都没有看出来 openstack代码风格是 xff0c 为了实现plugin的可插拔 xff0c 运用了很多设计模式 xff0c 设计
  • 匿名飞控底层PID代码解析

    大半年就快过去了 大二上学期转瞬即逝 xff0c 离上一次博客也有一段时间了 xff0c 没错 xff0c 庆幸的是我又回来了 xff0c 其实本来第二篇博客是想着写一下两轮平衡车来着 xff0c 代码早就写好了 xff0c 但是硬件不给力
  • IAR、KEIL常见编译报错警告的解决方法(持续更新中)

    Warning Pe550 variable 变量 was set but never used 原因 xff1a 变量定义赋值了但从未使用 解决 xff1a 变量定义删了就可以 xff0c 编译器也不会真的给这个变量分配空间 Warnin
  • VS2019 未能正确加载”balabal.........Package“

    修复VS2019不能自动补全Unity脚本代码时 xff0c 更新了下面这个东西 导致一直蹦下面这些警告 嘣 嘣 嘣 嘣 嘣 网上有很多博客说重置用户数据 禁用Live Share 分析Log信息等等 xff0c 最后看到一个博文说检查更新
  • 51单片机 | 蜂鸣器实验

    文章目录 一 蜂鸣器介绍二 硬件设计三 软件设计四 实验现象 通过单片机的一个 IO 口控制 板载无源蜂鸣器 xff0c 实现蜂鸣器控制 一 蜂鸣器介绍 蜂鸣器是一种一体化结构的电子讯响器 xff0c 采用直流电压供电 xff0c 广泛应用