利用蜂鸣器播放音乐

2023-05-16

        我们知道,蜂鸣器可分为有源蜂鸣器和无源蜂鸣器,有源蜂鸣器内置了频率发生电路,因此其通电就能够发出声音,但是其频率是固定的,而无源蜂鸣器内部没有频率发生电路,需要外界给予频率,因此适用于单片机控制使其发出不同的音调频率。在这一点有源蜂鸣器是做不到的。现在就利用无源蜂鸣器播放不同的音乐。

无源蜂鸣器的原理图:

 蜂鸣器发声原理是电流通过电磁线圈,使电磁圈产生磁场来驱动振动膜发声的。因此需要一定的电流才能驱动它,而单片机I/O引脚输出的电压较小。单片机输出的TTL电平基本驱动不了蜂鸣器,因需要增加一个放大电路。这里用三极管作为放大电路。

由原理图分析知:通过控制晶体三极管的导通和截止就可以控制蜂鸣器的开关,因此通过控制GPIO_PB5引脚的高低电平的变化就可以控制三极管的导通截止。但是需要注意的是,在使用无源蜂鸣器时,单纯地给它高电平是不能使其导通的,这反而会时蜂鸣器中的项圈持续发热,长时间甚至可能损坏蜂鸣器,因此我们必须保证在空闲的状态下引脚的电平是高电平,使三极管截止。原理图中加入了上拉电阻正是防止在空闲状态下损坏蜂鸣器。

那么蜂鸣器能够发出不同的声音的原理是通过PWM波来驱动实现的,通过调节PWM波的频率就可以输出不同的声音。即引脚高低电平的变化,来产生频率一定的方波进而驱动蜂鸣器,而通过延时长度就可控制其节奏。假设要产生1kHz的频率,即每秒产生1000个振动周期,也就是一个频率周期就是1000us,所以通过控制方波高低电平的占空比就可以发出1kHz的音调频率。

软件实现:

基于STM32固件库函数控制蜂鸣器播放音乐

部分主要程序:

 

        第一个枚举用于定义各个音阶对应的频率值,这样封装的目的是可以让简谱数组更易维护,接下来就是定义的简谱数组,只要按照简谱结构编写数组,就可以让单片机弹奏你的音乐。该数组有三部分组成,第一部分就是音调,第二部分就是数字表示的延时节奏,最后是两个 0,用于告诉单片机,此时演奏完毕,退出演奏循环。用两个 0 的目 的是,如果简谱是一个节奏对应一个延时的话,那么它是偶数个演奏单元,所以会用到最后 一个零,如果是奇数个演奏单元,就用到第一个 0 来标识结束。结束状态的控制也可以通过for循环控制。

通过下载调试最后能够达到很好的效果,如果想要达到更佳的效果可以通过调试延时长度达到自己想要的效果。

 

 

 

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

利用蜂鸣器播放音乐 的相关文章

