FPGA实现蜂鸣器播放音乐实验,以儿歌《两只老虎》为例

这篇具有很好参考价值的文章主要介绍了FPGA实现蜂鸣器播放音乐实验,以儿歌《两只老虎》为例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

**

FPGA实现蜂鸣器播放音乐

**

实现功能:

开发板上电后,通过蜂鸣器播放《两只老虎》。

设计思路

原理:想要让蜂鸣器播放音乐,就需要知道每个音符的频率,再通过换算将频率转换为周期,再结合开发板具体的系统时钟周期,便可计算出每个音符对应多少个系统时钟周期个数,通过对这些个数计数,便可控制蜂鸣器播放不同的音符,也就能播放歌曲。
例:音符1(dou)的频率是523HZ,它的周期是:1/523s,换算成ns是1912045ns,开发板时钟系统频率如果是50MHZ,则每个系统时钟周期是20ns,所以上述是1912045/20个系统周期个数。
具体每个音符的频率可参照下图对照表:

音符与频率对照表

蜂鸣器播放音乐,编辑器,fpga开发

《两只老虎》简谱

蜂鸣器播放音乐,编辑器,fpga开发

代码(全):文章来源地址https://www.toymoban.com/news/detail-555346.html

module beep_music  (
//输入与输出信号定义
input              clk  ,
input              rst_n,

output             beep
);
//中间信号定义
reg     [16:0]     cnt0    ;       //产生PWM的计数器
wire               add_cnt0;
wire               end_cnt0;

reg     [7:0]      cnt1    ;      //每个音符持续时间的计数器
wire               add_cnt1;
wire               end_cnt1;

reg     [5:0]      cnt2    ;     //《两只老虎》共32个音节
wire               add_cnt2;
wire               end_cnt2;

reg     [16:0]     pre_set ;    //存放每个音节的频率在系统中的时钟个数

//每个音符对应的系统周期计数,中音
localparam  M1=95602,           //音符1do
	        M2=85178,           //音符rui
	        M3=75872,           //音符mi
	        M4=71633,           //音符fa
	        M5=63775,           //音符so
	        M6=56818,           //音符la
	        M7=50607;           //音符xi

//每个音符对应的系统周期计数,低音音符so,频率392
//周期是1/392s,换算成ns是2551020ns,每个
//系统时钟周期是20ns,所以上述是2551020/20个系统周期个数127,551
localparam  D5=127551;         //音符so,低音


