VHDL硬件描述语言程序设计简易电子琴演奏器_第1页
VHDL硬件描述语言程序设计简易电子琴演奏器_第2页
VHDL硬件描述语言程序设计简易电子琴演奏器_第3页
VHDL硬件描述语言程序设计简易电子琴演奏器_第4页
VHDL硬件描述语言程序设计简易电子琴演奏器_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

VHDL硬件描述语言程序设计

简易电子琴演奏器

姓名:chi

目录

一、设计课题的任务要求...............................................3

二、系统设计.........................................................4

三、仿真波形及波形分析...............................................7

四、源程序..........................................................9

五、功能说明........................................................20

六、元器件清单及资源利用情况.......................................21

七、故障及问题分析..................................................22

八、总结和结论......................................................23

设计课题的任务要求

基本要求:

1、用8X8点阵显示“1234567”七个音符构成的电子琴键盘。其中点阵的第一列

用一个LED点亮表示音符“1”,第二列用二个LED点亮表示音符“2”,依此类推,

如下图所示。

oooo。0O

oooo。•O

oooo・•O

oooe••O

oooe••O

ooee•O

oete••O

ee^e••O

1234567

图1点阵显示的电子琴键盘

2、用BTN1〜BTN7七个按键模拟电子琴手动演奏时的“1234567”七个音符。当某

个按键按下时,数码管显示相应的音符,点阵上与之对应的音符显示列全灭,同时

蜂鸣器演奏相应的声音;当按键弹开时数码管显示的音符灭掉,点阵显示恢复,峰

鸣器停止声音的输出。下图所示为按下BTN3按键时点阵的显示情况。

ooOo。0O

ooOo。•O

ooOo・•O

ooOe••O

ooOe••O

ooOe•O

oeOe••O

eeO••O

*・

1234567

图2按键按下后的点阵显示

3、由拨码开关切换选择高、中、低音,并用数码管进行相应的显示。

4、通过按键BTNO进行复位,控制点阵显示图1的初始状态。

提高要求:

1、可通过一个拨码开关进行手动/自动演奏的切换,并与点阵显示配合增加自动演奏

乐曲的功能。

2、增加手动演奏的音符存储、播放功能。

二、系统设计

1.设计思路

简易电子琴的制作主要是利用不同频率的波来驱动蜂鸣器发出声响。通过输入不同的音

符来设置不同的分频系数,使得50MHz的主频分频出不同频率的波。同时,演奏的音符还

可以通过数码管和8*8点阵来动态显示。

根据系统设计要求,该电子琴设计采用自顶向下的设计方法。整体的功能通过不同的底

层模块配合来完成电子琴的功能。底层模块主要包括乐曲自动演奏模块、分频预置值产生模

块和数控分频模块,数码管显示模块,8*8点阵显示模块五部分组成。用这种设计思路把整

个系统分为了若干个模块,然后再在顶层文件中将各个模块组合在一起,从而体现出超、高

速硬件描述语言VHDL的优势,

关于提高要求中通过一个拨码开关进行手动/自动演奏的切换,并与点阵显示配合增加自

动演奏乐曲的功能,我打算将一首曲子的音符储存在自动播放的数组里面,然后通过计数器

来顺序播放储存的音符。

关于提高要求中的手动演奏的音符存储、播放功能,我打算通过编程实现类似数据结构

中队列的模块,来储存手动输入的音符,然后在要播放的时候,队列里面的音符依次出队,

从而实现音符储存播放的功能。

2.总体框图

图3简易电子琴总体结构框图

图4简易电子琴逻辑流程图

图5简易电子琴VHDL电路原理图

3.分块设计

(1)分频模块divO

由于实验电路板的主频是50Mhz,为了数码管和点阵的刷新显示,我们必须将50Mhz的

频率进行分频。分频的程序来自电路中心的网站上面。在这个模块里,我设置分频系数为

cnt=2499o从实验结果看,这个分频对数码管和点阵的显示有很好的效果

(2)数码管显示模块shuma

我使用了2个数码管,第一个数码管显示1~7的音符,第二个数码管显示相关的信息,

