东华大学单片机课程设计函数发生器学号尾数_第1页
东华大学单片机课程设计函数发生器学号尾数_第2页
东华大学单片机课程设计函数发生器学号尾数_第3页
东华大学单片机课程设计函数发生器学号尾数_第4页
东华大学单片机课程设计函数发生器学号尾数_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、目录概述3一、系统设计31. 设计要求32. 设计思想33. 总体方案分析与选择4二、硬件设计51. AMPIRE 128×6452. DAC083253. 矩阵键盘6三、软件设计71. LCD显示模块72. 按键扫描模块93. 数模转换器控制模块(输出波形控制)114. 波形生成模块125. 参数设定模块136. LCD波形显示控制模块167. 主函数17四、系统仿真及调试181. LCD显示模块182. DAC输出模块193. 按键扫描模块214. 总体调试21五、设计总结25六、参考书目26七、附录27附录一:完整硬件电路图27附录二:源程序28概述本文设计了一个简易函数发生器

2、,可根据要求生成正弦波、方波、 三角波和锯齿波,波形的幅值、频率和电流偏置量均可在一定范围内调节。设计的硬件电路以AT89C51为核心,并使用了数模转换器 DAC0832 , LCD AMPIRE128×64、集成运算放大器等元件。系统软件先在LCD上显示提示和默认参数,此时可使用 按键修改各参数,由按键启动波形生成, 通过数模转换器输出,并在LCD上显示波形和参数。此设计在有限的软硬件基础上实现了较宽范围的幅值、 频率和电流偏置的选择,最终生成的波形分辨率在10至40之间。 可在设置参数有误时进行提示,并可在转换开始前对参数进行多次修改。在本设计过程中,主要使用 Keil uVis

3、ion4 进行软件设计, 使用 Proteus 7 进行硬件电路设计,并通过两者联合调试进行仿真实验。一、系统设计1. 设计要求设计一款简易函数发生器。由按键选择所以生成的函数,由128*64 LCD显示函数波形并由D/A转换输出模拟量信号。基本要求如下:(1)模拟量输出分辨率在10位以上;(2)可生成正弦波、三角波、锯齿波、方波等信号,由按键选择所要生成的波形;(3)信号幅度、周期(频率)、及垂直位移(直流偏置)可由按键设定。设计以AT89C51为核心的控制电路,并编写相关的系统软件(汇编、C51程序均可)2. 设计思想本设计的硬件部分较为简单,只需要将 DAC0832、AMPIRE128&

4、#215;64及配套的 锁存器、译码器、输出电流调整电路等与AT89C51连接即可; 但软件部分较为复杂,需要分别控制数模转换器、LCD显示屏和矩阵键盘 并根据要求生成相应波形。故软件部分采用模块化设计,各模块单独设计 并调试成功后再进行合并。3. 总体方案分析与选择为实现通过按键选择波形并设置参数的要求,应该在系统开始运行时首先 提示用户进行操作,通过矩阵键盘控制模块获取用户按键值, 之后据此判断用户要修改某项参数或是选择波形以及要修改的值。在用户按下启动按键后应该先对各参数进行判断,如果有参数超出 允许范围应提示用户重新设置,如果所有参数都符合要求则继续后续步骤。参数正确设置并启动后,通过

5、运算生成一个记录一个周期内足够多离散点的数组, 用来表示即将生成的波形。考虑到 LCD上 显示的图形是静态的, 而数模转换器需要实时输出动态波形,所以先控制 LCD 显示对应的静态波形, 再控制数模转换器输出波形。LCD和数模转换器的波形由上述数组控制。总体方案的流程图如下:YN初始化,显示提示修改参数参数符合要求?LCD显示波形DAC输出波形二、硬件设计硬件部分包括 LCD 模块、数模转换器模块和矩阵键盘模块,各模块独立 设计并与对应的软件模块联合调试后再合并调试。1. AMPIRE 128×64LCD 的硬件接线较为固定,其数据口 DB0DB7 连接单片机的P2口, 控制引脚 E