//每个音节的频率在系统时钟周期下对应的系统周期个数
//--------------------------------------------
//比如:音符1的频率是523HZ,它的周期是1/523s,换算成ns是1912045ns,每个
//系统时钟周期是20ns,所以上述是1912045/20个系统周期个数,即cnt0的计数
always @(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        cnt0<=0;
    end
    else if(add_cnt0)begin
        if(end_cnt0)
            cnt0<=0;
        else
            cnt0<=cnt0+1;  
    end
end
assign add_cnt0=1'b1;
assign end_cnt0=add_cnt0 && cnt0==pre_set-1;
assign beep=(cnt0>=(pre_set/2))?1:0;          //每个音符的占空比为50%


//每个音符持续一段时间
always @(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        cnt1<=0;
    end
    else if(add_cnt1)begin
        if(end_cnt1)
            cnt1<=0;
        else
            cnt1<=cnt1+1; 
    end
end
assign add_cnt1=end_cnt0;
assign end_cnt1=add_cnt1 && cnt1==150-1;

//计32个音符(两只老虎共32音节)
always @(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        cnt2<=0;  
    end
    else if(add_cnt2)begin
        if(end_cnt2)
            cnt2<=0;   
        else 
            cnt2<=cnt2+1;
    end
end
assign add_cnt2=end_cnt1;
assign end_cnt2=add_cnt2 && cnt2==32-1;

//存放歌曲的简谱
always @(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        pre_set<=0;  
    end
    else begin
        case(cnt2)
                0:pre_set<=M1;
				1:pre_set<=M2;
				2:pre_set<=M3;
				3:pre_set<=M1;
				4:pre_set<=M1;
				5:pre_set<=M2;
				6:pre_set<=M3;
				7:pre_set<=M1;
				8:pre_set<=M3;
				9:pre_set<=M4;
				10:pre_set<=M5;
				11:pre_set<=M3;
				12:pre_set<=M4;
				13:pre_set<=M5;
				14:pre_set<=M5;
				15:pre_set<=M6;
				16:pre_set<=M5;
				17:pre_set<=M4;
				18:pre_set<=M3;
				19:pre_set<=M1;
				20:pre_set<=M5;
				21:pre_set<=M6;
				22:pre_set<=M5;
				23:pre_set<=M4;
				24:pre_set<=M3;
				25:pre_set<=M1;
				26:pre_set<=M2;
				27:pre_set<=D5;
				28:pre_set<=M1;
				29:pre_set<=M2;
				30:pre_set<=D5;
				31:pre_set<=M1;
				default:pre_set<=0;
        endcase
    end
end
endmodule

到了这里,关于FPGA实现蜂鸣器播放音乐实验,以儿歌《两只老虎》为例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32通过PWM输出使蜂鸣器实现播放音乐功能

    源码下载链接[点击跳转] https://download.csdn.net/download/Coin_Collecter/88641632        PWM ,全称 Pulse Width Modulation ,即脉宽调制技术,是一种通过改变信号的占空比来控制电路的技术。在 PWM 信号中,周期是固定的,而占空比则可以根据需要进行调整。通过改变占空比,可以控制电路

    2024年02月02日
    浏览(54)
  • 利用蜂鸣器播放音乐

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

    2024年02月12日
    浏览(51)
  • STM32蜂鸣器播放音乐(代码全)

    在STM32F103ZET6板子上使用蜂鸣器播放音乐,我们可以将其分为几个模块:初始化模块、蜂鸣器控制模块、音乐播放模块和主函数模块。以下是一个简单的示例代码,使用STM32 HAL库和定时器来驱动蜂鸣器播放音乐。 首先,确保你已经配置了STM32CubeMX或STM32CubeIDE,并生成了HAL库代码

    2024年04月25日
    浏览(43)
  • 使用单片机控制蜂鸣器播放音乐的代码

    在嵌入式系统中,单片机常常被用于控制各种外设,其中包括蜂鸣器。蜂鸣器是一种能够发出声音的电子元件,可以通过单片机的控制来播放各种音乐或声效。本文将介绍如何使用单片机控制蜂鸣器播放音乐,并提供相应的源代码。 在开始编写代码之前,我们首先需要确定使

    2024年02月01日
    浏览(39)
  • MCU-51:单片机蜂鸣器播放音乐和提示音

    蜂鸣器是一种将电信号转换为声音信号的器件,常用来产生设备的按键音、报警音等提示信号 蜂鸣器按驱动方式可分为有源蜂鸣器和无源蜂鸣器 有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定 无源蜂鸣器:内部不带振荡源,需要控制器提供振

    2024年02月02日
    浏览(48)
  • 《FPGA学习》->蜂鸣器播放

    🍎 与其担心未来,不如现在好好努力。在这条路上,只有奋斗才能给你安全感。你若努力,全世界都会为你让路。 蜂鸣器的发声原理由振动装置和谐振装置组成,而蜂鸣器又分为无源他激型与有源自激型。本实验采用无源蜂鸣器,蜂鸣器的发声不同是靠频率不同进行控制的

    2024年02月08日
    浏览(45)
  • 音乐播放器蜂鸣器ROM存储歌曲verilog,代码/视频

    名称:音乐播放器蜂鸣器ROM存储歌曲 软件:Quartus 语言:Verilog 代码功能:        设计音乐播放器,要求至少包含2首歌曲,使用按键切换歌曲,使用开发板的蜂鸣器播放音乐,使用Quartus内的ROM IP核存储音乐文件, 简谱存储在ROM中,共2首歌曲。      《茉莉花》的简谱存

    2024年02月04日
    浏览(54)
  • STM32-PWM驱动无源蜂鸣器播放音乐(附网盘代码)

    一、工作原理: 1.利用STM32的定时器PWM输出通道,驱动蜂鸣器以特定频率发声,实现播放音乐的效果。 2.C调音符与频率对照表: 3.以下为常用的七声音阶频率(Hz): #define  MC         262    Do #define  MD         294    Re #define  ME         330     Mi #define  MF   

    2024年02月07日
    浏览(51)
  • 基于STM32制作的音乐播放器,用PWM控制蜂鸣器

    目录 效果展示  前言         一、设计背景         1.1、知识储备          二、系统设计方案         2.1、实现功能          2.2、硬件部分         2.3、软件部分          三、软件设计          3.1、设计流程图          3.2、音乐频率的设置          3.3、编

    2024年02月03日
    浏览(76)
  • 基于RT-Thread+STM32F407的蜂鸣器音乐播放器

    本项目为RT-Thread学习项目,参考于RT-Thread官网Demo示例 硬件基于STM32F407ZGT6正点原子探索者开发板+无源蜂鸣器模块 RTOS软件基于RT-Thread 4.0.5版本 编译器为官方的提供的RT-Thread Studio 会使用到STM32CubeMX 配置产生PWM波 会使用MobaXterm串口终端软件查看串口终端数据 官网Demo示例网址:

    2024年02月02日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包