欢迎来到天天文库
浏览记录
ID:11315936
大小:523.37 KB
页数:29页
时间:2018-07-11
《北邮数电实验报告简易钢琴》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数字电路实验报告简易电子琴设计与实现班级:201121XXXX学号:201121XXXX29姓名:傻逼xxxx年11月8号目录一.实验介绍21.实验目的22.实验所用仪器及元器件23.实验内容2基本内容2提高要求34.实验原理3二.实验设计与实现4291.实验思路42.程序设计53.仿真波形及分析9三.故障及debug过程10四.实验总结10一.实验介绍1.实验目的(1)进一步掌握VHDL和QuartusII软件的使用;(2)理解状态机的工作原理和设计方法;(3)掌握利用EDA工具进行自顶向下的电子系统设计方法。2.实验所用仪器及元器件(1)计算机;(2)EDA开发板及相应元器件。
2、293.实验内容(1)基本内容1、用8×8点阵进行游戏显示。2、BTN1~BTN7七个按键模拟钢琴演奏时的“1234567”七个音符。点阵的第一列对应音符“1”,第二列对应音符“2”,依此类推,低中高音自定。3、光点在点阵第一行随机出现,逐点下落,下落速度为0.2秒/行,如图1所示。4、在光点下落到点阵最后一行之前的过程中,如果按下与该列点阵相应的音符键,该光点消失,蜂鸣器演奏相应的音符声音,计分器加1。如果在光点下落到最后一行依然没有进行相应的按键操作,该光点消失,计分器不加分。计分器由数码管显示。5、每隔1秒在点阵的不同列的第一行出现一个光点。6、游戏时间为30秒,数码管倒计时
3、显示。(2)提高要求1、光点在点阵某行随机出现,然后逐点下落。2、下落速度随机变化。3、光点按照存储的乐曲顺序和速度的出现。4、自拟其它功能。4.实验原理29因为音阶的频率我们是知道的,设为f,而max2板上的clk信号是50MHz,所以要得到需要的f,只需要n=50M/f就可以得到分频的倍数了。以下是已知的所需频率f。音名频率(Hz)音名频率(Hz)音名频率(Hz)低音1261.63中音1523.25高音11046.50低音2293.67中音2587.33高音21174.66低音3329.63中音3659.25高音31381.51低音4349.23中音4698.46高音41396
4、.92低音5391.99中音5783.99高音51567.98低音6440中音6880高音61760低音7439.88中音7987.76高音71975.52二.实验设计与实现1.实验思路逻辑实验图如下:29开始档位选择高音档位低音档位中音档位Btn按钮29不同档位不同分频,点阵上对应点消失蜂鸣器2.程序设计整个程序我分成了三个大块,五个小块,三个大块分别是点阵、蜂鸣器分频、数码管,蜂鸣器分频最为简单。(1)首先从点阵说起,点阵我分成了两个小块,一部分负责扫描,即通过扫描显示输入图形,一部分负责图像的输入,这样做能简化程序结构,让程序思路更清晰。点阵图像的输入部分,又可简单地分为三个
5、功能的实现:每0.2秒点下落+每一秒产生一个新的点+按钮按下时对应的点消失。编写思路如下:29两个计时器,计时到0.2秒时,用连接符&实现逻辑右移,产生下落的效果,计时到1秒时,将存储的音符译码成对应的输入,把每一列的最高位置零,看起来就是点阵第一行产生了一个新的点,btn按钮嵌套在最外层,当7个btn中有一个为高电平时,把对应的列置为“11111111”。点阵的扫描模块,用列扫描的方式,因为点是一列一列下落的。代码有点长,所以附在了最后面,具体的实现是这样的:扫描模块:先将时钟分频,分一个不太高但又能产生视觉暂留的频率,基本上几百hz就行,尽量让每一个状态停留的时间长一些,产生点
6、就会更亮一些,再挂上一个range0to7的count计数器,对应点阵的八个输入,讲8个状态依次译码,每一状态下,分别让第一列亮、第二列亮、第三列亮……,同时给一个不同的row输入,输入由点阵图像模块产生。图像模块:29先将50MHz分频,得到一个5Hz的时钟,在5Hz的时钟下再挂上一个range0to4的count计数器,count每循环一轮就是一秒钟,每变一次就是0.2秒,所以在count的第一个状态给该产生点的那一列赋值,即“01111111”,同时其他7列向下移位。在count的另外四个状态下,8列都向下移位,不赋值。按键的值写成一个case语句,对应起7个按键,没有按键按
7、下时不做操作,一旦对应的按键按下时,将该列置为“11111111”,并将score信号取反,score信号作为数码管的输入,检测到上升沿或下降沿就出发数码管加1.按键检测代码:分这样5个状态的好处是:所有的赋值全部在一个if语句里,不会出现不同进程对同一变量重复赋值的情况,如果下落和产生新点写成两个进程的话,就必然会造成重复赋值。29定义一个新的“数字串”type用来储存音符,音符用0~6表示,对应简谱的1~7,音符在count的第一个状态下被译码,每隔1秒后移一位,
此文档下载收益归作者所有