音阶发生器实验报告-5112119025-王一飞.docx

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

音阶发生器实验报告5112119025 王一飞设计方案和设计过程基础部分:音名与频率的关系:音乐上的十二平均律规定,每两个八度音之间的频率相差一倍。在这两个八度音之间,分成十二个半音,每两个相邻半音的频率比为2^(1/12)。另外还规定,音名A的频率为440Hz。音名B到C之间,E到F之间为半音,其余为全音。这样,可计算得从A到al之间的每个音名的频率为:A:440Hz a:880Hz al:1760HzB:493.88Hz b:987.76HzC∶523.25Hz c:1046.50HzD: 587.33Hz d:1174.66HzE∶659.25Hz e:1318.51HzF∶698.46Hz f:1396.92HzG∶783.99Hz g:1567.98Hz由高频分得低频,采用以下思路:时钟频率4MHz,其周期为1/4M=0,而音频a1 为1760Hz,其周期远大于4MHz 的周期,而4M/1760=2272。因此,如果设计一个2272 进制的计数器,其时钟输入为4MHz,那其进位信号就是2272Hz。用这样的方法可以产生其它任意频率的信号。a 可由a1 二分频得到。由于频率较高,需加入一个t 触发器。通过将4m的晶频分频,得到不同的频率,在输入到mainplayer模块中,这个模块通过快速扫描,将每个时间对应的信号传给扬声器进行发声。扫描信号用2048Hz分频得到。扩展部分:扩展一:演奏乐曲,乐曲自选。这部分没什么特别,只需自己修改主模块,让其随时间发出自己编写的曲子。扩展二:用数码管实时显示乐曲简谱名称且按下一个按键后,暂停运行。产生不同频率的方法和基础部分一样,用数码管显示比较难,将每个频率对应一个二进制数,传给line模块,产生15个信号,对应15个二进制数,再在select模块分类,每种音阶对应一个二进制数,传给segment模块,其通过选择7个数码管的亮暗显示简谱名称。对于按键后的暂停。先将两种开关通过一个或非门,再通过circle模块,作为clk的使能端。当两个开关没打开时,clk正常走,否则停滞。扩展三:改用点阵来显示音阶名,而不采用简谱。只需将select的输出传给disp模块进行选择,每种输出对应一个点阵,通过这样来显示。顶层图基础部分:扩展部分:Tdf源代码基础部分:subdesignmainplayer(alow,ahigh,a1,blow,bhigh,clow,chigh,dlow,dhigh, elow,ehigh,flow,fhigh,glow,ghigh: input;clk: input;spk: output;)variablecount[4..0]: dff;begincount[].clk=clk;if count[]==h0 then spk=alow; end if;if count[]==h1 then spk=blow; end if;if count[]==h2 then spk=clow; end if;if count[]==h3 then spk=dlow; end if;if count[]==h4 then spk=elow; end if;if count[]==h5 then spk=flow; end if;if count[]==h6 then spk=glow; end if;if count[]==h7 then spk=ahigh; end if;if count[]==h8 then spk=bhigh; end if;if count[]==h9 then spk=chigh; end if;if count[]==ha then spk=dhigh; end if;if count[]==hb then spk=ehigh; end if;if count[]==hc then spk=fhigh; end if;if count[]==hd then spk=ghigh; end if;if count[]==he then spk=a1;count[].d=h0;else count[].d=count[].q+1; end if;end;//循环输出1,2,3,4,5,6….//以下几个是分频subdesignfreqaa( clk: input;freqaa: output;)variablecount[20..0]: dff;begindefaultsfreqaa=gnd;end defaults;count[].clk=clk;if count[]==h8E0 then freqaa=vcc;count[].d=h0;else count[].d=count[].q+1;end if;end;subdesig

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档