基于C语言STC89C52单片机电子密码锁的设计_第1页
基于C语言STC89C52单片机电子密码锁的设计_第2页
基于C语言STC89C52单片机电子密码锁的设计_第3页
基于C语言STC89C52单片机电子密码锁的设计_第4页
基于C语言STC89C52单片机电子密码锁的设计_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

.z电子密码锁的设计摘要:本设计阐述通过Proteus软件成功仿真的电子密码锁的实现过程,选用STC89C52单片机为核心的系统来实现按键输入、开锁和密码识别。采用具备I2C总线接口的E2PROM芯片来完成密码的存储,通过1602A液晶显示器提示程序运行状态和使用步骤,利用蜂鸣器模拟报警,发光二极管模拟锁的开关。该系统用C语言编写程序,与汇编语言相比具有更好的移植性和可读性,便于修改和增减功能。关键词:Proteus;密码锁;单片机;C语言DesignofElectronicCodeLockUsingSTC89C52MCUBasedonCLanguageAbstract:ThepaperintroducestheimplementationoftheelectroniccodelockwhichwassuccessfullysimulatedbyProteus.ItusesSTC89C52single-chipmicroputertoachievekeyinput,theunlockingandidentificationofthecode.ItadoptsI2CbusbasedE2PROMchiptopletethecode'sstorage,usingLCD1602Atoprompttheprogram'srunningstateandworkingprocedures,adoptingbuzzertoimitatethealarmandLEDtoimitatetheswitch.ItisconvenienttomodifyandaddfunctionbyusingClanguageprogram,whichismoretransplantableandreliableparedtoassemblylanguage.Keywords:Proteus;codelock;single-chipmicroputer;Clanguage一、前言随着社会物质财富的日益增长和人们生活水平的提高,平安成为现代居民最关心的问题之一。而锁自古以来就是把守门的铁将军,人们对它要求甚高,即要求可靠地防盗,又要使用方便。传统的门锁既要备有大量的钥匙,又要担忧钥匙丧失后的麻烦。随着单片机的问世,出现了电子密码锁,其**性高,使用灵活性好,平安系数高,故受到广阔用户的青睐。电子密码锁通常使用ARM和单片机控制[1],单片机相对ARM实现较为简单,功能较为完善,因此使用单片机控制较多。用单片机控制的密码锁常使用汇编语言编写程序,数码管做显示器[2]。但本设计使用移植性及可读性强的C语言[3-5]编写;同时采用显示清楚、功率消耗小而且寿命长的1602A液晶显示器。从经济实用的角度出发,采用STC89C52单片机设计出一种具有密码设置、报警等功能的电子密码锁,并通过Proteus[6]软件成功地进展了仿真。二、总体方案设计2.1方案论证与比拟方案一:以STC89C52单片机为电子密码锁系统核心,使用4*4矩阵键盘作为数据输入方式,驱动1602A显示器提示程序运行过程和开锁的步骤,利用AT24C02芯片实现掉电存储。图1为单片机控制密码锁的系统原理框图。STC89C5STC89C52单片机AT24C02存储芯片矩阵键盘控制LCD1602A蜂鸣器提示电路电源模块LED密码校验提示图1单片机控制密码锁的系统原理框图方案二:以74LS112双JK触发器构成的数字逻辑电路控制方案,如图2。输入按扭开关组输入按扭开关组输入锁存电路密码存储电路开锁控制电路机械动作构件5秒定时电路20秒定时电路声光指示电路图2数字逻辑控制方案电子密码锁原理框图2.2方案选择由于利用单片机灵活的编程设计和强大的I/O端口,及其控制的准确性,不但能实现根本的密码锁功能,还可以增添掉电存储、声光提示等功能,应选用方案一。三、单元模块设计3.1硬件支持使用的元器件有:核心芯片STC89C52、存储芯片AT24C02、液晶显示1602A、4×4矩阵键盘、报警蜂鸣器、发光二极管和三极管。3.2功能单元模块设计3.2.1开锁机构通过单片机送给开锁执行机构,电路驱动电磁锁吸合,从而到达开锁的目的。如图3所示,为密码锁开锁电路原理图。当用户输入的密码正确时,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,到达开门的目的。本次设计中,基于节省本钱考虑,用发光二极管代替电磁锁,信息通过LCD显示,并利用蜂鸣器和二极管声光指示。其中,绿发光二极管亮,表示开锁;否则,表示密码输入错误并开启报警电路。开锁驱动电路开锁驱动电路STC89C52单片机密码正确超次锁定电磁锁是否图3密码锁开锁电路原理图3.2.2矩阵键盘设计电路每一条水平〔行线〕与垂直线〔列线〕的穿插处不相通,而是通过一个按键来连通,利用这种行列式矩阵构造只需要M条行线和N条列线,即可组成具有M×N个按键的键盘。由于本设计中要求使用16个按键输入,为减少键盘与单片机接口时所占用的I/O线的数目,故使用矩阵键盘。本设计中,矩阵键盘行线和单片机P1.0-P1.3相连,列线与单片机P1.4-P1.7相连。矩阵键盘设计电路图,如图4所示。键盘扫描采用行扫描法,即依次置行线中的每一行为低电平,其余均为高电平,扫描列线电平状态,为低电平即表示该键按下。11234567890输入密码确认更改密码***图4矩阵键盘设计电路图3.2.3声音提示电路设计声音提示电路采用小蜂鸣器提示。蜂鸣器能够根据脉冲信号,以及信号的频率发出各种不同的声音,这样可以根据系统要求在密码出入正确和密码输入错误时发出不同的声音提示,已到达报警的要求。蜂鸣器电路,如图5所示。图5蜂鸣器电路3.2.4显示模块设计本设计中,显示电路采用1602A液晶显示器显示[7]。如下所示,图6为1602A液晶显示器的接口示意图,表1为接口说明。图61602A液晶显示器的接口示意图表1接口说明管脚序名称电平功能描述1VSS0V接地2VCC5.0V电源输入3V0—LCD驱动电压输入4RSH/L存放器选择:RS=H,选择数据存放器;RS=L,选择指令存放器5R/WH/L读写信号线:R/W=H,读操作;R/W=L,写操作6EH,H→L使能信号7DB0H/L数据线8DB1H/L数据线9DB2H/L数据线10DB3H/L数据线11DB4H/L数据线12DB5H/L数据线13DB6H/L数据线14DB7H/L数据线15BLA5.0V背光电源正极16BLK0V背光电源负极本设计中液晶串口一共用到11根导线与单片机相连,具体连接情况如表2显示模块与MCU连接说明所示。表2显示模块与MCU连接说明序号1602A液晶显示器引脚STC89C52单片机引脚1RS引脚P2.5(A13)2R/W引脚P2.6(A14)3E引脚P2.7(A15)4D0引脚P0.0(AD0)5D1引脚P0.1(AD1)6D2引脚P0.2(AD2)7D3引脚P0.3(AD3)8D4引脚P0.4(AD4)9D5引脚P0.5(AD5)10D6引脚P0.6(AD6)11D7引脚P0.7(AD7)3.2.5AT24C02掉电存储单元的设计本设计中掉电存储单元采用AT24C02外部存储器[8-9],其作用是在系统电源断开的时候,存储当前设定的密码数据。AT24C02是一个2K位串行CMOSE2PROM,内部含有256个8位字节,含一个16字节页写缓冲器,具有写保护功能。其采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。如下所示,图7为AT24C02管脚示意图,表3为AT24C02管脚说明。A0A0A1A2GNDSDASCLWPVCC12348765C02图7AT24C02管脚示意图表3AT24C02管脚说明管脚名称功能管脚名称功能A0A1A2器件地址选择SDA串行数据/地址SCL串行时钟信号WP写保护VCC1.8V-6.0V工作电压VSS接地本设计中,AT24C02的SCL和SDA引脚接上拉电阻后与单片机的P3.4〔T0〕和P3.5〔T1〕脚相连,其电路图如图8所示。图8AT24C02掉电存储单元设计图程序设计与系统仿真4.1模块介绍与硬件电路相关联,本系统软件包括主程序模块、密码比拟判断模块、键盘扫描模块、修改密码模块、1602A液晶显示模块等[10]。系统程序流程如图9所示。开场开场系统初始化调用E2PROM密码显示主界面输入密码判断密码确定密码开锁模拟声光锁定键盘YN返回Y判断次数N超过N次未超过N次再次输入密码密码设置完毕N设置新密码Y按键N判断按键值返回主界面NY设置解码次数产生随**码输入密码N=0*84N=0*82N=0*11图9系统程序流程图4.1.1主程序模块主程序主要用于定义全局变量,给全局变量赋初值,初始化E2PROM,启动定时器以及从AT24C02中读取密码,为整个程序提供数据;检测按键;调用显示等功能。4.1.2密码比拟判断模块该模块的功能是将键盘输入的密码利用if语句与设定的密码进展逐个比拟,假设密码完全正确则开锁;假设不正确,则开启报警电路,复位后重新输入密码。其密码输入和比拟判决流程图如图10所示。输入密码输入密码核对键盘锁定,开启报警电路开锁,灯亮,可密码修改NY复位图10密码输入和比拟判决流程图4.1.3键盘扫描模块键盘使用矩阵式键盘,由行和列组成,CPU对所有键盘进展监视,从而实现逐列扫描键盘确定被按键的具体位置、判断键盘上有无键按下、消除去抖动、判断闭合的键是否释放等功能。如图11所示,为键盘扫描流程图。开场开场延时去抖动计算输入键值键值送入单片机有按键输入.有按键输入.有按键输入.返回NNYY图11键盘扫描流程图4.1.4修改密码模块在密码输入正确情况下,可以按下“重置密码〞对密码进展重新设置,每设定一位就将密码送给AT24C02存储起来,当设置6位密码完毕后,系统将自动跳到程序开场,调用新设置的密码。图12为修改密码流程图。开场开场输入原密码密码比拟比拟正确.输入新密码再次输入新密码调用AT24C02中密码比拟正确修改成功返回菜单键盘锁定,启动报警电路复位YN图12修改密码流程图4.1.51602A液晶显示模块此模块包括液晶初始化、命令的输入等。4.2Proteus仿真电路图13电子密码锁仿真图五、系统功能本设计中系统可实现功能如下:〔1〕通过切换,对输入的4位密码进展显示或隐藏;〔2〕通过发光二极管和蜂鸣器,对解密正确或者错误进展声光报警;〔3〕4位密码修改;〔4〕在密码遗失情况下,通过初始密码进展密码再设置;〔5〕采用AT24C02外部存储器,完成断电密码保护功能;〔6〕具有1-9次的解锁次数任意设定功能;〔7〕模拟密码箱随机产生密码,并进展解码。六.设计总结从根本方案的制定,到硬件电路的选择,再到电路的焊接,最后进展程序调试——在此期间我们遇到很多困难,但经过团队的不懈努力,终于击破了各个难点,到达的所需要的效果。在这次设计中,我们深刻认识到自身的缺乏——缺少实战经历。与此同时,也因为这次设计,我们得到一定的锻炼,体会到理论与实践相结合的重要意义。由于本次设计时间有限,一些设想没有完全实现,比方说:电子密码锁的网络通信扩展,人机界面智能化等。期待以后有时机对以上设想进展进一步研究实践。参考文献[1]郭海英.基于单片机的电子平安密码锁的设计[J].现代电子技术,2005,28〔13〕:95-97.[2]*毅刚.单片机原理及应用[M].:高等教育,2003.[3]谭浩强.C程序设计[M].:清华大学,2005[4]杨章伟,韩雪,*浩然.跟我学C程序设计[M].:清华大学,2010[5]*培仁.基于C语言编程MCS-51单片机原理与应用[M].:清华大学,2002[6]周润景,*丽娜,丁莉.基于PROTEUS的电路及单片机设计与仿真[M].:航天航空大学,2010[7]20070711.亚斌YB1602A液晶模块使用说明书[DB/OL].wenku.baidu./view/7c80dd9951e79b89680226f3.html[8]AT24C02[DB/OL].baike.baidu./view/1837975.htm[9]at24c02中文资料[DB/OL]..doc88./p-.html[10]金桂,向国梁.基于C语言STC89C52单片机电子密码锁的设计与仿真[J].现代电子技术,2010,19:176-182.附录:a、器件清单器件名称规格型号编号数量单价〔元〕总价〔元〕备注MCUSTC89C52U1177外部存储器AT24C02U210.430.43LCD1602ALCD112020发光二极管3mmD110.050.05绿光普亮3mmD210.050.05红光普亮三极管8550Q110.20.2晶振12MHz*110.50.5电阻4.7kΩ40.020.0810kΩ20.020.0410K排阻RP110.50.5电容22PC1C220.050.110μFC310.050.5IC座8脚IC座10.350.3540脚IC座10.30.3单排插座10.50.5蜂鸣器LS110.650.65电池盒5V电池盒144焊锡212导线111电路板9×15cm万用板11.51.5合计:39.75元b、源程序*include<REG51.h>*include<intrins.h>*include<stdio.h>*include<stdlib.h>*defineLCM_DataP0*defineucharunsignedchar*defineuintunsignedint*definew4 sbitkey=P2^0;sbitalam=P2^1;sbitopen_led=P2^2;sbitlcd1602_rs=P2^5;sbitlcd1602_rw=P2^6;sbitlcd1602_en=P2^7;sbitScl=P3^4; sbitSda=P3^5; sbit*ianshi=P3^7; bitoperation=0; bitpass=0; bitmmsd=0;voidDelay5Ms(void){ unsignedintTempCyc=5552; while(TempCyc--);}voidDelay400Ms(void){unsignedcharTempCycA=5;unsignedintTempCycB;while(TempCycA--){TempCycB=7269;while(TempCycB--);}}bitReInputEn=0; bits3_keydown=0; bitkey_disable=0; unsignedcharcountt0,second;voidDelay5Ms(void);staticunsignedchartmp2=80;unsignedcharm,d,sjmbz=0;unsignedcharcodea[]={0*FE,0*FD,0*FB,0*F7};unsignedcharcodename[] ={"Tong*in08"};unsignedcharcodeCorrect[] ={"right"}; unsignedcharcodeError[] ={"wrong"}; unsignedcharcodesuijishu[] ={"RandNumber:"}; unsignedcharcodeset[] ={"setting:"}; unsignedcharcodesjp[] ={"keypadlocked"}; unsignedcharcodestart_line[] ={"password:"};unsignedcharcodecodepass[] ={"success"};unsignedcharcodeLockOpen[] ={"open"}; unsignedcharcodeSetNew[] ={"SetNewWord"};unsignedcharcodeInput[] ={"input:"}; unsignedcharcodeResetOK[] ={"ResetOK"};unsignedcharcodeEr_try[] ={"tryagain!"};unsignedcharcodeagain[] ={"inputagain"};unsignedcharcodeinitword[] ={"chushihua"};unsignedcharInputData[4]; unsignedcharCurrentPassword[4]={1,3,1,4}; unsignedcharTempPassword[4];unsignedcharN=0; unsignedcharcun[1];unsignedcharC=3; unsignedcharErrorCont; unsignedcharCorrectCont; unsignedcharReInputCont; unsignedcharcodeinitpassword[4]={0,0,0,0};voidmDelay(uintt){ uchari; while(t--) { for(i=0;i<125;i++) {;} }}voidNop(void) { _nop_(); _nop_(); _nop_(); _nop_();}voidStart(void){ Sda=1; Scl=1; Nop(); Sda=0; Nop();}voidStop(void){ Sda=0; Scl=1; Nop(); Sda=1; Nop();}voidAck(void){ Sda=0; Nop(); Scl=1; Nop(); Scl=0;}voidNoAck(void){ Sda=1; Nop(); Scl=1; Nop(); Scl=0;}voidSend(ucharData){ ucharBitCounter=8; uchartemp; do { temp=Data; Scl=0; Nop(); if((temp&0*80)==0*80) Sda=1; else Sda=0; Scl=1; temp=Data<<1; Data=temp; BitCounter--; } while(BitCounter); Scl=0;}ucharRead(void){uchartemp=0; uchartemp1=0; ucharBitCounter=8; Sda=1; do{ Scl=0; Nop(); Scl=1; Nop(); if(Sda) temp=temp|0*01; else temp=temp&0*fe; if(BitCounter-1) { temp1=temp<<1; temp=temp1; } BitCounter--; } while(BitCounter); return(temp); }voidWrToROM(ucharData[],ucharAddress,ucharNum){uchari;uchar*PData;PData=Data;for(i=0;i<Num;i++){Start();Send(0*a0);Ack();Send(Address+i);Ack();Send(*(PData+i));Ack();Stop();mDelay(20);}}voidRdFromROM(ucharData[],ucharAddress,ucharNum){uchari;uchar*PData;PData=Data;for(i=0;i<Num;i++){Start();Send(0*a0);Ack();Send(Address+i);Ack();Start();Send(0*a1);Ack();*(PData+i)=Read();Scl=0;NoAck();Stop();}}*defineyi0*80*defineer0*80+0*40voiddelay(uint*ms){ uint*,y; for(*=*ms;*>0;*--) for(y=110;y>0;y--);}write_1602(uchar){ lcd1602_rs=0; lcd1602_rw=0; P0=;delay(1); lcd1602_en=1; delay(1); lcd1602_en=0;}write_1602dat(uchardat){ lcd1602_rs=1;lcd1602_rw=0; P0=dat; delay(1);lcd1602_en=1; delay(1); lcd1602_en=0;}voidlcd_init(void){ write_1602(0*38); write_1602(0*0c); write_1602(0*06); write_1602(0*01);}unsignedcharcoding(unsignedcharm) { unsignedchark; switch(m) { case(0*18):k=1;break; case(0*28):k=2;break; case(0*48):k=3;break; case(0*88):k='A';break; case(0*14):k=4;break; case(0*24):k=5;break; case(0*44):k=6;break; case(0*84):k='B';break; case(0*12):k=7;break; case(0*22):k=8;break; case(0*42):k=9;break; case(0*82):k='C';break; case(0*11):k='*';break; case(0*21):k=0;break; case(0*41):k='*';break; case(0*81):k='D';break; } return(k);}unsignedcharkeynum(void){ unsignedcharrow,col,i; P1=0*f0; if((P1&0*f0)!=0*f0) { Delay5Ms();Delay5Ms(); if((P1&0*f0)!=0*f0) { row=P1^0*f0; i=0; P1=a[i]; while(i<4) { if((P1&0*f0)!=0*f0) { col=~(P1&0*ff); break; } else { i++; P1=a[i]; } } } else { return0; } while((P1&0*f0)!=0*f0); return(row|col); } elsereturn0; }voidResetPassword(void){ unsignedchari; unsignedcharj; if(pass==0) { pass=0; DisplayChar(); Alam(4); } else { if(ReInputEn==1) { if(N==4) { ReInputCont++; if(ReInputCont==2) { for(i=0;i<4;) { if(TempPassword[i]==InputData[i]) i++; else { write_1602(er); for(j=0;j<16;j++) { write_1602dat(Error[j]); } Alam(4); pass=0; ReInputEn=0; ReInputCont=0; DisplayChar(); break; } } if(i==4) { write_1602(er); for(j=0;j<16;j++) { write_1602dat(ResetOK[j]); } Alam(2); WrToROM(TempPassword,0,4); ReInputEn=0; } ReInputCont=0; CorrectCont=0; } else { Alam(1); write_1602(er); for(j=0;j<16;j++) { write_1602dat(again[j]); } for(i=0;i<4;i++) { TempPassword[i]=InputData[i]; } } N=0; } } }}voidCancel(void){ unsignedchari; unsignedcharj; write_1602(yi); for(j=0;j<16;j++) { write_1602dat(name[j]); } write_1602(er); for(j=0;j<16;j++) { write_1602dat(start_line[j]); } Alam(2); for(i=0;i<4;i++) { InputData[i]=0; } KEY=1; ALAM=1; operation=0; pass=0; ReInputEn=0; ErrorCont=0; CorrectCont=0; ReInputCont=0; open_led=1; sjmbz=0; s3_keydown=0; key_disable=0; mmsd=0; N=0; }unsignedcharszzh(unsignedchard) { unsignedcharj,k; j=d; switch(j) { case(0):k=0*30;break; case(1):k=0*31;break; case(2):k=0*32;break; case(3):k=0*33;break; case(4):k=0*34;break; case(5):k=0*35;break; case(6):k=0*36;break; case(7):k=0*37;break; case(8):k=0*38;break; case(9):k=0*39;break; } return(k);}voidEnsure(void){ unsignedchari,j; RdFromROM(CurrentPassword,0,4); RdFromROM(cun,16,1); if(N==4) { if(ReInputEn==0&&mmsd==0) { for(i=0;i<4;) { if(CurrentPassword[i]==InputData[i]) { i++; } else { ErrorCont++; if(ErrorCont==C) { key_disable=1; pass=0; break; } else write_1602(er); for(j=0;j<16;j++) { write_1602dat(Error[j]); } Alam(2); pass=0; break; } } if(i==4) { CorrectCont++; if(CorrectCont==1) {write_1602(er); for(j=0;j<16;j++) { write_1602dat(LockOpen[j]); } Alam(2); KEY=0; pass=1; TR0=1; open_led=0; for(j=0;j<6;j++) { InputData[i]=0; } } else { write_1602(er); for(j=0;j<16;j++){ write_1602dat(SetNew[j]); } Alam(2); ReInputEn=1; CorrectCont=0; } } else { if((InputData[0]==0)&&(InputData[1]==8)&&(InputData[2]==0)&&(InputData[3]==6)) { WrToROM(initpassword,0,4); write_1602(er); for(j=0;j<16;j++) {write_1602dat(initword[j]); } //Alam(2);N=0; } else { if(ErrorCont==C) {write_1602(er); for(i=0;i<16;i++) { write_1602dat(sjp[i]); } } } } } elseif(ReInputEn==1&&mmsd==0) { write_1602(er); for(j=0;j<16;j++) { write_1602dat(Er_try[j]); } Alam(4); } } else { if(mmsd==1||sjmbz==1) {if(sjmbz=1) WrToROM(TempPassword,0,4); elseif(mmsd==1) WrToROM(cun,16,1); else ; mmsd=0; sjmbz=0; write_1602(yi); for(j=0;j<16;j++) { write_1602dat(name[j]); } write_1602(er); for(j=0;j<16;j++) { write_1602dat(codepass[j]); } Alam(4); } else { write_1602(er); for(j=0;j<16;j++) { write_1602dat(Error[j]); } Alam(4); pass=0; } } N=0; operation=1; } voidsuiji(void){if(pass==1) {unsignedinti,j,k;unsignedintsuijima[4];write_1602(yi);for(j=0;j<16;j++){write_1602dat(name[j]);}write_1602(er);for(j=0;j<16;j++){write_1602dat(suijishu[j]);}srand((tmp2++)*TL0);for(i=0;i<4;i++){j=(int)(10.0*rand()/(56494.0));suijima[i]=j;k=szzh(j); TempPassword[i]=suijima[i];write_1602(er+i+12);write_1602dat(k);}sjmbz=1;Alam(2);}else {unsignedintj; write_1602(er); for(j=0;j<16;j++){ write_1602dat(Error[j]); } Alam(4); } }unsignedchar*gmm(void){unsignedcharKE,i,j,a=1;unsignedcharG,k;if(pass==1){write_1602(yi); for(i=0;i<16;i++) { write_1602dat(name[j]); } write_1602(er); for(j=0;j<16;j++) { write_1602dat(set[j]); }while(a){ KE=keynum();if(KE!=0){ G=coding(KE);switch(G){case(1):C=1;break; case(2):C=2;break; case(3):C=3;break; case(4):C=4;break; case(5):C=5;break; case(6):C=6;break; case(7):C=7;break; case(8):C=8;break; case(9):C=9;break; } a=0; mmsd=1; k=szzh(C); write_1602(er+8); write_1602dat(k);} }}else{write_1602(er); for(j=0;j<16;j++) { write_1602dat(Error[j]); } pass=0; } return(C);}voidtime0_int(void)interrupt

温馨提示

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

评论

0/150

提交评论