比如高音用H表示,低音用L表示,自动播放用A表示。两个数码管分别刷新,但由于刷

新频率太快,人眼不能察觉,以为是两个数码管是同时亮的。在程序中我们通过duan:out

std_logic_vector(7downto0)和cat:outstd_logic_vector(5downto0)来控制数码管的显示。当

输入不同的音符和不同的控制信息时,duan和cat向量都有不同的值与之对应。

(3)8*8点阵显示模块dianzhen

8*8点阵的显示和数码管的显示运用了同样的原理,在程序中我们通过row:out

std_logic_vector(7downto0)和col:outstd_logic_vector(7downto0)这两个向量来控制点阵的

显示。当输入不同的音符时,点阵显示相应的形状。

(4)音符产生模块autOo

这个模块的功能是,选择的不同模式来产生不同的音符。当选择自动播放模式时,随着

计数器count的值增加,即地址值递增时,程序自动读取出事先储存的音符,并把这个音符

输出。当选择手动演奏模式时,直接将通过BTNLBTN7输入的向量当做音符输出yin:out

std_logic_vector(6downto0);«

(5)分频预置值产生模块

该模块的功能是通过音符以及高低音选项来查表找到对应的频率值。在程序中设置了全

部音符对应的分频预置数。通过判断音符产生模块输出的音符yin:instd_logic_vector(6

downto0),以及拨码开关的高低音highlow:instd_logic_vector(ldownto0)控制键,来查找出

该音符的频率值,然后将该频率赋值给

tone:outintegerrange0to2000000);o

(6)数控分频发声模块

从实验板上面输入的时钟是50MHz的,必须经过分频后由clk_out输出,驱动蜂鸣器发

声。Clk_out的输出频率就对应着音符的音调。分频系数由来自分频预置值模块的tone:out

由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲式

integerrangeOto2000000)o

信号。为了利用驱动蜂鸣器,需要再增加一个进程,多波形进行整理,均衡占空比

三、仿真波形及波形分析

1,数码管显示模块仿真波形

MasterTimeBar:17.425nsPointer:12.48usInterval:12.46usStart:)p$Erw

)PS1.28us2.56us3.84us5.12us6.4us7.68us8.96us10.24us

Name

17.43ns17.425ns

・0clk_inA0_r-1_rT____I_I____I~~L-L__rn__i_iJ-I__I_L_r1__

•1autoA0

是2田HRA[16][16]X[0]XC161X0][16]X0]X[8][0][2]x

♦10国highlowA[2][2X[0X[1]X[0]

⑥13□atA>>;*=X?X=x>x?>X?瓜?XX

014-...5]A1

315-...4]A1

♦16-...3]A1

-...2]A1

318-...1]A1l_J

L.0]1_1

~19A0-LJ-u1_1

⑥20曰duanAmj[0]0]:m*[0])[0]

Q21-.7]A0

222-...6]A11_r_L_-Ln_I_I

323-...5]A1—1___iii_-LL

324-...4]A0r-L_r

Q25-...3]A1n_11_-LJ_L_

»26-...2]A1—I_rn

327A0

-...1]—J—L_

।।।

<i]>|

波形分析:不同的yin,和highlow组合,数码管显示不同的字符。duan[O]~duan⑺对应着数

码管的a段到h段,cat[0]~cat[5]控制不同的数码管

2.点阵显示模块仿真波形

3.自动播放模块仿真波形

这时候相当于手动演奏。

4,分频预置值产生模块仿真波形

波形分析:输入不同的高低音highlow,和音符yin,输出不同的tone。而tone将作为发声模块

的分频预置值

四、源程序

1.分频模块源程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitydivOis

port(clk_in:instdjogic;■■输入时钟

clk_tmp:outstdjogic);-输出时钟

end;

architecturebofdivOis

signalelk:std_logic;

begin

pO:process(clk_in)

variableent:integerrange0to2499;

begin

