




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数字逻辑实验电子琴一、实验目的1 了解乐曲演奏电路的工作原理;2 了解怎样控制音调和音长的变化,掌握乐曲演奏电路的设计方法;3 进一步熟悉数字逻辑实验的设计思想,学会在原实验基础上进行创新。二、实验创新点1.本实验将乐曲演奏电路新增加了一个用户子弹奏模块,变为电子琴;2.本实验利用公式计算出了所有半音的分频系数和预置数,并应用到歌曲中;3.本实验中的电子琴模块,当选择不同的按键时,可以再7段数码显示管上显示相应的数字,即:1(do)、2(re)、3(mi)、4(fa)、5(sol)、6(la)、7(si)、8(song)。三、实验原理1.乐理的基础知识唱名(Syllable names)唱名是
2、指在音阶上各音的名称。通常使用1do、2re、3mi、4fa、5sol、6la、7si。2.音调的控制频率的高低决定了音调的高低,相邻两个半音之间的频率之比为2的12次根。根据这点,可以计算出简谱中从低音1到高音7之间每个唱名对应的频率如表所示:音名频率(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.92低音5391.99中音5783.99高音51567.98低音6440中音6880高
3、音61760低音7439.88中音7987.76高音71975.52本实验选取6MHz为基准频率,采用加载预置数法。先使分频计数器在输入时钟的作用下开始加1计数,当计到最大值时,则加载一个预置数(预置数=计数器最大值-分频系数);然后使分频计数器在预置数的基础上开始加1计数,当计到最大值时,则又加载预置数。这样使计数器的计数长度实际就是分频系数的值。每次当分频计数器计到最大值时,产生分频后的输出时钟信号。下表列出了所有唱名(包括半音)对应的分频系数及分频计数器的预置数。唱名的分频系数=3MHz/唱名频率;预置数=计数器最大值-分频系数=16383-分频系数;唱名分频系数预置数唱名分频系数预置数
4、唱名分频系数预置数低音1114684915中音1573410649高音1286713516低音b2108245559中音b2541210971高音b2270613677低音2102176166中音2510811275高音2255413829低音b396436740中音b3482211561高音b3241113972低音391027281中音3455111832高音3227614107低音485917792中音4429612087高音4214814235低音b581098274中音b5405512328高音b5202714356低音576548729中音5382712556高音519131447
5、0低音b672249159中音b6361212771高音b6180614577低音668199564中音6340912974高音6170514678低音b764369947中音b7321813165高音b7160914774低音7607510308中音7303713346高音7151914864此外,对于乐曲中的休止符,只要将分频系数设为0,使其对应的预置数为16383即可,此时扬声器不会发声。3.音长的控制在本实验中,电子琴中预先存放着一首歌曲梁祝,按下相应的键即可让电子琴自动演奏乐曲,在这个片段中,最短的音符为4分音符,如果将全音符的持续时间设为1s,则只需再提供一个4Hz的时钟频率即可产
6、生4分音符的时长。四、实验步骤:1总体设计思路电子琴的原理图如下:包括自动播放子模块和自弹奏子模块。在弹奏过程中,通过拨动L1-L7,即可实现对应的“do-si”,并且通过数码管显示1-7(表示现在正为自弹奏功能)。拨动L8,即为自动播放模块,此时扬声器自动播放乐曲梁祝片段,并且数码管显示数字8(表示正为自动播放功能),如果数码管显示为0,则说明处于待机状态,进行演奏。数码管显示自动播放模块电子琴模块(译码器原理)与门Clk_6MHzspeakerabcdefg与门自弹模块(手动)Clk_4Hzclrstartstop2.电子琴模块piano.v的设计电子琴模块功能框图如下:(1)自动播放模块
7、:扬声器2分频器反馈预置计数器6MHz预置数产生16Hz其中反馈预置计数器对基准频率6MHz进行分频,产生分频后的输出时钟信号。计数器需加载的预置数由预置数产生电路产生。反馈预置计数器产生的输出时钟再经过2分频器,成为方波信号,以驱动扬声器发声。(2)自弹奏模块L1L2L3L4L5L6L7L8自弹奏模块speaker123456780五、实验代码:piano.vmodule piano(in,clk_6MHz,clk_4Hz,song,speaker,a,b,c,d,e,f,g); input in,clk_6MHz,clk_4Hz,song; output speaker; output a
8、,b,c,d,e,f,g;reg speaker;reg a,b,c,d,e,f,g;reg7:0 state; reg song_on; wire6:0 in; reg3:0 high,med,low; reg13:0 divider,origin; reg7:0 counter; reg out; wire carry; reg20:0 i; parameter zero=8'b0000_0000, one=8'b0000_0001, two=8'b0000_0010, three=8'b0000_0100, four=8'b0000_1000, f
9、ive=8'b0001_0000, six=8'b0010_0000, seven=8'b0100_0000; initial begin song_on<=0; end always (posedge song) begin song_on<=song_on; end always(in)beginif(song_on)a,b,c,d,e,f,g=7'b1111111;elsecase(in)zero:a,b,c,d,e,f,g=7'b1111110;one:a,b,c,d,e,f,g=7'b0110000;two:a,b,c,d,
10、e,f,g=7'b1101101;three:a,b,c,d,e,f,g=7'b1111001;four:a,b,c,d,e,f,g=7'b0110011;five:a,b,c,d,e,f,g=7'b1011011;six:a,b,c,d,e,f,g=7'b1011111;seven:a,b,c,d,e,f,g=7'b1110000;default:a,b,c,d,e,f,g=7'bx;endcaseendalways (posedge clk_6MHz) begin if(song_on) speaker<=out;else be
11、gin case(in) zero:begin speaker<=0; i<=0; end one:begin /do if(i>=11451) begin speaker=!speaker; i<=0; end else i<=i+1; end two:begin /re if(i>=10204) begin speaker=!speaker; i<=0; end else i<=i+1; end three:begin /mi if(i>=9091) begin speaker=!speaker; i<=0; end else i
12、<=i+1; end four:begin / fa if(i>=8596) begin speaker=!speaker; i<=0; end else i<=i+1; end five:begin /so if(i>=7653) begin speaker=!speaker; i<=0; end else i<=i+1; end six:begin /lo if(i>=6818) begin speaker=!speaker; i<=0; end else i<=i+1; end seven:begin /si if(i>=
13、6073) begin speaker=!speaker; i<=0; end else i<=i+1; end default:begin speaker<=0; i<=0; end endcase end end assign carry=(divider=16383); always (posedge clk_6MHz) begin if(carry) divider<=origin; else divider<=divider+1; end always (posedge carry) begin out<=out; end always (p
14、osedge clk_4Hz) begin case(high,med,low) 'b000000000011: origin<=7281; 'b000000000101: origin<=8730; 'b000000000110: origin<=9565; 'b000000000111: origin<=10310; 'b000000010000: origin<=10647; 'b000000100000: origin<=11272; 'b000000110000: origin<=118
15、31; 'b000001010000: origin<=12556; 'b000001100000: origin<=12974; 'b000100000000: origin<=13516; 'b000000000000: origin<=16383; endcase end always (posedge clk_4Hz) begin if(counter=63) counter<=0; else counter<=counter+1; case(counter) /¼ÇÆ× 0:
16、high,med,low<='b000000000011; 1: high,med,low<='b000000000011; 2: high,med,low<='b000000000011; 3: high,med,low<='b000000000011; 4: high,med,low<='b000000000101; 5: high,med,low<='b000000000101; 6: high,med,low<='b000000000101; 7: high,med,low<=
17、9;b000000000110; 8: high,med,low<='b000000010000; 9: high,med,low<='b000000010000; 10: high,med,low<='b000000010000; 11: high,med,low<='b000000100000; 12: high,med,low<='b000000000110; 13: high,med,low<='b000000010000; 14: high,med,low<='b000000000101
18、; 15: high,med,low<='b000000000101; 16: high,med,low<='b000001010000; 17: high,med,low<='b000001010000; 18: high,med,low<='b000001010000; 19: high,med,low<='b000100000000; 20: high,med,low<='b000001100000; 21: high,med,low<='b000001010000; 22: high,me
19、d,low<='b000000110000; 23: high,med,low<='b000001010000; 24: high,med,low<='b000000100000; 25: high,med,low<='b000000100000; 26: high,med,low<='b000000100000; 27: high,med,low<='b000000100000; 28: high,med,low<='b000000100000; 29: high,med,low<=
20、9;b000000100000; 30: high,med,low<='b000000100000; 31: high,med,low<='b000000100000; 32: high,med,low<='b000000100000; 33: high,med,low<='b000000100000; 34: high,med,low<='b000000100000; 35: high,med,low<='b000000110000; 36: high,med,low<='b0000000001
21、11; 37: high,med,low<='b000000000111; 38: high,med,low<='b000000000110; 39: high,med,low<='b000000000110; 40: high,med,low<='b000000000101; 41: high,med,low<='b000000000101; 42: high,med,low<='b000000000101; 43: high,med,low<='b000000000110; 44: high,med,low<='b000000010000; 45: high,med,low<='b000000010000; 46: high,med,low<='b000000100000; 47: high,med,low<='b000000100000; 48: high,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论