音乐播放器VHDL蜂鸣器数码管显示简谱,视频/代码

news2025/1/16 5:44:08

名称:音乐播放器数码管显示简谱蜂鸣器

软件:Quartus

语言:VHDL

代码功能:

设计音乐播放器,播放一首歌,使用开发板的蜂鸣器播放音乐,使用Quartus内的ROM IP核存储音乐文件,使用数码管显示简谱,led显示节奏

简谱存储在ROM中,具体值可以打开music.mif文件查看

mif文件说明:

8表示简谱1

9表示简谱2

10表示简谱3

以此类推

每个简谱对应4个相同的值

演示视频:音乐播放器VHDL蜂鸣器数码管显示简谱_Verilog/VHDL资源下载

代码下载:音乐播放器VHDL蜂鸣器数码管显示简谱_Verilog/VHDL资源下载名称:音乐播放器数码管显示简谱蜂鸣器(代码在文末付费下载)软件:Quartus语言:VHDL代码功能:设计音乐播放器,播放一首歌,使用开发板的蜂鸣器播放音乐,使用Quartus内的ROM IP核存储音乐文件,使用数码管显示简谱,led显示节奏简谱存储在ROM中,具体值可以打开music.mif文件查看mif文件说明:8表示简谱19表示简谱210表示简谱3以此类推每个简谱对应4个相同的值演示视频:部icon-default.png?t=N7T8http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=196

部分代码展示

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
--播放器控制
ENTITY music_ctrl IS
   PORT (
      sysclk     : IN STD_LOGIC;--50M晶振
      stop_key   : IN STD_LOGIC;
      start_key  : IN STD_LOGIC;--开始
      tonecode   : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
      tonestep   : IN STD_LOGIC_VECTOR(9 DOWNTO 0);
      led        : OUT STD_LOGIC;--指示灯
      spkout     : OUT STD_LOGIC--蜂鸣器输出
   );