6、,RS,RW,CS1,CS2 连接至单片机的 P3.0 至 P3.4 口, VCC 和 RES 接高电平,GND 接地,-Vout 和 V0 通过电位器连接, 电路图如下:2. DAC0832数模转换器的连接方式较多,本方案使用单缓冲方式连接, 其数据口 DI0DI7 接单片机 P0 口,输入寄存器和 DAC 寄存器 写控制信号 RW1 和 RW2 接单片机 WR 引脚,输入寄存器锁存允许信号 ILE 接高电平,片选信号 CS 和数据传输控制信号 XFER 由连接单片机 P2 口的 3-8 线译码器 74138 的输出选择信号 Y6 控制,从而实现通过 地址总线选择 DAC0832,通过数据总

7、线向其 传送数据。DAC0832 与单片机 的接线如下图:由于设计要求输出的波形可能是交流信号,最终的输出信号应该是 双极性的,所以本设计中 ADC0832 采用双极性输出电路,其输出信号范围 为 -5V+4.96V,分辨率为 0.04V。ADC0832 的输出电路如下:3. 矩阵键盘矩阵键盘的8个引脚连接单片机的P1口,16个按键中有4个按键做选择 波形和选择要调节的参数使用,一个做启动按键,以及一个负号和一个小数点; 只剩9个键做数字键使用,考虑到本设计的实际情况数字键9几乎不会用到, 故只设置数字键08。矩阵键盘的电路连接如下:三、软件设计软件部分除了与硬件部分对应的三个模块外,还包括波

8、形生成模块和主程序模块。1. LCD显示模块AMPIRE128×64 的控制驱动器为两片 KS0108,分左右两部分分别控制, 可对其进行数据的读写操作和命令写操作和状态读操作。由于其内部没有字库,所以 要在软件中设置字符点阵码表。首先根据芯片的数据表编写写命令函数、读状态函数、 写数据函数和读数据函数等基本操作函数供其他函数调用。 之后根据实际应用编写了 LCD 初始化函数、清屏函数、片选函数 、设置显示页函数、设置显示列函数、 设置显示起始行函数等。最后根据设计要求有编写了画点函数、 画线函数、写字符函数和写字符串函数供主程序调用。考虑到LCD显示模块子函数较多,总代码量过大,在

9、与对应 AMPIRE128×64 硬件模块联合调试后将这些函数包存入一个头文件内,命名为 12864.h, 供主文件中各函数调用。上述各函数原型如下,具体函数内容见附录。 /*写命令到LCD中*/void SendCommandToLCD(uchar com)/*状态检查,LCD是否忙*/void CheckState(void) /*写显示数据 */void WriteByte(uchar dat) /*读显示数据*/uchar ReadData(void)/*初始化LCD*/void InitLCD() /*选择屏幕screen: 0-全屏,1-左屏,2-右屏*/void Sel

10、ectScreen(uchar screen) /*设置页 0xb8是页的首地址*/void SetPage(uchar page) /*设定列地址-Y 0-63 ,0x40是列的首地址*/ void SetColumn(uchar column) /*设定显示开始行,0xc0是行的首地址*/ void SetStartLine(uchar startline) /*在LCD上任意坐标画点*/void DrawPoint(uchar X,uchar Y,uchar Type) /*插值法画任意两点之间直线的函数,*函数中只用加减法,程序运行效率很高*/void DrawLine(uchar x

11、1,uchar y1,uchar x2,uchar y2)/*清屏函数 */void ClearScreen(uchar screen) /*显示字符*/ void DispChar(uchar page,uchar column,uchar value)/*显示字符串*/void DispStr(uchar page,uchar column,uchar *string)2. 按键扫描模块本设计中键盘模块采用行反转法查询判断键值。首先判断到 有按键按下后先延时一小段时间消除键盘抖动,之后判断仍有键按下, 即按键维持时间足够长是真实触发后,采用行反转法判断按键值。 之后等待按键释放后再继续,避

12、免按键时间过长造成连续触发。 最后将判断到的按键值返回主调用函数。函数运行流程图如下:NNY有键按下?开始按键消抖按键仍有效?识别键值等待释放Y按键扫描函数内容如下:/*按键扫描*/uchar key_scan(void) uchar temp,key; while(1) keyportal=0xf0; /置行为0,列为1,读列值。 if(keyportal!=0xf0) /判断有,无键盘按下 delay(100); /消振 if(keyportal!=0xf0) /如果if的值为真, /这时可以确定有键盘按下 temp=keyportal; /存储列读入的值 keyportal=0x0f;

