FPGA演奏歌曲(国际歌)
编曲部分
clk_out是周期为0.5s的时钟信号
M是使能段,当M为1时演奏歌曲
m表示不同音调,1-7对应中音do、ri、mi、fa、so、la、xi ,8-14对应高音 ,14-21对应低音
state表示状态,一共157个状态,每个状态为0.5s,全歌时长78.5s
module state(
input clk_out, //周期0.5s的时钟信号
input M,
output reg [4:0] m=0,
output reg [7:0] state=0);always@(posedge clk_out) if(~M|state>=157)state=0;elsestate=state+1;always@(M,state) //国际歌乐谱if(M)begincase(state) 0: m=5; 1: m=8; 2: m=7;3: m=9; 4: m=8; 5: m=5; 6: m=3;7: m=6; 8: m=6; 9: m=4;10: m=0;11: m=6; 12: m=9;13: m=8;14: m=7; 15: m=6;16: m=5;17: m=4;18: m=3; 19: m=3;20: m=3;21: m=5; 22: m=8; 23: m=7; 24: m=9;25: m=8;26: m=5;27: m=3; 28: m=6; 29: m=6; 30: m=4;31: m=6;32: m=9;33: m=8;34: m=7; 35: m=8;36: m=11; 37: m=7;38: m=8; 39: m=8;40: m=8; 41: m=0; 42: m=10; 43: m=9; 44: m=7; 45: m=7;46: m=6;47: m=7;48: m=8;49: m=6;50: m=7;51: m=7; 52: m=5; 53: m=5; 54: m=4; 55: m=5;56: m=6;57: m=6;58: m=9;59: m=8;50: m=7;51: m=7; 52: m=5; 53: m=6; 54: m=4; 55: m=5;56: m=6;57: m=6;58: m=9;59: m=8;60: m=7;61: m=7; 62: m=7; 63: m=0; 64: m=9; 65: m=9; 66: m=7;67: m=5;68: m=5;69: m=4;70: m=5;71: m=10; 72: m=10; 73: m=8; 74: m=6; 75: m=7; 76: m=8;77: m=7;78: m=9;79: m=8;80: m=6;81: m=5; 82: m=5; 83: m=5; 84: m=0; 85: m=10; 86: m=9;87: m=8;88: m=8;89: m=5;90: m=3; 91: m=6; 92: m=6; 93: m=4; 94: m=0; 95: m=9; 96: m=8;97: m=7;98: m=7;99: m=6; 100: m=5;101: m=5; 102: m=5; 103: m=5; 104: m=0; 105: m=5; 106: m=10; 107: m=10;108: m=9;109: m=5;110: m=8; //61111: m=8; 112: m=7; 113: m=7;114: m=6; 115: m=5; 116: m=6; 117: m=9;118: m=9;119: m=9;120: m=9; 121: m=0; 122: m=10; 123: m=9;124: m=8; 125: m=8; 126: m=5; 127: m=3;128: m=6;129: m=6;130: m=4; 131: m=0; 132: m=9; 133: m=8; 134: m=7; //71135: m=7; 136: m=6; 137: m=5;138: m=10;139: m=10;140: m=10; 141: m=10; 142: m=12; 143: m=12; 144: m=11; 145: m=10;146: m=9; 147: m=10;148: m=11;149: m=0; 150: m=11; 151: m=10; 152: m=10; 153: m=9; 154: m=9; 155: m=8; 156: m=8; 157: m=8;default: m=0;endcaseendelse if (~M)m=0;endmodule
音调部分
clk是50Mhz时钟
B为无源蜂鸣器,当无源蜂鸣器输入时钟不同时,会发出不同的声音,详情可看代码部分
当输入m为不同的值时,q控制蜂鸣器时钟频率(例如m=1 、q=47773、蜂鸣器时钟频率为50M/(47773×2)=523.3HZ,发出中音do。)
module music(input clk,input [4:0] m,input M,output reg B=0 );integer q=0;integer p=0; always@(posedge clk)begincase(m)1:q=47773; //523.3HZ中do2:q=42567; //587.3HZ 中ri 3:q=37919; //659.3HZ 中mi 4:q=35790; //698.5HZ 中fa5:q=31887; //784HZ 中so 6:q=28409; //880HZ 中la 7:q=25308; //987.8HZ 中xi8:q=23914; //1045.4HZ 高do 9:q=21282; //1174.7HZ 高ri 10:q=18960; //1318.5HZ 高mi11:q=17904; //1396.3HZ 高fa 12:q=15943; //1568HZ 高so 13:q=14204; //1760HZ 高la 14:q=12655; //1975.5HZ 高xi 15:q=95565; //261.6HZ 低do16:q=85120; //293.7HZ 低ri 17:q=75849; //329.6HZ 低mi 18:q=71592; //349.2HZ 低fa 19:q=63775; //392HZ 低so 20:q=56818; //440HZ 低la 21:q=50617; //493.9HZ 低xi endcase endalways@(posedge clk) beginif((p>=q)&M) beginp=0; B=~B;endelse if(M)p=p+1;else B=0; end endmodule
顶层模块
clk_0_5模块是分频器,输出周期为0.5s的时钟信号(比较简单,就不单独列出了)
state、music为乐曲、音调部分模块,上文已写
led_0是我之前写的显示ip核,可以显示当前播放进度,不影响核心功能,可以删除。
module buz(
input clk,
input M,
output B,
output [7:0] seg,
output [5:0] dig
);wire clk_out;
wire [4:0] m;
wire [7:0] state;clk_0_5s m1(clk,clk_out);
state m2(clk_out,M,m,state);
music m3(clk,m,M,B);
led_0 m4(clk,state/100,(state%100)/10,state%10,30,30,30,seg,dig);endmodule
效果演示
FPGA演奏国际歌
FPGA演奏歌曲(国际歌)相关推荐
- 用Python演奏《国际歌》
文章目录 一.背景与需求 二.必备知识 2.1 Python生成音乐的原理 2.2 十二平均律 2.3 简单乐理知识 三.实现 3.1 对琴谱进行编码 3.2 Music类 3.3 Staff类 3. ...
- c语言蜂鸣器放音乐程序,单片机按键蜂鸣器演奏歌曲功能C程序
BUZZER EQU P2.4 org 0000h ;主程序起始地址 ajmp main ;跳至主程序 org 000bh ;timer0中 ...
- 用计算机演奏歌曲谱子,我要用计算器弹曲子,求亲们发点计算器简谱
@长之安 2015-07-05 22:13:31 千本樱 是按键,不是简谱 221 221 221 24 221 221 2456 562121 562121 562121 4321 562121 5 ...
- 用python演奏歌曲
一.准备 电脑一台.python. 首先使用pip安装winsound: pip install winsound 接下来,就开始我们的正文.(当然,这篇文章正文会很短) 二.正文 此处,我以< ...
- MSP430学习笔记5-利用蜂鸣器演奏音乐
这个小程序仍然是定时器的运用,比较简单,具体的地方都在注释中注明了,参考注释. /********************************************* 程序功能:MCU控制蜂鸣器 ...
- 用matlab演奏周杰伦的《七里香》
问题描述 前几天在学习matlab的时候,发现了一篇用matlab演奏音乐的文章,不禁感叹matlab居然还能这么玩!于是我就学着用matlab演奏我最喜欢听的一首歌--周杰伦的<七里香> ...
- arduino蜂鸣器音乐代码_STM32驱动蜂鸣器演奏音乐“你笑起来真好看”
有源蜂鸣器与无源蜂鸣器的区别 这里的"源"不是指电源,而是指震荡源. 内部自带震荡源的为有源蜂鸣器,给电就能响,但是响的频率是固定的,即响的声音是固定的. 内部没有震荡源的为无源蜂 ...
- 单片机实验四(电子琴自动演奏)
一.实验设备 PC机一台.实验箱一台. 二.实验内容 实现电子琴功能,自动演奏歌曲<葫芦娃>片段,并设置两个按键来实现歌曲的"暂停"和"开始/停止" ...
- 【趣味】用MATLAB演奏《追光者》
[趣味]用MATLAB演奏<追光者> 看见有很多人用MATLAB演奏歌曲,也忍不住试了一下,以下附上源码 %%%%演奏<追光者>%%%% clear all;clc; fs = ...
最新文章
- html手机端适配怎么调试,html5面试常见问题及答案:移动端布局与适配篇
- 东北面人李---精品作品展
- 设置npm的registry
- UVa 11027 - Palindromic Permutation 回文串,组合加搜索
- shiro认证与授权:自定义realm
- 在vc或mfc中显示IplImage的方法
- Java 并发编程之 ConcurrentHashMap,ConcurrentSkipListMap
- php禁用exec,php – 警告:出于安全原因,已禁用`exec()`
- ubuntu 卸载opencv
- (14) 常用管理类软件需求征集 -- 组织机构管理
- 地图Web服务API接口——搜索POI(以高德地图为例)
- PHP学习笔记:利用gd库给图片打图片水印
- 各地的磁倾角_中国各地磁偏角
- 华大MCU在IAR下的调试环境搭建及相关补丁包(百度网盘链接)
- 二阶带通滤波器电路设计
- 安装Windows XP出现0X0000007B的解决方法
- ISP模块之色彩增强算法--HSV空间Saturation通道调整
- 记录Widows10系统崩溃后安装Widows7系统的心酸历程
- 打开浏览器时主页被锁定怎么也改不掉的一个好办法
- 6、网关 复杂分支流程
热门文章
- redis setnx java_一步步实现单机redis的分布式锁(setnx)
- matlab 图标分为两列,excel表格各组数据作图-EXCEL里如何将表示两组数据的两种图形放在同一个表......
- 果园种树java_农户院子种果树砌树圈有什么用?为什么果园种树不砌树圈?区别大...
- 2023年十大顶级SCRM系统盘点
- python输入10个数、找出对称数_Python入门100道习题(7)——找对称数
- android 5.1 keyguardhostview,android4.4的Keyguard心得
- 【Android 常见控件使用】AlertDialog(对话框)详解
- tiobe 2019年1月排行
- WSL-Centos8 Sstream 安装Vim
- python音频处理库_Python中音频处理库pydub的使用教程