END music_ctrl;
ARCHITECTURE trans OF music_ctrl IS
--调用ROM
COMPONENT ROM IS
PORT
(
address: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
clock: IN STD_LOGIC  ;
q: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END COMPONENT;
   
   SIGNAL addr             : STD_LOGIC_VECTOR(21 DOWNTO 0);--分频控制字
   SIGNAL divclk_counter   : STD_LOGIC_VECTOR(24 DOWNTO 0);
   SIGNAL musicclk         : STD_LOGIC;
   SIGNAL musickeyshiftbuf : STD_LOGIC_VECTOR(31 DOWNTO 0);
   SIGNAL musicno          : STD_LOGIC_VECTOR(1 DOWNTO 0);
   
   SIGNAL step             : STD_LOGIC_VECTOR(9 DOWNTO 0);
   SIGNAL codeaddr1        : STD_LOGIC_VECTOR(7 DOWNTO 0);
   
   SIGNAL model_Key_down   : STD_LOGIC;
   
   SIGNAL ROM_data         : STD_LOGIC_VECTOR(7 DOWNTO 0);
   
   SIGNAL music_select     : STD_LOGIC := '0';
BEGIN
   
 --例化ROM,ROM里面存了乐谱  
   i_ROM : ROM
      PORT MAP (
         address  => codeaddr1,
         clock    => musicclk,
         q        => ROM_data
      );
   led <= music_select;
   PROCESS (sysclk, stop_key, start_key)
   BEGIN
      IF (sysclk'EVENT AND sysclk = '1') THEN
         IF ((NOT(stop_key)) = '1') THEN
            music_select <= '0';--停止
         ELSIF ((NOT(start_key)) = '1') THEN
            music_select <= '1';--开始
         END IF;
      END IF;
   END PROCESS;
   
   
   step <= tonestep;
   PROCESS (sysclk)
   BEGIN
      IF (sysclk'EVENT AND sysclk = '1') THEN
         addr <= addr + ("000000000000" & step);--step是根据音乐文件产生的频率控制字,不同step产生不同频率的spkout
      END IF;
   END PROCESS;
   
   
   PROCESS (sysclk)
   BEGIN
      IF (sysclk'EVENT AND sysclk = '1') THEN
         IF (divclk_counter = "0000000000000000000001000") THEN--50M/(1799999*2)=分频到13.9Hz,为便于仿真,计数器0000110110111011100111111改小为0000000000000000000001000
            musicclk <= (NOT(musicclk));--musicclk=13.9Hz
            divclk_counter <= "0000000000000000000000000";
         ELSE
            divclk_counter <= divclk_counter + "0000000000000000000000001";
         END IF;
      END IF;
   END PROCESS;

   

   PROCESS (sysclk)

   BEGIN

      IF (sysclk'EVENT AND sysclk = '1') THEN

         IF (music_select = '0') THEN

            spkout <= '1';--0时蜂鸣器拉高,不唱

         ELSE

            spkout <= addr(3);--addr的最高位就是输出蜂鸣器的频率--addr2

         END IF;

      END IF;

   END PROCESS;

   

   

   PROCESS (musicclk, stop_key)

   BEGIN

      IF ((NOT(stop_key)) = '1') THEN

         codeaddr1 <= "00000000";

      ELSIF (musicclk'EVENT AND musicclk = '1') THEN

         IF (music_select = '1') THEN

            tonecode <= ROM_data;--播放歌曲

            IF (codeaddr1 = "11111111") THEN

               codeaddr1 <= "00000000";--播放完后循环

            ELSE

               codeaddr1 <= codeaddr1 + "00000001";

            END IF;

         END IF;

      END IF;

   END PROCESS;

   

   

END trans;

设计文档:

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. 仿真图

整体仿真图

频率控制字模块

音乐控制模块

显示模块

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1108110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

编程语言常识

看图区别编程语言 什么是强类型、弱类型语言&#xff1f;哪种更好&#xff1f; 强类型语言 强类型语言是一种强制类型定义的语言&#xff0c;即一旦某一个变量被定义类型&#xff0c;如果不经强制转换&#xff0c;那么它永远就是该数据类型。 在强类型语言中&#xff0c;变量的…

Linux考试复习整理

文章目录 Linux考试整理一.选择题1.用户的密码现象放置在哪个文件夹&#xff1f;2.删除文件或目录的命令是&#xff1f;3.显示一个文件最后几行的命令是&#xff1f;4.删除一个用户并同时删除用户的主目录5.Linux配置文件一般放在什么目录&#xff1f;6.某文件的组外成员的权限…

CUDA编程入门系列(七) GPU内存如何管理

一、内存使用 1.CUDA程序会使用GPU内存与CPU内存 2.CPU内存的分配与释放是标准的,例如new和delete,malloc与free 3.GPU上内存涉及分配和释放使用CUDA提供的库函数实现 4.CUDA/GPU内存与CPU内存的互相传输 这里主要讲全局内存与共享内存的管理 二、CPU内存 栈:有编译器自动分配释…

哪些行业需要做等保?

等保适用于各种行业&#xff0c;尤其是对于涉及国家安全、金融、电信、能源、交通、医疗等重点领域的机构和企业更为重要。以下是一些常见的需要进行等保的行业&#xff1a; 政府部门和政府机构&#xff1a;各级政府部门、公安、国防等机构需要对信息系统进行等级保护测评和认证…

嵌入式养成计划-43----QT QMainWindow中常用类的使用--ui界面文件--资源文件的添加--信号与槽

一百零九、QMainWindow中常用类的使用 109.1 菜单栏 QMenuBar 菜单栏 QMenuBar 最多只能有一个 109.2 工具栏 QToolBar 工具栏 QToolBar 可以有多个 109.3 状态栏QStatusBar 状态栏 QStatusBar 最多只能有一个 109.4 浮动窗口QDockWidget 浮动窗口 可以有多个 109.5 代…

医疗图像分割实践NNUnet-V2 基于window10+3090配置。官方数据Task_02

Window10 配置NNUnet完成官方任务分割 NNUnet论文介绍 nnUnet是一个针对医学图像分割提出得一个即开即用的框架&#xff0c;用户只需要按照官方给出的数据要求进行格式转换便可以进行快速的医学图像分割的训练和推演。其更新的V2版本代码变得更加易读和方便使用&#xff0c;并…

GitLab使用webhook触发Jenkins自动构建

1、jenkins安装gitlab插件 在插件管理中&#xff0c;搜索gitlab安装这个插件。 2、job中配置webhook地址和密钥 进入job设置&#xff0c;构建触发器中就可以看到gitlab的webhook配置&#xff0c;复制URL地址和随机令牌至gitlab中 勾选后&#xff0c;就可以展开设置&#xff…

Go语言入门心法(十):Go语言操作MYSQL(CRUD)

Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 Go语言入门心法(六): HTTP面向客户端|服务端编程 Go语言入门心法(八): mysql驱动安装报错onnection failed Go语言入门心法(…

黑白棋(Othello, ACM/ICPC World Finals 1992, UVa220)rust解法

你的任务是模拟黑白棋游戏的进程。黑白棋的规则为&#xff1a;黑白双方轮流放棋子&#xff0c;每次必须让新放的棋子“夹住”至少一枚对方棋子&#xff0c;然后把所有被新放棋子“夹住”的对方棋子替换成己方棋子。一段连续&#xff08;横、竖或者斜向&#xff09;的同色棋子被…

【黑马程序员】MySQL学习记录二(SQL)案例

案例1&#xff08;数据类型、DDL、DML、DQL&#xff09; 根据需求创建表&#xff08;设计合理的数据类型、长度&#xff09; 1、设计一张员工信息表&#xff0c;要求如下 create table emp( id INT COMMENT 编号, workno VARCHAR(10) COMMENT 员工工号, name VARCHAR(10) COM…

企业工厂车间台式电脑经常有静电导致开不开机,如何彻底解决?

环境: HP 480G7 Win10 专业版 问题描述: 企业工厂车间台式电脑经常有静电导致开不开机,如何彻底解决? 开机电源指示灯闪,显示器黑屏没有画面开不了机,一般是把主机电源断了,把主机盖打开 把内存条拔了之后长按开机按键10秒以上然后插上内存条开机正常 相对与有些岗…

智慧应急三维电子沙盘系统

1 概述 深圳易图讯科技有限公司&#xff08;www.3dgis.top&#xff09;采用大数据、云计算、虚拟现实、物联网、AI等先进技术为支撑&#xff0c;以6博硕团队为核心&#xff0c;研发了智慧应急三维电子沙盘系统&#xff0c;成功案例100。该系统支持高清卫星影像、DEM高程数据、…

vue-pdf多页预览异常,Rendering cancelled, page 1 Error at BaseExceptionClosure xxx

项目开发使用vue-pdf,单页情况预览正常&#xff0c;多页vue-pdf预览异常&#xff0c;第一次预览时&#xff0c;会先弹出异常模态窗口&#xff0c;关闭模态窗口&#xff0c;pdf又是正常显示&#xff0c;报错信息及异常截图如下&#xff1a; 报错信息 Rendering cancelled, page…

使用Vue组件的watch监听-简单计算器

Vue组件的初探 一、浅析 这里做了一个全局的组件vue.component(mycomp,{}) 在<template></template>中写组件&#xff0c;将idcomp1 script中直接template:"#copm1" 其他的部分就是之前所讲的watch来实现简易计算器差不多 <div id"app"&…

6.5 Elasticsearch(五)Spring Data Elasticsearch - 增删改查API

文章目录 1.Spring Data Elasticsearch2.案例准备2.1 在 Elasticsearch 中创建 students 索引2.2 案例测试说明 3.创建项目3.1 新建工程3.2 新建 springboot module&#xff0c;添加 spring data elasticsearch 依赖3.3 pom.xml 文件3.4 application.yml 配置 4.Student 实体类…

SD卡与emmc的异同

eMMC与SD卡的异同&#xff1a; 物理尺寸和接口&#xff1a; eMMC&#xff1a;eMMC是一种嵌入式存储解决方案&#xff0c;通常采用BGA&#xff08;Ball Grid Array&#xff09;封装&#xff0c;焊接在电路板上。它没有标准的物理尺寸&#xff0c;而是以芯片的形式存在。SD卡&…

代理模式(初学)

代理模式 一、什么是代理模式 代理模式&#xff1a;为其他对象提供一种代理以控制对这个对象的访问 二、简单例子 这里面的骏骏就起到了代理的身份&#xff0c;而贵贵则是被代理的身份。 三、代码实现 1、用一个接口&#xff08;GivingGifts&#xff09;来保存送礼物的动作…

链表的概念+MySingleList的实现

文章目录 链表一、 链表的概念1.概念2. 结构 二、MySingleList的实现1 .定义内部类2 .创建链表3. 遍历链表并打印4.查找单链表中是否包含关键字key5.得到链表的长度6.头插法7. 尾插法8.任意位置插入8.删除结点清空 链表 顺序存储&#xff1a;顺序表/ArrayList 优点&#xff1…

Android平台GB28181设备接入模块之SmartGBD

大牛直播SDK研发的Android平台GB28181设备接入SDK&#xff08;SmartGBD&#xff09;&#xff0c;可实现不具备国标音视频能力的 Android终端&#xff0c;通过平台注册接入到现有的GB/T28181—2016服务&#xff0c;可用于如执法记录仪、智能安全帽、智能监控、智慧零售、智慧教育…

C#插入排序算法

插入排序实现原理 插入排序算法是一种简单、直观的排序算法&#xff0c;其原理是将一个待排序的元素逐个地插入到已经排好序的部分中。 具体实现步骤如下 首先咱们假设数组长度为n&#xff0c;从第二个元素开始&#xff0c;将当前元素存储在临时变量temp中。 从当前元素的前一…