13、/置列为0,行为1,读行值。 temp=temp|keyportal;/将行,列值综合。 switch(temp) case 0xee:key=0;break; case 0xde:key=1;break; case 0xbe:key=2;break; case 0x7e:key=3;break; case 0xed:key=4;break; case 0xdd:key=5;break; case 0xbd:key=6;break; case 0x7d:key=7;break; case 0xeb:key=8;break; case 0xdb:key=9;break; case 0xbb:ke

14、y=10;break; case 0x7b:key=11;break; case 0xe7:key=12;break; case 0xd7:key=13;break; case 0xb7:key=14;break; case 0x77:key=15;break; keyportal=0xf0; /置行为0,列为1,读列值。 while(keyportal!=0xf0); /等待按键释放 return(key); 3. 数模转换器控制模块(输出波形控制)本设计中的数模转换器 DAC0832 采用单缓冲方式,要输出的点阵 保存在预先生成的数组中,软件部分使用 定时器中断方式,中断时间根据要求的频率

15、设定, 每次中断输出一个数组元素并指向下一个, 数组内容以预设的频率循环输出,即可按要求输出特定频率的波形。数模转换器控制模块函数如下:/*定时器中断设置*/void timer0(void) interrupt 1 using 3 TH0=period/256; TL0=period%256; XBYTEDAC=wavedacpoint; point+; if(point=wavelength) point=0;/*定时器中断初始化*/void startDAC(void) period=25000/frequency; TH0=period/256; TL0=period%256; EA=

16、ET0=1; TR0=1;4. 波形生成模块由于各波形生成方式不同,分别编写了4个函数控制生成4种波形, 使用一个波形选择生成函数调用对应的函数生成波形,生成的 点阵保存在数组内供波形输出控制模块使用。波形生成模块各函数如下:/*生成锯齿波供DAC输出*/margin:+/-0.44 0ffset:<+/-1.0void ramp(void) uchar i; float step=(margin/5.0*128)/(wavelength-1); uchar pointoffset=(uchar)(char)(offset/5.0*128)+128); for(i=0;i<wave

17、length;i+) wavedaci=(uchar)(char)(i*step)+pointoffset); /*生成三角波供DAC输出*/void triangle(void) uchar i; char step=(char)(margin/5.0*128)/(wavelength>>1); uchar pointoffset=(uchar)(char)(offset/5.0*128)+128); wavedac0=pointoffset; for(i=1;i<=wavelength>>1;i+) wavedaci=wavedacwavelength-i=

18、(uchar)(wavedaci-1+step); /*生成方波供DAC输出*/void square(void) uchar i; uchar high=(uchar)(int)(margin+offset)/5.0*128)+128); uchar low=(uchar)(int)(offset/5.0*128)+128); for(i=0;i<(wavelength/2);i+) wavedaci=high; wavedacwavelength-i-1=low; /*生成正弦波共DAC输出*/void sine(void) uchar i; char pointmargin=(ch

19、ar)(margin/5.0*128); uchar pointoffset=(uchar)(int)(offset/5.0*128)+128); float omega=6.18/wavelength; for(i=0;i<wavelength;i+) wavedaci=(uchar)(int) (pointmargin*sin(i*omega)+pointoffset);/*控制生成波形*/void waveinit(void) switch(type) case 0: sine();break; case 1: ramp();break; case 2: triangle();br

20、eak; case 3: square();break; 5. 参数设定模块参数设定模块主要调用按键扫描函数读按键值后,视按键值调用不同功能模块 实现相应操作。使用一个菜单函数控制参数的修改。幅值、频率与偏移值 修改函数基本相同,其他函数内容如下,完整内容参见附录。/*波形切换,按一次换一种*/void type_next() switch(type) case 0: type=1;DispStr(1,6,"RAMP");break; case 1: type=2;DispStr(1,6,"TRIA");break; case 2: type=3;Dis

21、pStr(1,6,"SQUA");break; case 3: type=0;DispStr(1,6,"SINE");break; /*修改幅值,数字键输入*/void margin_next() void freq_next(); /声明相关函数 void offset_next(); uchar key=key_scan(); uchar i=0,p=0; margin=0; /清空原幅值 DispStr(3,0," "); /清空显示的原幅值 DispChar(2,45,' '); /清空复制错误标志 while

