北邮数电实验电子琴.docx

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
北邮数电实验电子琴

VHDL硬件描述语言程序设计简易电子琴演奏器姓名:chi目录一、设计课题的任务要求3二、系统设计3三、仿真波形及波形分析11四、源程序12五、功能说明41六、元器件清单及资源利用情况41七、故障及问题分析43八、总结和结论44设计课题的任务要求基本要求:用8×8点阵显示“1 2 3 4 5 6 7”七个音符构成的电子琴键盘。其中点阵的第一列用一个LED点亮表示音符“1”,第二列用二个LED点亮表示音符“2”,依此类推,如下图所示。1 2 3 4 5 6 7图1 点阵显示的电子琴键盘用BTN1~BTN7七个按键模拟电子琴手动演奏时的“1 2 3 4 5 6 7”七个音符。当某个按键按下时,数码管显示相应的音符,点阵上与之对应的音符显示列全灭,同时蜂鸣器演奏相应的声音;当按键弹开时数码管显示的音符灭掉,点阵显示恢复,蜂鸣器停止声音的输出。下图所示为按下BTN3按键时点阵的显示情况。1 2 3 4 5 6 7图2 按键按下后的点阵显示由拨码开关切换选择高、中、低音,并用数码管进行相应的显示。通过按键BTN0进行复位,控制点阵显示图1的初始状态。提高要求:可通过一个拨码开关进行手动/自动演奏的切换,并与点阵显示配合增加自动演奏乐曲的功能。增加手动演奏的音符存储、播放功能。系统设计设计思路简易电子琴的制作主要是利用不同频率的波来驱动蜂鸣器发出声响。通过输入不同的音符来设置不同的分频系数,使得50MHz的主频分频出不同频率的波。同时,演奏的音符还可以通过数码管和8*8点阵来动态显示。根据系统设计要求,该电子琴设计采用自顶向下的设计方法。整体的功能通过不同的底层模块配合来完成电子琴的功能。底层模块主要包括乐曲自动演奏模块、分频预置值产生模块和数控分频模块,数码管显示模块,8*8点阵显示模块五部分组成。用这种设计思路把整个系统分为了若干个模块,然后再在顶层文件中将各个模块组合在一起,从而体现出超、高速硬件描述语言VHDL的优势, 关于提高要求中通过一个拨码开关进行手动/自动演奏的切换,并与点阵显示配合增加自动演奏乐曲的功能,我打算将一首曲子的音符储存在自动播放的数组里面,然后通过计数器来顺序播放储存的音符。关于提高要求中的手动演奏的音符存储、播放功能,我打算通过编程实现类似数据结构中队列的模块,来储存手动输入的音符,然后在要播放的时候,队列里面的音符依次出队,从而实现音符储存播放的功能。总体框图数码管显示8*8点阵显示蜂鸣器输出音符输入高低音,自动手动图3简易电子琴总体结构框图是否自动播放查找对应的频率值结束开始输入按键点阵显示蜂鸣器输出数码管显示选择高低音是否图4简易电子琴逻辑流程图图5简易电子琴VHDL电路原理图分块设计分频模块div0由于实验电路板的主频是50Mhz,为了数码管和点阵的刷新显示,我们必须将50Mhz的频率进行分频。分频的程序来自电路中心的网站上面。在这个模块里,我设置分频系数为cnt=2499。从实验结果看,这个分频对数码管和点阵的显示有很好的效果数码管显示模块shuma我使用了2个数码管,第一个数码管显示1~7的音符,第二个数码管显示相关的信息,比如高音用H表示,低音用L表示,自动播放用A表示。两个数码管分别刷新,但由于刷新频率太快,人眼不能察觉,以为是两个数码管是同时亮的。在程序中我们通过duan : out std_logic_vector(7 downto 0)和 cat : out std_logic_vector(5 downto 0)来控制数码管的显示。当输入不同的音符和不同的控制信息时,duan和cat向量都有不同的值与之对应。8*8点阵显示模块dianzhen8*8点阵的显示和数码管的显示运用了同样的原理,在程序中我们通过row : out std_logic_vector(7 downto 0)和col : out std_logic_vector(7 downto 0)这两个向量来控制点阵的显示。当输入不同的音符时,点阵显示相应的形状。音符产生模块auto。这个模块的功能是,选择的不同模式来产生不同的音符。当选择自动播放模式时,随着计数器count的值增加,即地址值递增时,程序自动读取出事先储存的音符,并把这个音符输出。当选择手动演奏模式时,直接将通过BTN1~BTN7输入的向量当做音符输出yin :out std_logic_vector(6 downto 0);。分频预置值产生模块该模块的功能是通过音符以及高低音选项来查表找到对应的频率值。在程序中设置了全部音符对应的分频预置数。通过判断音符产生模块输出的音符 yin :in std_logic_vector(6 downto 0),以及拨码开关的高低音highlow :in std_logic_vector(1 do

文档评论(0)

yaobanwd + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档