if(clkjn'eventandclkjn='l')then

ifcnt=2499then-分频系数为2499

cnt:=O;

clk<=notelk;

else

cnt:=cnt+l;-每个输入时钟上升沿到来时

ent加1

endif;

endif;

endprocesspO;

clk_tmp<=clk;

endb;

2.数码管显示源程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityshumais

port(clk_in:instd_logic;-以分频的时钟输入

yin:instd_logic_vector(6downto0);-输入音符

highlowinstd_logic_vector(ldownto0);-输入高低音

auto:instdjogic;-自动播放

autol:instdjogic;-自动播放1

duan:outstd_logic_vector(7downto0);

cat:outstd_logic_vector(5downto0)

end;

architecturebofshumais

signalduant:std_logic_vector(7downto0);

signalcatt:std_logic_vector(5downto0);

begin

pl:process(clk_in,yin,highlow,auto,autol)

begin

ifauto='l'then

catt<="111101";duant<=,,00111111";-显小"8"表不自动播放

elsifautol='l'then

catt<=,,111101";duant<="01111111";-显示“0”表示试音

elsifauto='0'then

if(clk_in='0')then

caseyinis

when"0000001"=>catt<="111110";duant<="00000110";"1”

when“0000010”=>catt<=”111110”;duant<=“01011011”;--显示“2”

when“0000100”=>catt<=”111110”;duant<="OlOOini”;--显示“3”

when”0001000”=>catt<=”111110”;duant<=“01100110”;--显示“4”

when”0010000”=>catt<二"llino”;duant<=“01101101”;--显示“5”

when"0100000"=>catt<="111110";duant<="01111101";-S^"6”

when“1000000”=>catt<=”111110”;duant<=”00000111”;--显示“7”

whenothers=>catt<="llllll";duant<="00000000";

endcase;

elsif(clk_in='l')then

casehighlowis

when"10"=>catt<="111101";duant<="01110100";一显示“L”

when"01"=>€3«<="111101"^03^<="00111000";一显示"H”

whenothers=>catt<="llllll";duant<="00000000";

endcase;

endif;

endif;

endprocesspl;

cat<=catt;

duan<=duant;

endb;

3.点阵显示源程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitydianzhenis

port(clk_in:instd_logic;一时钟输入

yin:instd_logic_vector(6downto0);-输入音符

row:outstd_logic_vector(7downto0);-点阵行向量

col:outstd_logic_vector(7downto0)-点阵列向量

Vb

end;

architecturebofdianzhenis

signalcount:integerrange0to6;

signalrowt:std_logic_vector(7downto0);

signalcolt:std_logic_vector(7downto0);

begin

pl:process(clk_in)

begin

if(clkjn'eventandclk_in=T)then

ifcount=6then

count<=0;

else

count<=count+l;一用count来记数

endif;

endif;

endprocesspl;

p2:process(count,yin)

begin

if(yin="0000001")then

casecountis--点阵显示,表示“1”音符

when0=>rowt<=Ulinil0”;coltv=5111110”;

when1=>rowt<="11111101,,;colt<=,,01111110";

when2=>rowt<=Ulin0"';colt<=”01111100”;

when3=>rowt<=,,11110111";colt<=,,01111000";

when4=>rowt<=,,11101111";colt<="01110000";

when5=>rowt<=,,11011111,,;colt<="01100000";

when6=>rowt<=,,10111111";colt<="01000000";

whenothers=>rowt<="llllllll";colt<="00000000";

endcase;

elsif(yin="0000010")then

casecountis--点阵显示,表示“2”音符

when0=>rowt<=,,11111110";colt<="01111101";

when1=>rowt<二”llini01”;colt<="01111100”;

when2=>rowt<=,,11111011,,;colt<="01111100";

when3=>rowt<=,,11110111,,;colt<="01111000";

when4=>rowt<=,,11101111,,;colt<="01110000";

when5=>rowt<=U10ni"';colt<=”01100000”;

when6=>rowt<="10111111";colt<=,,01000000";

whenothers=>rowt<="llllllll";colt<="00000000";

endcase;

elsif(yin="0000100")then

casecountis--点阵显示,表示“3”音符

when0=>rowt<=,,11111110";colt<="01111011";

when1=>rowt<="11111101";colt<="01111010";

when2=>rowt<=,,11111011";colt<=,,01111000";

when3=>rowt<="11110111";colt<="01111000";

when4=>rowt<=,,11101111,,;colt<="01110000";

when5=>rowt<=,,11011111";colt<="01100000";

when6=>rowt<="10111111";colt<="01000000";

whenothers=>rowt<="llllllll";colt<="00000000";

endcase;

elsif(yin="0001000")then

casecountis--点阵显示,表示“4”音符

when0=>rowt<=Ullini0";colt<="01110in”;

when1=>rowt<=,,11111101";colt<="01110110";

when2=>rowt<=,,11111011";colt<=,,01110100";

when3=>rowt<=”11110111”;colt<="01110000”;

when4=>rowt<="11101111";colt<="01110000";

when5=>rowt<=,,11011111";colt<="01100000";

when6=>rowt<="10111111";colt<="01000000";

whenothers=>rowt<="llllllll";colt<="00000000";

endcase;

elsif(yin="0010000")then

casecountis--点阵显示,表示“5”音符

when0=>rowt<=Ullini0";colt<="01101in”;

when1=>rowt<=,,11111101";colt<="01101110";

when2=>rowt<="11111011,,;colt<="01101100";

when3=>rowt<=,,11110111,,;colt<="01101000";

when4=>rowt<=,,11101111,,;colt<="01100000";

when5=>rowt<=”110111ll”;colt<=”01100000”;

when6=>rowt<="10111111";colt<=,,01000000";

whenothers=>rowt<="llllllll";colt<="00000000";

endcase;

elsif(yin="0100000")then

casecountis--点阵显示,表示“6”音符

when0=>rowt<=,,11111110";colt<="01011111";

when1=>rowt<=,,11111101,,;colt<="01011110";

when2=>rowt<=,,11111011";colt<=,,01011100";

when3=>rowt<=U11101ir;colt<="01011000”;

when4=>rowt<="11101111,,;colt<="01010000";

when5=>rowt<=,,11011111";colt<="01000000";

when6=>rowt<=”101111ir;colt<="01000000”;

whenothers=>rowt<="llllllll";colt<="00000000";

endcase;

elsif(yin="1000000")then

casecountis--点阵显示,表示"7"音符

when0=>rowt<=Ullini0";colt<="00111111”;

when1=>rowt<=,,11111101";colt<="00111110";

when2=>rowt<="11111011,,;colt<="00111100";

when3=>rowt<=,,11110111,,;colt<="00111000";

when4=>rowt<=,,11101111";colt<=,>00110000";

when5=>rowt<="11011111,,;colt<="00100000";

when6=>rowt<="10111111";colt<=,,00000000";

whenothers=>rowt<="llllllll";colt<="00000000";

endcase;

else

casecountis--点阵显示,表示不输入音符

when0=>

when1=>rowt<=,,11111101";colt<=,,01111110";

when2=>rowt<="11111011";colt<="01111100";

when3=>rowt<="11110111";colt<="01111000";

when4=>rowt<="11101111";colt<="01110000";

when5=>^1<="11011111";6011<="01100000";

when6=>rowt<=,,10111111,,;colt<=,,01000000";

whenothers=>rowt<="llllllll";colt<="00000000";

endcase;

endif;

endprocessp2;

row<=rowt;

col<=colt;

endb;

4.选择音符及自动播放源程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityautois

port(clk_in:instd_logic;-输入时钟

auto:instdjogic;-自动播放

autol:instd_logic;-试音播放

clear:instd_logic;-复位

yin_in:instd_logic_vector(6downto0);-输入音符

yin_out:outstd_logic_vector(6downto0));-输出音符

endauto;

architectureaofautois

signalcount:integerrange0to35;

signaln:integerrange0to6;

signalyin:std_logic_vector(6downto0);

begin

pl:process(clk_in,clear)

variablei:integerrange0to63000000;

begin

ifclear-1'then

count<=0;

elsif(clkjn'eventandclkjn=’1')then

if(i=20000000)then

i:=0;

ifcount=15then

count<=0;-自动播放count记数

else

count<=count+l;

endif;

ifn=6then

n<=0;-试音播放n记数

else

n<=n+l;

endif;

else

i:=i+l;

endif;

endif;

endprocesspl;

p2:process(count,auto,yin_in,clear)

begin

ifclear='l'then

yin<="0000000";-音符清零

else

ifauto='l'then-自动播放歌曲

casecountis

when1=>yin<="0000100";-3

when2=>yin<="1000000";-7

when3=>yin<="0000100";-3

when4=>yin<="0100000";-6

when5=>yin<="0010000";-5

when6=>yin<="0100000";-6

when7=>yin<="0000001";-1

when8=>yin<="0000100";-3

when9=>yin<="0010000";-5

when10=>yin<="0000100";-3

when11=>yin<="0000100";-3

when12=>yin<="0001000";-4

when13=>yin<="0000100";-2

when14=>yin<="0001000";-4

whenothers=>yin<="0000000";

endcase;

elsifautol='l'then

casenis-试音播放

when0=>yin<="0000001";-1

when1=>yin<="0000010";-2

when2=>yin<="0000100";-3

when3=>yin<="0001000";-4

when4=>yin<="0010000";-5

when5=>yin<="0100000";-6

when6=>yin<="1000000";

whenothers=>yin<="0000000";

endcase;

else

yin<=yin_in;―动手演奏

endif;

endif;

endprocessp2;

yin_out<=yin;

enda;

5.预置分频系数模块源代码

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityseletoneis

port(highlow:instd_logic_vector(ldownto0);-高低音

yin:instd_logic_vector(6downto0);-要演奏的音符

tone:outintegerrange0to2000000);-预置分频系数

endseletone;

architectureaofseletoneis

signaltoneO:integerrange0to2000000;

begin

process(highlow,yin)

begin

ifhighlow="00"then

caseyinis--中音剖J分

when"0000001"=>tone0<=523;

when"0000010"=>tone0<=587;

when"0000100"=>tone0<=659;

when"0001000"=>tone0<=698;

when"0010000"=>tone0<=784;

when"0100000"=>tone0<=880;

when"1000000"=>tone0<=988;

whenothers=>tone0<=2000000;

endcase;

elsifhighlow="10"then-高音部分

caseyinis

when"0000001"=>tone0<=1045;

when"0000010"=>tone0<=1174;

when"0000100"=>tone0<=1318;

when"0001000"=>tone0<=1396;

when"0010000"=>tone0<=1568;

when"0100000"=>tone0<=1760;

when"1000000"=>tone0<=1975;

whenothers=>tone0<=2000000;

endcase;

elsifhighlow="01"then-低音部分

caseyinis

when"0000001"=>tone0<=261;

when"0000010"=>tone0<=293;

when"0000100"=>tone0<=329;

when"0001000"=>tone0<=349;

when"0010000"=>tone0<=392;

when"0100000"=>tone0<=440;

when"1000000"=>tone0<=494;

whenothers=>tone0<=2000000;

endcase;

endif;

endprocess;

tone<=tone0;

enda;

6.分频发音模块源代码

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitydivis

port(clk_in:instd_logic;-输入时钟

tone:inintegerrange0to2000000;-预置频率

clk_out:outstd_logic);-输出时钟

enddiv;

architectureaofdivis

signalclk_tmp0:std_logic;

signalclk_tmpl:std_logic;

begin

pO:process(clk_in,tone)

variableent:integerrange0to49999999;

begin

if(clkjn'eventandclk_in='l')then

ifent<12999999/tonethen--分频系数

cnt:=cnt+l;

clk_tmpO<='l';

else

cnt:=0;

clk_tmp0<='0';

endif;

endif;

endprocesspO;

pl:process(clk_tmpO)

variablecount:std_logic;

begin

if(clk_tmpO'eventandclk_tmpO='l')then

count:=notcount;

ifcount='l'then

clk_tmpl<='l';-输出平稳的波形

else

clk_tmpl<='0';

endif;

endif;

endprocesspl;

clk_out<=clk_tmpl;

enda;

7.电子琴顶层设计

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitydianzqis

port(clkinstdjogic;一时钟输入

yin:instd_logic_vector(6downto0);-音符输入

highlow:instd_logic_vector(ldownto0);-高低音输入

auto_in:instdjogic;-自动播放

autolinstdjogic;-试音播放

clear:instd_logic;-复位

clk_out:outstdjogic;-输出时钟

rowoutstd_logic_vector(7downto0);--点阵显示

col:outstd_logic_vector(7downto0);一点阵显示

duan:outstd_logic_vector(7downto0);-数码管显示

cat:outstd_logic_vector(5downto0));-数码管显示

architectureaofdianzqis

componentdivOis-分频模块

port(clk_in:instdjogic;

clk_tmp:outstdjogic);

endcomponent;

componentdianzhenis-点阵显示模块

port(clk_in:instdjogic;

yin:instd_logic_vector(6downto0);

row:outstd_logic_vector(7downto0);

col:outstd_logic_vector(7downto0)

endcomponent;

componentshumais-数码管显示模块

port(clk_in:instd_logic;

yin:instd_logic_vector(6downto0);

highlow:instd_logic_vector(ldownto0);

auto:instdjogic;

autolinstd_logic;

duan:outstd_logic_vector(7downto0);

cat:outstd_logic_vector(5downto0)

if

endcomponent;

componentautois-自动播放模块

port(clk_in:instdjogic;

autoinstd_logic;

autol:instd_logic;

yinjn:instd_logic_vector(6downto0);

clear:instdjogic;

yin_out:outstd_logic_vector(6downto0));

endcomponent;

componentseletoneis-预置分频系数模块

port(highlow:instd_logic_vector(ldownto0);

yin:instd_logic_vector(6downto0);

tone:outintegerrange0to2000000);

endcomponent;

componentdivis-分频发音模块

port(clk_in:instd_logic;

tone:inintegerrange0to2000000;

clk_out:outstdjogic);

endcomponent;

signalyin_tmp:std_logic_vector(6downto0);

signaltone_tmp:integerrange0to2000000;

signalclk_tmp:stdjogic;

begin

ul:autoportmap

(clk_in=>clk,auto=>auto_in,yin_in=>yin,yin_out=>yin_tmp,clear=>clear,autol=>autol);

u2:seletoneportmap(highlow=>highlow,yin=>yin_tmp,tone=>tone_tmp);

u3:shumaportmap

(duan=>duan,cat=>cat,yin=>yin_tmp,clk_in=>clk_tmp,highlow=>highlow,auto=>auto_in,aut

ol=>autol);

u4:dianzhenportmap(row=>row,col=>col,yin=>yin_tmp,clk_in=>clk_tmp);

u5:divportmap(clk_in=>clk,tone=>tone_tmp,clk_out=>clk_out);

u6:divOportmap(clk_in=>clk,clk_tmp=>clk_tmp);

enda;

五、功能说明

初始状态,8X8点阵显示“1234567”七个音符构成的电子琴键盘,其中点阵的第一

列用一个LED点亮表示音符“1”,第二列用二个LED点亮表示音符“2”,依此类推,

用BTN1〜BTN7七个按键模拟电子琴手动演奏时的“1234567”七个音符。

当某个按键按下时,数码管显示相应的音符,点阵上与之对应的音符显示列全灭,同时

蜂鸣器演奏相应的声音;当按键弹开时数码管显示的音符灭掉,点阵显示恢复,蜂鸣器停止

声音的输出。

由拨码开关切换选择高、中、低音,并用数码管进行相应的显示

可通过一个拨码开关进行手动/自动演奏的切换,并与点阵显示配合增加自动演奏乐曲

的功能。

六、元器件清单及资源利用情况

1.元器件清单

基本功能:Altra公司Maxll系列EPM71270T144C5开发板一块及电源线、下载线各

一根。开发板内元器件利用情况如下:

元器件数量

8X8点阵显示屏1

拨码开关4

按键8

数码管2

蜂鸣器1

2.管脚设置

NodeNameDirectionLocationI/OBankVREFGroupI/OStandard

1•autolInput

温馨提示

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

评论

0/150

提交评论