22、(1) if(key<5) switch(key) /若按其他参数修改按键 /则转往对应函数 case 0: type_next();break; /case 1: margin_next();break; case 2: freq_next();break; case 3: offset_next();break; case 4: start=1;break; break; else if(key=5) /负号 DispChar(3,0,'-'); else if(key=6) /小数点控制 if (p) continue; else p=1; DispChar(3,6

23、+i*6,'.'); i+; else if(key>6) /数字键操作 /修改幅值并显示相应数字 margin=margin*10+(key-7); DispChar(3,6+i*6,key-7); i+; if(p) /小数判断与控制 margin/=10.0; return; if(i>2) break; key=key_scan(); /*频率与偏移值修改函数略*/*按键选择菜单*/void menu(void) uchar key; bit error=0; InitLCD(); /LCD显示默认参数 DispStr(0,0,"TYPE"

24、;); DispStr(1,6,"SINE"); DispStr(2,0,"MARGIN"); DispStr(3,0," 4.0 MV"); DispStr(4,0,"FREQUE"); DispStr(5,6,"100 HZ"); DispStr(6,0,"OFFSET"); DispStr(7,0," 0.0 MV"); key=key_scan(); while(1) switch(key) /根据按键调用相应函数 case 0: type_nex

25、t();break; case 1: margin_next();break; case 2: freq_next();break; case 3: offset_next();break; case 4: start=1;break; default:break; if(start) /判断参数范围 error=0; if(!(margin>=-4&&margin<=-1)| (margin>=1&&margin<=4) DispChar(2,45,'E');error=1; if(frequency<1|freq

26、uency>1000) DispChar(4,45,'E');error=1; if(offset<-1|offset>1) DispChar(6,45,'E');error=1; if(!error) /若有错误,继续修改 break; key=key_scan(); 6. LCD波形显示控制模块此模块根据上述表示波形点阵数组中元素进行运算后显示在LCD上对应位置, 并显示两个坐标轴和坐标轴上的坐标,主要调用了LCD显示模块的 字符显示函数和字符串显示函数,LCD波形显示控制模块内容如下:/*LCD波形显示*/void drawLCD(voi

27、d) uchar i; DispChar(0,56,'5'); /先显示纵坐标(电压) DispChar(4,56,'0'); DispStr(7,50,"-5"); DispChar(0,65,'V'); DispStr(4,116,"MS"); if(frequency=1) /显示横坐标(时间) DispStr(3,84,"1000"); else if(frequency<=10) DispChar(3,104,10/frequency); DispChar(3,109,1

28、00/frequency%10); DispChar(3,114,1000/frequency%10); else if(frequency<=100) DispChar(3,104,100/frequency); DispChar(3,109,1000/frequency%10); else if(frequency<=1000) DispChar(3,104,1000/frequency); DrawLine(64,0,64,63); /画纵坐标轴 DrawLine(64,0,68,0); /标记单位长度 DrawLine(64,63,68,63); DrawLine(64,3

29、2,127,32); /画横坐标轴 DrawLine(84,32,84,29); DrawLine(104,32,104,29); DrawLine(124,32,124,29); for(i=0;i<wavelength;i+) /显示对应波形 DrawPoint(64+i,64-wavedaci/4,3); for(i=0;i<20;i+) DrawPoint(104+i,64-wavedaci/4,3);7. 主函数主函数内容较少,只需调用各模块入口即可,内容如下: void main (void) menu(); /参数修改参数 waveinit(); /波形生成 draw

30、LCD(); /LCD波形显示 startDAC(); /DAC输出控制 while(1); /等待中断输出波形 四、系统仿真及调试各模块独立仿真调试后再整体联合调试。1. LCD显示模块分别显示字符,字符串,以及画点,连线,进行调试。 LCD显示内容如下。1) 字符与字符串显示调试2) 画点与画线调试2. DAC输出模块手动设定各种波形类型和各参数,直接由DAC输出相应波形, 输出的各波形如下。1) 正弦波幅值 2.0V,频率 500Hz,偏移值 -0.5V。2) 锯齿波幅值 -3V,频率 100Hz,偏移值 1.2V。3) 三角波幅值 3.5V,频率 100Hz,偏移值 0.5V。4) 方