随机推荐

  • Linux服务器Ubuntu上搭建Jenkins+Pytest+Gitee+Allure自动化

    一 安装Jenkins和Java Jenkins 是一个开源自动化服务器 xff0c 它可以自动执行软件持续集成和交付中涉及的重复性技术任务 Jenkins 易于安装且基于 Java xff0c 此外 xff0c 可以使用 Web 界面轻松
  • Python Cookbook学习总结

    第一章 xff1a 数据结构和算法 任何序列 xff08 可迭代的对象 xff09 都可以通过一个简单的赋值操作来分解为单独的变量 xff0c 唯一的要求是变量的总数和结构要与序列相吻合 xff08 比如对于存储二维坐标等的二维数组 xff
  • FreeRTOS入门——STM32下完成一个基于FreeRTOS的多任务程序

    文章目录 一 什么是FreeRTOS二 裸机系统与多任务系统1 裸机系统2 多任务系统3 系统之间的对比 三 实验要求四 实验准备五 在KEIL新建 FreeRTOS 工程1 新建本地工程文件夹2 使用 KEIL 新建工程3 在 KEIL
  • natnet/vrpn_cliernt环境配置

    vrpn sdk的频率上限就是60hz xff0c 想要提高频率可以使用natnet client进行话题接收 1 basalt vrpn client src下需要的其他package vrpn catkin glog catkin ca
  • 无人机集群学习

    natnet sdk4 0 学习 中文介绍 xff1a NatNet SDK Wiki 示例工程 xff1a NatNet Sample Projects NaturalPoint Product Documentation Ver 2 2
  • Nginx证书管理

    一 下载证书到本地 Nginx服务器上传 管理SSL证书 xff0c 将SSL证书压缩包下载到本地后 xff0c 加压Nginx服务器证书的压缩包文件 cert file name pem PEM格式的证书文件 xff0c PEM格式的证书
  • 【ESP32】arduino中的ESP32实时系统FreeRTOS使用教程(一)

    ESP32 FreeRTOS 任务的状态任务的优先级 创建任务传递给任务函数的参数结构体多参数传递互斥量MutexESP32的双核心固定频率运行任务软件定时器 简单的本节略过 xff0c 详细的可以看视频 xff1a 单片机ESP32上的F
  • Linux系统下GDB调试及opencv的使用

    Linux系统下GDB调试及opencv的使用 一 GDB的简介二 GDB的作用三 GDB的使用1 GDB调试举例2 段错误调试3 内存出错的gdb调试 四 安装opencv 3 4 11 下载opencv 3 4 12 解压3 编译4 配
  • Linux下vscode的配置与使用、proteus仿真运行stm32程序、Altium Designer18绘制STM32最小系统原理图

    Linux下vscode的配置与使用 proteus仿真运行stm32程序 Altium Designer18绘制STM32最小系统原理图 一 Linux下vscode的配置与使用1 安装vscode2 安装c 43 43 插件3 配置4
  • stm32f103核心板串口通信入门

    stm32f103核心板串口通信入门 一 基于寄存器与基于固件库编程方式的差异二 stm32串口通信1 前期准备硬件软件连接 2 编写程序并烧录设计程序烧录程序 三 总结 一 基于寄存器与基于固件库编程方式的差异 使用固件库 xff0c 目
  • Requirement already satisfied 的解决办法

    问题描述 xff1a 安装的时候出现Requirement already satisfied xff1a areadly exist 公司环境是需要dfmanager创建一个python36虚拟环境 xff0c 当在虚拟环境中使用pyth
  • 基于FreeRTOS的STM32多任务程序

    基于FreeRTOS的STM32多任务程序 一 材料准备二 FreeRTOS移植FreeRTOS是什么FreeRTOS移植到STM32上 MDK开发环境 1 下载FreeRTOS源代码2 前期准备3 手动移植RreeRTOS 程序的编写运行
  • STM32实现基于I2C的AHT20温湿度采集

    STM32实现基于I2C的AHT20温湿度采集 I2C通信协议软件I2C与 硬件I2C代码实现烧录硬件连接烧录并运行 参考 I2C通信协议 I2C协议简介 IC Inter Integrated Circuit xff09 总线是一种由 P
  • 计算机网络中Wireshark的简单使用与分析

    Wireshark应用实验 数据链路层网络层传输层TCP 和 UDP 段结构分析 TCP 建立和释放连接 应用层 数据链路层 熟悉 Ethernet 帧结构 其中 xff1a ff ff ff ff ff ff 接受计算机的MAC地址 xf
  • 计算机网络CPT简单应用

    计算机网络CPT简单应用 直接连接两台 PC 构建 LAN用交换机构建 LAN交换机接口地址列表生成树协议 xff08 Spanning Tree Protocol xff09 路由器配置初步 直接连接两台 PC 构建 LAN 将两台 PC
  • HTML入门学习

    HTML入门学习 一 软件准备及配置二 HTML入门学习1 HTML2 HTML文件结构及分析3 标题及文本格式4 超链接 图片与文件路径5 表格 列表及表单6 区块元素 内联元素 预设格式及特殊字符 三 总结与心得 一 软件准备及配置 所
  • CSS初步学习

    CSS初步学习 一 CSS二 CSS语法及生效方式三 三种样式 amp 颜色 尺寸与对齐四 BOX amp 边框与边距五 定位 amp 溢出六 浮动 amp 设置不透明度七 组合选择器 amp 伪类和伪元素八 总结 使用CSS需用到VS C
  • 《通信软件开发与应用》课程结业报告

    正在写 xff0c 12点之前肯定提交 xff0c 不要急 xff0c 老师 xff08 坚定的目光 xff09
  • printf函数的重定向

    为什么要重定向printf函数 xff1f printf函数是底层函数 xff0c 含于stdio h头文件 因为在C语言中printf函数已经定义为默认输出到显示器的 xff0c 若要想在串口上显示 xff0c 那就需要重定向printf
  • 利用蜂鸣器播放音乐

    我们知道 xff0c 蜂鸣器可分为有源蜂鸣器和无源蜂鸣器 xff0c 有源蜂鸣器内置了频率发生电路 xff0c 因此其通电就能够发出声音 xff0c 但是其频率是固定的 xff0c 而无源蜂鸣器内部没有频率发生电路 xff0c 需要外界给予