乐曲硬件演奏电路设计.doc_第1页
乐曲硬件演奏电路设计.doc_第2页
乐曲硬件演奏电路设计.doc_第3页
乐曲硬件演奏电路设计.doc_第4页
乐曲硬件演奏电路设计.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

湖南人文科技学院课程设计报告课程名称:VHDL语言与EDA课程设计设计题目: 乐曲硬件演奏电路设计 系 别: 通信与控制工程系 专 业: 电子信息工程 班 级: 09电信 学生姓名: 学 号: 起止日期: 2012年06月13日 2012年06月22日指导教师: 教研室主任: 指导教师评语: 指导教师签名: 年 月 日成绩评定项 目权重成绩1、设计过程中出勤、学习态度等方面0.22、课程设计质量与答辩0.53、设计报告书写及图纸规范程度0.3总 成 绩 教研室审核意见:教研室主任签字: 年 月 日教学系审核意见: 主任签字: 年 月 日摘 要 乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数化库单元LPM器件。通过引入支持LPM的EDA软件工具,设计者可以设计出结构独立而且硅片的使用效率非常高的产品。本课设在EDA开发平台上利用VHDL语言设计数控分频器电路,利用数控分频的原理设计乐曲硬件演奏电路,并定制LPM-ROM存储音乐数据,以“挥着翅膀的女孩”,“菊花台”,“两只老虎”,“世上只有妈妈好”等四首乐曲为例,将音乐数据存储到LPM-ROM,就达到了以纯硬件的手段来实现四首不同乐曲的演奏效果。要想实现其他乐曲的演奏效果,只要修改LPM-ROM所存储的音乐数据,将其换成其他乐曲的音乐数据,再重新定制LPM-ROM,连接到程序中就可以实现其它乐曲的演奏。关键词:FPGA;EDA;VHDL;音乐 目 录设计要求11、方案论证与对比11.1方案一11.2方案二21.3综合对比22、乐曲演奏电路原理22.1 乐曲演奏电路原理框图22.2 音符频率的获取32.3 乐曲节奏的控制32.4 乐谱发生器42.5 乐曲演奏电路原理图43、音乐硬件演奏电路的设计实现53.1 地址发生器模块的VHDL语言设计53.2 分频预置数模块的VHDL语言设计83.3 数控分频模块的VHDL语言设计103.4 music模块123.4.1 音符数据文件133.4.2 LPM-ROM定制133.5 顶层文件144、时序仿真及下载调试过程164.1 时序仿真图164.2 引脚锁定以及下载174.3调试过程及结果17设计总结与心得体会18参考文献19乐曲硬件演奏电路设计设计要求能够播放音乐,通过按键控制音乐的播放暂停。扩展功能:与演奏发音相对应的简谱码输出在数码管上显示,并用三个LED灯显示对应音符的高音,中音,低音。争取可以在一个ROM装上多首歌曲,可手动或自动选择歌曲。1、方案论证与对比1.1方案一利用FPGA来实现乐曲硬件演奏电路。乐曲的12平均率规定:每2个八度(如简谱中的中音1与高音1)之间的频率相差1倍。在2个八度音之间,又可分为12个半音,每2个半音的频率比为12/2。另外,音符A的频率为440HZ,音符B到C之间,E到F之间为半音,其余为全音。由此可以计算出简谱中从低音l至高音1之间每个音符的频率。设计音符查找表电路模块,时钟模块,数控分频器模块,音乐节拍产生模块电路。ROM中的音乐数据文件可由编辑好的音符填入HEX文件中,再定制LPM_ROM,将音符数据加载入ROM中。在EDA技术与VHDL课程中,我们已经学习过数控分频器设计,即输入不同的预置数即可发出不同频率的声音。由此我们设计一功能模块,能够将乐曲中的音符逐一以对应的频率以预置数的形式置入数控分频计中,即可利用该数控分频计产生不同的声音,演奏出设定好的音乐。我们这次课程设计使用的是C调音阶频率表,各频率对应的预置数就与数控分频推动蜂鸣器发出声音的频率一一对应。在编写数控分频器时,不仅要考虑预置数的输入方式,还要考虑输入的速度,以及驱动蜂鸣器发声的频率。为了能够在ROM中同时存放多首歌曲,并可以手动选择需要的歌曲,故可将ROM中分若干段存放不同曲子。当手动选择歌曲时,可根据输入的选择信号,读出ROM中对应地址的曲子,并将ROM中的曲子完整的播放出来。为了显示高、中、低三种音调,可在音符到预置数的译码过程中,同时译出高、中、低三种音阶的信号,并利用三个LED灯输出信号。同时,也可利用该译码模块,将当前演奏的音符简谱表达出来。1.2方案二利用单片机来实现乐曲硬件演奏电路电路主要由AT89C52芯片,LED发光二极管,喇叭,晶振电路组成,由引脚输出定时器产生的各种固定频率的方波信号,然后由喇叭产生各种频率的声音。乐曲中不同的音符,实质就是不同频率的声音。通过单片机产生不同的频率的脉冲信号,经过放大电路,由蜂鸣器放出,就产生了美妙和谐的乐曲。同理,方波信号通过发光二极管可以使二极管闪烁发光,产生韵律灯的效果。由于该方案中使用内部振荡电路,XTAL1、XTAL2引脚外界石英晶体和微调电容构成的晶振电路。单片机音乐播放器系统总体设计由五个部分构成:晶振电路模块、复位电路模块、AT89C52单片机、发声模块以及按键模块。其中五个模块连接在AT89C52单片机上构成一个完整的系统,如图1所示。图1 单片机音乐播放器系统总体设计图 1.3综合对比与利用EDA微处理器来实现乐曲演奏相比,以单片机完成乐曲演奏的逻辑要复杂一些,而且利用C语言编程的时候,必需了解单片机各端口功能及其外围电路。而用VHDL语言编程不需了解硬件,只需在锁定引脚的时候了解硬件。综合考虑,所以选择方案一。2、乐曲演奏电路原理2.1 乐曲演奏电路原理框图 如图2所示: 图2 音乐演奏电路原理框图该主系统由三个模块:Songer顶层文件,Spkout,分频器、译码器组成。且Songer顶层文件还包括3个子文件分别是NoteTabs,ToneTaba和Speakera,此外,我们还需建立一个名为“music”的LPM_ROM模块和与NoteTabs模块连接。2.2 音符频率的获取 多个不同频率的信号可通过对某个基准频率进行分频器获得。由于各个音符的频率多为非整数,而分频系数又不能为小数,故必须将计算机得到的分频系数四舍五入取整。若基准频率过低,则分频系数过小,四舍五入取整后的误差较大。若基准频率过高,虽然可以减少频率的相对误差,但分频结构将变大。实际上应该综合考虑这两个方面的因素,在尽量减少误差的前提下,选取合适的基准频率。本文中选取1MHz的基准频率。由于现有的高频时钟脉冲信号的频率为12MHz,故需先对其进行12分频,才能获得1MHz的基准频率。对基准频率分频后的输出信号是一些脉宽极窄的尖脉冲信号(占空比=1/分频系数)。为提高输出信号的驱动能力,以使扬声器有足够的功率发音,需要再通过一个分频器将原来的分频器的输出脉冲均衡为对称方波(占空比=1/2),但这时的频率将是原来的1/2,即为500KHZ。由于最大分频系数是3795,故分频器采用12位二进制计数器才能满足要求。2.3 乐曲节奏的控制 “挥着翅膀的女孩”,“菊花台”,“两只老虎”,“世上只有妈妈好”等四首乐曲,最小的节拍为1/4拍,若将1拍的时间定为1秒,则只需要提供一个4Hz的时钟频率即可产生1/4拍的时长(0.25秒),对于其它占用时间较长的节拍(必为1/4拍的整数倍)则只需要将该音符连续输出相应的次数即可。 计数时钟信号作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然降低。2.4 乐谱发生器本次设计将乐谱中的音符数据存储在LPM-ROM中,如“挥着翅膀的女孩”乐曲中的第一个音符为“10”,此音在逻辑中停留了3个时钟节拍,即0.75秒的时间,相应地,音符“10”就要在LPM-ROM中连续的三个地址上都存储。当一个4Hz的时钟来时,相应地就从LPM-ROM中输出一个音符数据。当外部的按键选择不同的乐曲播放时,乐谱发生器会从相应的LPM-ROM地址中连续输出音符。2.5 乐曲演奏电路原理图我们知道,组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的两个基本要素,问题是如何来获取这两个要素所对应的数值以及通过纯硬件的手段来利用这些数值实现所希望乐曲的演奏效果。图2中,模块NoteTabs类似于弹琴人的手指;ToneTaba类似于琴键;Speakera类似于琴弦或音调发声器。音符的频率可以由图2中的Speakera获得,这是一个数控分频器。由其clk端输入一具有较频率(这里是12MHz)的信号,通过Speakera分频后由Spkout输出,由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,但这时的频率将是原来的1/2。Speakera对clk输入信号的分频比由12位预置数Tone11.0决定。Spkout的输出频率将决定每一音符的音调,这样,分频计数器的预置值Tone11.0与Spkout的输出频率,就有了对应关系。音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定,图2中模块ToneTaba的功能首先是为Speakera提供决定所发音符的分频预置数,而此数在Speakera输入口停留的时间即为此音符的节拍值。输向ToneTaba中Index4.0的值ToneIndex4.0的输出值与持续的时间由模块NoteTabs决定。在NoteTabs中设置了一个8位二进制计数器,作为音符数据ROM的地址发生器。综上得到乐曲演奏电路的原理图如图3所示。图3 乐曲演奏电路的原理图3、音乐硬件演奏电路的设计实现音乐硬件演奏电路主要是用VHDL语言来设计,并利用QuartusII软件工具来编译、测试和仿真。根据顶层原理图,共分为地址发生器模块、分频预置数模块、数控分频模块这三个模块。而music模块是存放乐曲中的音符数据,在我们的顶层原理图中并没有显示出来,地址发生器模块作为music模块中所定制的音符数据ROM的地址发生器,分频预置数模块提供分频预置数即给数控分频模块提供计数初值。数控分频模块根据分频预置数输出各个音符所对应的频率。3.1 地址发生器模块的VHDL语言设计 地址发生器模块设置了一个9位二进制计数器(计数最大值为512)。作为音符数据LPM-ROM的地址发生器,能够恰好读出存放在LPM-ROM地址中四首乐曲的所有音符。每来一个时钟脉冲信号(Clk),9位二进制计数器就计数一次,LPM-ROM文件中的地址也就随着递增,音符数据LPM-ROM中的音符也就一个接一个连续的取出来了。当外部的按键选择不同的乐曲播放时,乐谱发生器会从相应的LPM-ROM地址中连续输出音符。这个计数器的计数频率选为4Hz,即每一计数值的停留时间为0.25秒,恰为当全音符设为1秒,四四拍的4分音符持续时间。例如,地址发生器在以下的VHDL逻辑描述中,“挥着翅膀的女孩”乐曲的第一个音符为“10”,此音在逻辑中停留了3个时钟节拍,即0.75秒时间。那么相应随着程序中的计数器按4Hz的时钟频率作加法计数时,即随地址递增时,将从音符数据ROM中将连续取出3个音符“10”通过toneindex4.0端口输向分频预置数模块。这样四首乐曲中的音符就一个接一个的通过toneindex4.0端口输向分频预置数模块。地址发生器程序如下所示:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity notetabs is port(clk:in std_logic; rst:in std_logic;en:in std_logic; choose:in std_logic_vector (1 downto 0); toneindex:out std_logic_vector (4 downto 0); end; architecture one of notetabs is component music port(address:in std_logic_vector(8 downto 0); inclock:in std_logic;q:out std_logic_vector(4 downto 0); end component; signal counter:std_logic_vector(8 downto 0); signal tmp:std_logic_vector(8 downto 0); signal rset:std_logic; begin choosemusic:process(choose(0),choose(1),clk) -选歌信号检测进程: variable a:std_logic_vector(1 downto 0); variable b:std_logic_vector(1 downto 0); variable c:std_logic_vector(1 downto 0); begin if clkevent and clk=1 then b:=a; a:=choose; c:=b-a; end if;if c=00 then rset=0; else rset=1; end if; end process; cnt8: process(clk,counter,rset,rst,choose,tmp) -ROM地址控制输出进程 begin if rst=1 then tmp=000000000; elsif rset=1 then tmp=000000000; elsif tmp=127 then tmp =000000000; elsif (clkevent and clk=1) if then en=0 then tmp counter counter counter counter countercounter,q=toneindex,inclock=clk);end; 程序的功能是通过按键选取要播放的乐曲,在每到来一个时钟时,当复位键clk和暂停键en没有按下时,地址值address递增1,把选中的乐曲在LPM_ROM地址上所存储的音符连续数据输出。当复位键clk按下时,停止播放乐曲,再次按下复位键clk,重新输出当前乐曲音符;当暂停键en按下时,停止播放乐曲,再次按下暂停键en,从暂停处开始输出当前乐曲的音符;3.2 分频预置数模块的VHDL语言设计分频预置数模块是乐曲简谱码对应的分频预置数查表电路。它提供了每个音符所对应的分频预置数,即给数控分频模块提供计数初值,以“挥着翅膀的女孩”,“菊花台”,“两只老虎”,“世上只有妈妈好”等四首乐曲为例,列出了在这个乐曲中所用到的21个音符的分频预置数。表1是音符频率及其对应的预置数表1音符频率及其对应的预置数音阶频率频率设定数 预置数音阶频率频率设定数预置数低74152891 101101001011 中35543193 110001111001 低63702745 101010111000 中24933082 110000001001 低53292576 101000010000 中14402960 101110001111 低42932390 100101010101 高716613795 111011010010 低32772291 100011110010 高614793758 111010101101 低22462063 100000001111 高513183717 111010000100 低12201823 11100011111 高411743670 111001010110 中78303494 110110100101 高311083645 111000111100 中67403420 110101011100 高29873589 111000000101 中56593337 110100001001 高18803528 110111000111 中45873244 110010101100 0音0 4095111111111111在这个模块的VHDL逻辑描述中设置了以“挥着翅膀的女孩”,“菊花台”,“两只老虎”,“世上只有妈妈好”等四首乐曲的全部音符所对应的分频预置数,共21个,每一音符的停留时间由音乐节拍和地址发生器模块的时钟(Clk)的输入频率决定,在此为4Hz。这21个值的输出由程序的5位输入值index4.0确定。输向分频预置数模块的程序中index4.0的值又由地址发生器模块的输出toneindex4.0的输出值和持续时间决定。程序如下:library ieee; use ieee.std_logic_1164.all; entity tonetaba is port(index:in std_logic_vector (4 downto 0); code:out std_logic_vector(3 downto 0); high0:out std_logic_vector(2 downto 0); tone:out std_logic_vector(11 downto 0); end; architecture one of tonetaba is begin search:process(index) begin case index is when00000=tone=111111111111;code=0000;high0tone=011100011111;code=0001;high0tone=100000001111;code=0010;high0tone=100011110010;code=0011;high0tone=100101010101;code=0100;high0tone=101000010000;code=0101;high0tone=101010111000;code=0110;high0tone=101101001011;code=0111;high0tone=101110001111;code=0001;high0tone=110000001001;code=0010;high0tone=110001111001;code=0011;high0tone=110010101100;code=0100;high0tone=110100001001;code=0101;high0tone=110101011100;code=0110;high0tone=110110100101;code=0111;high0tone=110111000111;code=0001;high0tone=111000000101;code=0010;high0tone=111000111100;code=0011;high0tone=111001010110;code=0100;high0tone=111010000100;code=0101;high0tone=111010101101;code=0110;high0tone=111011010010;code=0111;high0null; end case; end process; end; 程序的功能是输出各个音符所对应的分频预置数,当index是“00000”,tone输出为4095,即休止符的分频预置数,同时数码管code显示0,high0的值为“000”;当index是“00010”时, tone输出为2063,即低音2的分频预置数,同时数码管code显示2,high0的值为“001”;当index是“10101”时, tone输出为3795即高音7的分频预置数,同时数码管code显示7,high0的值为“100”。当index取不同的值时,tone分别输出相应音符的分频预置数和不同的code值及其不同的high0值。3.3 数控分频模块的VHDL语言设计音符的频率由数控分频模块获得,这是一个数控分频电路。它是由一个初值可变的加法计数器构成。该计数器的模为4095,当计数器记满时,计数器产生一个溢出信号,此溢出信号就是用作发音的频率信号。在计数器的输入端给定不同的初值,而此预置数就是表1中的计数初值,就可得到不同音符的发音频率信号。其时钟(Clk)端输入的是12MHz的信号,从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,这时的频率就变为原来的1/2,刚好就是相应音符的频率。数控分频模块中对Clk输入信号的分频比由12位预置数tone11.0决定。Spkout的输出频率将决定每一个音符的音调,这样,分频计数器的预置值tone11.0与Spkout的输出频率就有了对应关系。数控分频模块程序如下所示: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsined.all; entity speakera is port(clk:in std_logic; tone:in std_logic_vector(11 downto 0); spks:out std_logic); end; architecture one of speakera is signal preclk,fullspks:std_logic; begin divideclk:process(clk)variable count4:std_logic_vector(3 downto 0); begin preclk11 then preclk=1;count4:=0000; elsif clkevent and clk=1 then count4:=count4+1; end if; end process; genspks:process(preclk,tone)-12位预置数数控分频器 variable count11:std_logic_vector(11 downto 0); begin if preclkevent and preclk=1 then if count11=111111111111then count11:=tone; fullspks=1; else count11:=count11+1;fullspks=0;end if; end if; end process; delayspks:process(fullspks)-2分频,蜂鸣器推动电路。 variable count2 :std_logic; begin if fullspksevent and fullspks =1 then count2:=not count2; if count2=1 then spks=1; else spksmegawizard plug-in manager,选择“creat a new”,然后按“next”键,选择LPM-ROM;最后在browse下的栏中键入路径与输出文件名:“D:mucic.vhd”,注意后缀vhd小写。 (2)单击“next”键,选择ROM数据位宽度为5,地址线宽为9,即设置此ROM能存储9位二进制数据共512个。 (3)通过单击当前窗口中的“browse”钮,找ROM中的载文件路径和文件名:“D:alteraQuartusIImusic.mif”。 (4)单击“next”键,选择允许在线编程,地址线宽为9,即设置此ROM能存储9位二进制数据共512个,在指定位置输入ROM中的加载文件路径和文件名:“D:alteraQuartusIImusic.mif”,注意ROM元件的inclock文件名:“D:alteraQuartusIImusic.mif”,注意ROM元件的inclock是地址锁存钟,然后单击Next完成LPM_ROM的定制。3.5 顶层文件程序如下所示:library ieee; use ieee.std_logic_1164.all; entity songer is port(clk12mhz:in std_logic; rst:in std_logic; en:in std_logic; choose:in std_logic_vector (1 downto 0); Clk4hz:in std_logic; code1:out std_logic_vector(3 downto 0); high1:out std_logic_vector(2 downto 0); spkout:out std_logic); end; architecture one of songer is component notetabs port(clk:in std_logic; rst:in std_logic; en:in std_logic; choose:in std_logic_vector (1 downto 0); toneindex:out std_logic_vector (4 downto 0); end component; component tonetaba port(index:in std_logic_vector (4 downto 0); code:out std_logic_vector (3 downto 0); high0:out std_logic_vector (2 downto 0); tone:out std_logic_vector(11 downto 0); end component; component speakera port (clk:in std_logic; tone:in std_logic_vector(11 downto 0);spks:out std_logic); end component; signal tone:std_logic_vector(11 downto 0); signal toneindex:std_logic_vector (4 downto 0); begin u1:notetabs port map (clk=clk8hz,toneindex=toneindex,rst=rst,choose=choose,en=en); u2:tonetaba port map (index=toneindex,tone=tone,code=code1,high0=high1); u3:speakera port map (clk=clk12mhz,tone=tone,spks=spkout); end;将所编写的顶层文件程序设为当前工程,通过对程序进行编译,仿真,确定工程没有错误后经过引脚锁定就可以下载到EDA试验箱中了。通过试验箱上的蜂鸣器我们可以听到“挥着翅膀的女孩”,“菊花台”,“两只老虎”,“世上只有妈妈好”等四首乐曲。4、时序仿真及下载调试过程 关于乐曲演奏电路设计的实现关键是要实现它的时序仿真,下面就是各部分的仿真图示。4.1 时序仿真图图4 Notetabas的时序仿真图 图5 Tonetaba的时序仿真 图6 Speakerea的时序仿真 图7 songer的时序仿真4.2 引脚锁定以及下载为实现所设计的功能,管脚锁定时,选用实验箱的模式5。锁定引脚如表3所示。表3锁定引脚对应表 4.3调试过程及结果把程序下载到硬件上,蜂鸣器马上发出声音,演奏出第一首乐曲。当按下键2与键1进行选择时,可选择00:挥着翅膀的女孩 ,01:菊花台 10:两只老虎 11:世上只有妈妈好等四首乐曲。当按下键8时,即从当前选择乐曲重新演奏。当按下键7时,即从当前乐曲暂停处开始演凑。演奏过程中,数码管会按音符不同显示所演奏的音符简谱。同时,LED灯8、9、10也会按音符显示出此音符为高音或低。 设计总结与心得体会 本课设介绍了基于FPGA的音乐硬件演奏电路的设计,实现了一个乐曲播放器,而且描述了其工作原理、设计思路及实现方法,并在QUARTUS II6.0上选用目标芯片仿真实现了音乐硬件演奏电路的功能。实践证明:采用FPGA设计实现音乐硬件演奏电路的可行性和可靠性,而且更改乐曲容易,可根据需要修改ROM中的音符数据文件,从而使电路实现任一曲子的播放。这种基于FPGA的音乐硬件演奏电路的设计与实现,不仅通过VHDL层次化和模块化设计方法,同时采用数控分频和定制LPM-ROM的设计思想,更好的优化了乐曲演奏数字电路的设计,在此基础上不必变化顶层文件架构可随意变更乐曲,有效缩短了产品开发周期、减少了设计芯片的数量、降低了功耗、提高了设计的灵活性、可靠性和可扩展性。 通过为期一周的课程设计,我们应用所学EDA技术与VHDL和EDA实用技术实验及课程设计指导书顺利得完成了乐曲硬件演奏电路的设计。期间,我查阅里很多相关资料,更进一步学习了VHDL语言。不仅巩固了课堂知识,而且有效的和实际结合在了一起,扩展了所学知识和见识。在设计过程中遇到不少问题,如编程能力不够,工程文件建立的错误,还有一些相关文件的使用不明白等问题。总体感觉就是:学得不够,知识真的很有用。同时,也感觉到书本知识与实际问题之间需要我们去探索的,不是学了书本知识就能很好的解决实际问题的,要通过不断的锻炼和学习才能更好的掌握好知识,这次课设也激发了我们对EDA技术方面的兴趣,提高了理论结合实际的意识 。参考文献1 潘松、黄继业编著. EDA技术与VHDL,北京:清华大学出版社2 边计年主编.用VHDL设计电子线路, 北京:清华大学出版社3 王金明,杨吉斌编著.数字系统设计与Verilog HDL.北京:电子工业出版社4 徐志军,徐光辉编著.CPLD/FPGA开发与应用.北京:电子工业出版社5 潘松,黄继业编著.EDA技术实用教程(第2版).北京:科学出版社6 叶天迟主编.EDA实用技术实验及课程设计指导书.长春:自编实验指导书袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论