31、波幅值 3.5V,频率 500Hz,偏移值 0.5V。3. 按键扫描模块首先连接电路,添加 7 段 LED 数码管,编写函数将读到的按键值 显示在数码管上。调试成功即可,此模块未截图。4. 总体调试多次调试选择不同波形和不同参数进行调试,输出波形如下。1) 正弦波2) 锯齿波3) 三角波4) 方波五、设计总结由于本学期刚刚接触单片机课程,各部分知识掌握并不十分牢固, 同时设计中主要使用的 Keil uVision4 与 Proteus 7 都是初次接触, 使用不够熟练,各种基本功能也都是经过查阅相关资料方能使用, 因此设计过程中,遇到了各种问题,一度无法继续进行。 最终通过查阅网络资料,与同学

32、沟通讨论等终于完成了本次课程设计。 本次设计的成功离不开老师课堂上的认真指导,同学们的互相帮助,以及Google和CSDN。六、参考书目【1】 单片机原理及控制技术,王君,机械工业出版社,北京:2012【2】 C程序设计(第四版),谭浩强,清华大学出版社,北京:2010七、附录附录一:完整硬件电路图附录二:源程序1) AMPIRE128×64 显示头文件/*文件名: 12864.h完成日期: 2013.6.26*/#include <reg51.h>#include <intrins.h>#define uint unsigned int#define uch

33、ar unsigned char#define LCDportal P2 /LCD12864数据线 #define Graphic_Clear 0x01 /檫除点#define Graphic_Not 0x02 /反相点#define Graphic_Draw 0x03 /画点 sbit RS=P32; / 数据指令 选择 sbit RW=P31; / 读写 选择 sbit EN=P30; / 读写使能 sbit cs1=P34; / 片选1 sbit cs2=P33; / 片选2 /*字符码表*/*包含数字、大写字母、小数点 、负号和空格*/uchar code ASCII395=0x3E,

34、0x41,0x49,0x41,0x3E,/0 0x00,0x42,0x7F,0x40,0x00,/10x72,0x49,0x49,0x49,0x46,/20x21,0x41,0x49,0x4D,0x32,/30x18,0x14,0x12,0x7F,0x10,/40x27,0x45,0x45,0x45,0x38,/50x3C,0x4A,0x49,0x49,0x31,/60x41,0x21,0x11,0x09,0x07,/70x36,0x49,0x49,0x49,0x36,/80x46,0x49,0x49,0x29,0x16,/90x7C,0x12,0x11,0x12,0x7C,/A 100x7F

35、,0x49,0x49,0x49,0x36,/B0x3E,0x41,0x41,0x41,0x22,/C0x7F,0x41,0x41,0x41,0x3E,/D0x7F,0x49,0x49,0x49,0x41,/E0x7F,0x09,0x09,0x09,0x01,/F0x3E,0x41,0x41,0x51,0x73,/G0x7F,0x08,0x08,0x08,0x7F,/H0x00,0x41,0x7F,0x41,0x00,/I0x20,0x40,0x41,0x3F,0x01,/J0x7F,0x08,0x14,0x22,0x41,/K0x7F,0x40,0x40,0x40,0x40,/L0x7F,0x

36、02,0x1C,0x02,0x7F,/M0x7F,0x04,0x08,0x10,0x7F,/N0x3E,0x41,0x41,0x41,0x3E,/O0x7F,0x09,0x09,0x09,0x06,/P0x3E,0x41,0x51,0x21,0x5E,/Q0x7F,0x09,0x19,0x29,0x46,/R0x26,0x49,0x49,0x49,0x32,/S0x03,0x01,0x7F,0x01,0x03,/T0x3F,0x40,0x40,0x40,0x3F,/U0x1F,0x20,0x40,0x20,0x1F,/V0x3F,0x40,0x38,0x40,0x3F,/W0x63,0x14,

37、0x08,0x14,0x63,/X0x03,0x04,0x78,0x04,0x03,/Y0x61,0x59,0x49,0x4D,0x43,/Z 350x00,0x00,0x40,0x00,0x00,/. 360x10,0x10,0x10,0x10,0x10,/- 370x00,0x00,0x00,0x00,0x00 / 38;/*状态检查,LCD是否忙*/void CheckState(void) uchar dat;/状态信息(判断是否忙) RS=0; / 数据指令选择,D/I(RS)="L" ,表示 DB7DB0 为显示指令数据 RW=1; /R/W="H&q

38、uot; ,E="H"数据被读到DB7DB0 do LCDportal=0x00; EN=1; /EN下降源 _nop_(); /一个短延时 dat=LCDportal; EN=0; dat=0x80 & dat; /仅当第7位为0时才可操作(判别busy信号) while(!(dat=0x00); /*写命令到LCD中*/void SendCommandToLCD(uchar com) CheckState();/状态检查,LCD是否忙 RS=0; /向LCD发送命令。RS=0写指令,RS=1写数据 RW=0;/R/W="L" ,E="

39、;HL"数据被写到 IR 或 DR LCDportal=com; /com :命令 EN=1; _nop_(); _nop_(); EN=0; /EN下降源 /*设置页 0xb8是页的首地址*/void SetPage(uchar page) page=0xb8|page; /1011 1xxx 0<=page<=7 设定页地址-X 0-7,8行为一页64/8=8,共8页 SendCommandToLCD(page); /*设定显示开始行,0xc0是行的首地址*/ void SetStartLine(uchar startline) startline=0xc0|star

40、tline; /1100 0000 SendCommandToLCD(startline); /设置从哪行开始:0-63,一般从0 行开始显示 /*设定列地址-Y 0-63 ,0x40是列的首地址*/ void SetColumn(uchar column) column=column &0x3f; /column最大值为64,越出 0=<column<=63 column= 0x40|column; /01xx xxxx SendCommandToLCD(column); /*开关显示,0x3f是开显示,0x3e是关显示*/void SetOnOff(uchar onof

41、f) onoff=0x3e|onoff; /0011 111x,onoff只能为0或者1 SendCommandToLCD(onoff);/*写显示数据 */void WriteByte(uchar dat) CheckState();/状态检查,LCD是否忙 RS=1; /RS=0写指令,RS=1写数据 RW=0;/R/W="L" ,E="HL"数据被写到 IR 或 DR LCDportal=dat;/dat:显示数据 EN=1; _nop_(); _nop_(); EN=0;/EN下降源/*选择屏幕screen: 0-全屏,1-左屏,2-右屏*/vo

42、id SelectScreen(uchar screen) switch(screen) case 0: cs1=0;/全屏显示 _nop_(); _nop_(); _nop_(); cs2=0; _nop_(); _nop_(); _nop_(); break; case 1: cs1=0;/左显示屏 _nop_(); _nop_(); _nop_(); cs2=1; _nop_(); _nop_(); _nop_(); break; case 2: cs1=1;/右显示屏 _nop_(); _nop_(); _nop_(); cs2=0; _nop_(); _nop_(); _nop_()

43、; break; /*清屏screen: 0-全屏,1-左屏,2-右*/ /* read data */*读显示数据*/uchar ReadData(void) uchar dsp_data; CheckState(); LCDportal=0xFF; RW=1; RS=1; EN=1; EN=0; EN=1; /E的下降沿,然后E持续拉高读才有效 dsp_data=LCDportal; _nop_; _nop_; EN=0; return(dsp_data); /*在LCD上任意坐标画点*/void DrawPoint(uchar X,uchar Y,uchar Type) /X,Y化点的坐

44、标Type画点的类型:反相点,檫除点,画点 uchar DX = (Y >> 3); /计算出属于哪个字节 uchar BX = Y - (DX << 3); /计算出属于字节哪一位 uchar TempData = 0; if (X > 63) SelectScreen(2); X -= 64; else SelectScreen(1); SetPage(DX); /设行地址 SetColumn(X); /设列地址 TempData = ReadData(); /读出所画点所在字节的内容 switch (Type) /对该字节进行相应操作 case Graphic_Clear: TempData &= (1<<BX); break; case Graphic_Not: TempData = (1 << BX); break; case Graphic_Draw: TempData |= (1 << BX); break; default: break; SetPage(DX); /设置行地址

温馨提示

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

最新文档

评论

0/150

提交评论