版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业设计(论文)本科毕业设计(论文)自动存包柜系统设计学院名称:专业:班级:姓名:指导教师姓名:指导教师职称:2011年06月自动存包柜系统设计摘要:随着社会的发展、科技的进步以及人们生活水平的逐步提高,各种方便于生活的自动化系统开始进入了人们的生活。本文介绍了利用单片机STC89C52最小系统产生一组6位随机密码来控制柜门开关的自动存包柜系统。此系统设计有14个按键和6个数码管显示密码,可以对20个柜子进行控制,每组密码使用一次有效,客户通过键盘输入随机密码进行存取包。此论文重点描述了自动存包柜的设计思想及软硬件电路的工作原理、设计过程,并叙述了调试过程以及调试中所出现的问题,并做了相应分析。关键词:自动存包柜;单片机;随机密码ThedesignofautomaticstoringabagofcupboardsAbstract:Withthesocialandscientificdevelopmentandimprovementofpeople’slivingstandard,variousremoteautomaticsystemsfortheconvenienceofourlifecomeintobeing.ThispaperintroducesstoringabagofcupboardsthatSTC89C52microcontrollerminimumsystemproducesasetofsixrandompasswordtocontroltheopeningandclosingofcupboards.Thissystemhas14buttonsand6digitaltubethatcanshowthepasswordtocontrol20cabinet,eachgrouppasswordonceusingeffective.Customersneedtoaccessthekeyboardtooperatethebagofstoringandgettingoutofthebag.Thispaperfocusesonthedescriptionofthedesignandpricipleofstoringabagofcupboardsremotecontrolofsinglechip,andaccountsforthesystemdebugginganditsproblemsrelatedandtheanalysisareprovided.Keywords:Storeabagofcupboards,SingleChipMicroComputer,Password目录TOC前言 1第一章设计任务 21.1设计的内容 21.2技术指标与功能 2第二章总体设计方案 32.1设计方案的论证 32.1.1单片机的选择 32.1.2键盘/显示部分的选择 32.1.3显示器件选择 42.2自动存包柜电路的原理框图以及各部分作用 4第三章系统硬件电路的设计 63.1自动存包柜的硬件电路 63.1.1单片机STC89C52的最小系统的连接电路 73.1.2键盘控制电路 83.1.3数码显示电路 103.1.4执行部分电路 10第四章自动存包柜的软件设计 134.1自动存包柜软件设计 134.1.1自动存包柜主程序 134.1.2键扫描程序 174.1.374LS165数据检测程序 194.1.4执行部分程序 214.1.5显示程序 23第五章系统调试 255.1硬件调试 255.1.1最小系统板得调试 255.1.2键盘显示电路的调试 255.1.38255A电路的调试 255.2软件调试 255.2.1查键显程序的调试.. 255.2.2随机密码产生及核对程序的调试.. 265.2.3三次容错的调试.. 265.3整机调试 26第六章测试结果 286.1测试结果 28第七章系统的改进 297.1硬件存在的问题与改进 297.2软件存在的问题与改进 297.3系统功能扩展分析 30参考文献 31致谢 32附录 33附录一发送接收电路原理图 33附录二程序清单 34附录三元器件清单 45附录四英文资料 46前言单片机是20世纪70年代中期发展起来的一种大规模集成电路器件。单片机有体积小、功能强、价格低、使用灵活等特点。20世纪80年代以来,国际上单片机的发展迅速,其产品之多令人目不暇接,单片机应用不断深入,新技术层出不穷。在国内,尽管开发和应用单片机的时间不长,但也得到了迅猛的发展。目前单片机已成功地运用到智能仪表、机电设备、过程控制、数据处理、自动检测与控制和家用电器等各个方面,为我国的国民经济建设作出了重要贡献[1]。我们在各大超市可以看到的自动存包柜就是应用单片机技术控制的方便顾客存取包的设备。由于它的方便性和安全性,目前,自动存包柜在超市和其它场合得到了广泛的应用,并且根据用途和场合,其种类不断增多,功能也不断完善,大大的方便了人们的日常生活[2]。就其使用方式而言,自动存包柜主要有两种:其一为投币式,即需要付费的,是通过从投币口投入硬币或纸币来控制存取包;其二是密码式,即通过一组系统产生的随机密码或顾客自己设定的密码来控制柜门的开关,从而达到存取包的目的[3]。这次我们设计的就是利用系统产生一组6位随机密码来控制柜门开关的自动存包柜系统。它是利用单片机STC89C52实现的,具有14个按键和6个数码管显示6位随机密码。客户通过键盘输入随机密码可以进行存取包操作。此系统可以对20个柜子进行控制,每组密码使用一次有效。整个系统稳定可靠,且有容错功能,使用和安装都十分方便。第一章设计任务1.1设计的内容设计一个可以同时管理20个存包柜的管理系统。当顾客需要存包的时候,可以自行到存包柜前按“开门”键,单片机接收到一脉冲信号,并通过系统I/O口发出相应的信号,将一空箱打开,顾客即可存包,并将柜门关上。当顾客需要取包时,通过键盘输入随机码传给单片机,系统比较密码一致后,发出开箱信号将柜门打开,顾客即可将包取出。要求本系统以STC89C52单片机为核心,自动控制柜门的打开,并且产生此时的随机码。取包时,通过随机码的输入开门取包;当顾客发生密码丢失的情况,管理员输入最高密码101010可将全部柜门打开,即可取包;具有三次容错功能。20个存包柜可以用20个发光二极管替代。1.2技术指标与功能工作电压:5V总共可存包20个,顾客只需按“存包”即可打开柜门,并且产生随机密码。取包时,通过产生的随机密码输入之后按“确定”按钮即可取包,当输入错误之后,按“取消”按钮重新输入密码。当顾客发现密码丢失或忘记时,管理员输入最高密码“101010”即可将全部柜门打开。(5)具有三次容错功能,当顾客输入三次密码都错误,第四次输入密码,无法将柜门打开,必须由管理员输入最高密码“101010”才可将柜门打开。第二章总体设计方案2.1设计方案的论证2.1.1单片机的选择本设计所用的单片机可以用C-31,STC89C-52单片机等多种单片机来实现。考虑本设计的要求,需要编写程序,但是C-31没有内部存储器,那么就要用外部扩展,比较麻烦。本设计所编写的程序比较简单,功能也比较少,如果用羚羊单片机就过于麻烦,大材小用,本设计所用到的输入输出端口也不是很多,所以我们决定用STC89C52单片机来完成本设计,既方便也很实用。2.1.2方案一:利用8155并行扩展口控制芯片(8122芯片可以用作单片机片外256B数据存储器,也可以用作扩展I/O口使用以及用作定时器扩展使用,此处用作扩展I/O口使用,分别为PA、PB、PC口)来管理键盘和显示部分。硬件框图如图2-1所示:89C89C5281558个数码管14个键盘740775452图2-18155接口电路框图89C52外扩一片8155H,8155H的RAM地址为7E00H-7EFFH,I/O口地址为7F00H-7F05H,8155H的PA口为输出口,控制键盘的列线Y0-Y7的电位,PA口作为键盘扫描口,同时又是8位LED的扫描口,PB口作为显示器的段数据口,8155H的PC口作为输入口,PC0-3接行线Y0-Y3,称为键输入口。用反相驱动器75452驱动键盘,用同相驱动器7407驱动数码管。此方案原理较简单,但外围芯片数较多(四片75452、两片7407),成本高,而且当我们对其硬件调试时,如果出现问题,会对检查线路造成困扰。方案二:利用两片8位并入串出的移位寄存器芯片74LS165来检测键盘信号,利用三极管做数码驱动,驱动6个数码管显示6位随机密码。硬件框图如图2-2所示。图2-2键盘和显示框图此套方案中,我觉得所用到的器件都是我们学过的,比较好理解,虽然感觉所用到的元器件很多,但相比方法一来,芯片数量减少,价格相对也便宜,所以我选择第二种方法。2.1.3显示器件选择在单片机应用系统中,使用的显示器主要有LED(发光二极管)以及LCD(液晶显示器),两种显示器配置灵活,与单片机接口方便。但是它们也是各有特点的:LED接口非常简单,不需要专用的驱动程序,在设计程序时也非常的简单,而且价格相对便宜;LCD显示的字比较丰富,也比较清楚,给人的感觉很好,但是它接口复杂,且要自己造字库,难度不小。故没必要采用LCD,用LED发光二极管就够了。2.2自动存包柜电路的原理框图以及各部分作用图2-3自动存包柜电路的原理框图各部分作用:(1)单片机控制部分:它是系统的核心部分。由89C52单片机、时钟、复位电路等组成。(2)键盘控制部分:这是用户对自动存包柜进行操作的控制面板。由两片8位并入串出的移位寄存器芯片74LS165和4*4键盘组成。通过它可以实现所有的控制功能。键盘功能定义如下表2-1所示:表2-1键盘功能定义表键符功能0-9用来对随机密码的输入存包客户需要存包所按的键取包客户需要取包所按的键确认对输入的数据进行确认清除对输入的数据进行清除以便重新输入(3)数码显示部分:这是用户对自动存包柜进行操作后,能够显示6位随机密码,由三极管驱动电路驱动数码管显示。由数码显示驱动电路和6个数码管组成。(4)执行部分:这一部分是通过可编程并行接口8255A芯片给每一位发送高低电平控制发光二极管的亮灭(柜门的开关)来模拟的。由可编程并行接口8255A第三章系统硬件电路的设计3.1自动存包柜的硬件电路图3-1自动存包柜的硬件电路自动存包柜硬件电路可以分成四部分组成,它们分别为单片机部分、键盘控制部分(核心芯片为两片8位并入串出的移位寄存器芯片74LS165)、执行部分(核心芯片为可编程并行接口8255芯片)和三极管驱动显示部分。元件接线说明:(1)单片机部分:1脚P1.0接8255芯片36脚为WR端;2脚P1.1接74LS165(U3)的9脚QH为OUT1端;3脚P1.2接8255芯片的6脚为CS端;4脚P1.3接8255芯片的5脚为RD端;5、6脚P1.4、P1.5分别接8255芯片的9脚和8脚为A1、A0端;7脚P1.6接U3、U4的2脚为CLK端;8脚P1.7接U3、U4的1脚为SH端;9脚接8255的35脚为RST端;10~17脚作为P3口分别接8255的27~34脚为D0~D7端;21~28脚P2.0~P2.7分别接驱动三极管Q1、Q2、Q3、Q4、Q5、Q6的基极;32~39脚P0.0~P0.7分别接限流电阻R1~R7的一端,限流电阻R1~R7另一端依次接接数码管的1~8脚为a、b、c、d、、e、f、g、dp端;(2)移位寄存器芯片74LS165部分:U4的3~6脚和11~14脚分别接按键的一端为A1~A8;9脚输出端QH接U3的10脚串行输出端SER;U3的3~6脚和11~14脚分别接按键的一端为B1~B8;(3)可编程并行接口8255芯片部分:PA口只用高四位,PB口和PC口为八位。37~40脚分别接发光二极管的限流电阻R的一端为PA4~PA7;18~25脚分别接发光二极管的限流电阻R的一端为PB0~PB7端,10~17脚分别接发光二极管的限流电阻R的一端为PC0~PC7端;(4)三极管驱动显示部分:驱动三极管Q1、Q2、Q3、Q4、Q5、Q6的集电极1H、2H、3H、4H、5H、6H分别接数码管的9脚;发射机都接5V电源。3.1.1单片机STC89C最小系统包括单片机的基本供电、时钟电路和复位电路。单片机由5V电源供电。(1)时钟和时钟电路:时钟电路是计算机的心脏,它控制着计算机的工作节奏。STC89C52单片机允许的时钟频率的典型值12MHz,也可以是6MHz。本设计采用12MHz。单片机时钟电路图如图3-2所示。图3-2单片机时钟电路图3-2中晶振频率选择12MHz。接到晶振两端的瓷片电容作用是使振荡器起振和对f微调补偿,典型值为30pF。当单片机加电以后延迟约10ms的时间振荡器起振产生时钟,不受软件控制(XTAL2输出幅度为3V左右的正弦波)。(2)复位和复位电路:计算机在启动运行时都需要复位,使中央处理器CPU和系统中的其它部件都处于一个确定的初始状态,并从这个状态开始工作。单片机的复位引脚是RST,当振荡器起振后,该引脚上出现2个周期的高电平,是器件复位,只要RST保持高电平,单片机保持复位状态。单片机复位方式有二种:上电复位(如图3-3)、人工复位(如图3-4)。本设计采用的是图3-3上电复位,具体电路如图3-5所示。图3-3上电复位电路图3-4人工复位注:RST与Vss之间的那个电阻在NMOS型单片机种需要接,但是在CMOS型单片机中不接。其中电容选择22uF的电解电容。图3-5复位和复位电路3.1由两片74LS165、14个键盘按钮组成。74LS165是8位并入串出的移位寄存器芯片,是把检测到的按键信号传输给单片机。74LS165为8位移位寄存器(并行输入,互补串行输出)。当移位/置入控制端(SH/LD)为低电平时,并行数据(A-H)被置入寄存器,而时钟(CLK/CLKINH)及串行数据(SER)均无关。当SH/LD为高电平时,并行置数功能被禁止。CLK和CLKINH在功能上是等价的,可以交换使用。当CLK和CLKINH有一个为低电平并且SH/LD为高电平时,另一个时钟可以输入。当CLK和CLKINH有有一个为高电平时,另一个时钟被禁止。只有在CLK为高电平时CLKINH才可变为高电平。165有18个引脚,一般为双列直插DIP封装。引脚图如图3-6所示。图3-674LS165管脚图165芯片的移位/置入控制端SH接单片机的P1.7脚,时钟CLK接P1.6脚,单片机P1.1脚接165芯片U3的输出脚QH,U4的输出端QH接U3的串行数据输入端SER,A1-A8,B1-B8分别接按键一端。当键有按下时,74LS165芯片检测到按键信号,经U3的输出端QH传输给单片机的P1.1脚,单片机根据键盘扫描程序进行处理。键盘控制电路如图3-7所示。图3-7键盘控制电路3.1.3数码显示部分利用7段共阳极数码管进行显示,数码管与P0口的P0.0~P0.7相连,并接一个10K*8的排阻,P2口的P2.0~P2.5与6个PNP型三极管的基极相连,6个PNP型三极管作为驱动数码管的驱动部分,当单片机选通某一个片选端时,给对应三极管一个高低电平,三极管通过饱和、截止来控制数码管的显示。三极管发射极接5V电源,集电极分别接数码管的1H、2H、3H、4H、5H、6H。采用动态扫描方式。电路如图3-6所示。假设当单片机的P2口全为高电平输出,三极管Q1~Q6中的基极也全为高电平,发射极为5V也为高电平,三极管Q1~Q6都截止,集电极为低电平输出,则传到数码管的1H、2H、3H、4H、5H、6H端都为低电平,因为数码管是7段共阳极数码管,所以6个数码管都有显示。图3-6数码显示电路3.1.4执行部分这一部分是由8255A芯片后接20个发光二极管来进行模拟实现。发光二极管灯亮,表示柜中有物,反之则柜中无物。8255A共有40个引脚,一般为双列直插DIP封装,40个引脚可分为与CPU连接的数据线、地址和控制信号以及与外围设备连接的三个端口线。8255A的内部结构有以下几部分组成:(1)并行I/O端口A、B、C8255A的内部有3个8位并行I/O口:A口、B口、C口。3个I/O口都可以通过编程选择为输入口或输出口,但在结构和功能上有所不同。A口:含有一个8位数据输出锁存/缓冲器和一个8位输入锁存器。B口:含有一个8位数据输出锁存/缓冲器和一个8位输入锁存器(不锁存)。C口:含有一个8位数据输出锁存/缓冲器和一个8位输入锁存器(不锁存)。当数据传送不需要联络信号时,这3个端口都可以用作输入口或输出口。当A口B口需要有联络信号时,C口可以作为A口和B口的联络信号线。管脚图如图3-7所示。图3-78255A管脚图(2)工作方式控制电路:8255A的三个端口在使用时可分为A、B两组。A组包括A口8位和C口高4位:B组包括B口8位和C口低4位。两组的控制电路中分别有控制寄存器,根据写入的控制字决定两组的工作方式,也可对C口每一位置“1”或清“0本设计中,A口高四位接4个发光二极管,B口、C口分别接8个发光二极管,每个发光二极管对应一个柜子,单片机的WR、RD、CS分别与8255A相应端口相接,8255A的A1A0为输入端口控制信号,2位可构成四种状态,分别寻址A口、B口、C口和控制寄存器,它与单片机的相应端口相接,来控制A口B口C口的寻址,单片机的D0-D7端口与8255A的D0-D7口相接。单片机89C52通过8255A给每一位发送高低电平来控制其亮灭(柜门的开关),从而实现存取包。其电路如图3-8所示。图3-8执行部分电路图第四章自动存包柜的软件设计4.1自动存包柜软件设计4.1.1自动存包柜主程序图4-1自动存包柜主程序流程图图4-1是自动存包柜主程序流程图:首先初始化程序,然后调用按键扫描程序进行扫描。存包,中断显示密码;取包,输入密码,判断密码是否正确,然后根据发光二极管的亮暗来判断柜中有无物品。(1)自动存包柜部分初始化程序如下:unsignedcharkey_s,key_v;//定义数码管显示段码unsignedcharcodedis_code[12]={0x03,0x9f,0x25,0x0d,0x99,//定义键盘号码0,1,2,3,40x49,0x41,0x1f,0x01,0x09,0xff,0xfd};//定义键盘号码4,5,6,7,8,9,offucharLED_flag1=0x01;//定义20个发光二极管……ucharLED_flag20=0x01;sbitK1=P3^6; //定义P3^6为P3口的第7位sbitK2=P3^7; //定义P3^7为P3口的第8位sbitK3=P3^5; //定义P3^5为P3口的第7位(2)中断初始化程序:voidmain(void){P0=0xff;P2=0xff;TMOD=0x11;//定时器0,1工作模式1,16位定时方式TH0=0xFC;TL0=0x17;TCON=0x01;IE=0x8a;//使能timer0,1中断TR0=1;}(3)存包过程自动存包柜的作用决定了它必须具有较好的安全性和可靠性,解决这个问题通用的方法是利用密码核对。即用户存包后,系统能产生一组密码,用户取包时,必须输入这组密码,系统核对正确后,取包才能成功,否则,系统不于响应。首先密码位数需要清零,存包取密码(flagy1=0)时,根据柜号密码存入数组中,使相对应的发光二极管亮,即存包。程序如下:KSLEE[0]=KSLEE[1]=KSLEE[2]=KSLEE[3]=KSLEE[4]=KSLEE[5]=10;//.密码位数清零KKSM=5;flagy1=0;//显示等待存包状态KKKSJJ=0;//显示密码变量清零while(1){if(MMJSASJ>3)flag_guanli=0;//连续按键三次以上,无法取出包,需要请管理员输入最高密码Key_scan();//调用键盘检测程序if(KKS2==2)flagy1=2;//有取包按键显示取包的状态if(KKS2==1)//显示存包密码显示状态{flagy1=1;}MIMA1=KSLEE[1]*10+KSLEE[0];MIMA2=KSLEE[3]*10+KSLEE[2];MIMA3=KSLEE[5]*10+KSLEE[4];if(flagy1==0)//存包取密码{if(KKSJD==1)PPOP[0]=SUIJI1,PPOP[1]=SUIJI2,PPOP[2]=SUIJI3,LED_flag1=0,KKSJD=0,SUIJI1=SUIJI2=SUIJI3=0;//存1号柜,密码到数组1…………if(KKSJD==20)PPOP[57]=SUIJI1,PPOP[58]=SUIJI2,PPOP[59]=SUIJI3,LED_flag20=0,KKSJD=0,SUIJI1=SUIJI2=SUIJI3=0;//存20号柜,密码到数组20}KT_LED2=LED_flag1|(LED_flag2<<1)|(LED_flag3<<2)|(LED_flag4<<3)|(LED_flag5<<4)|(LED_flag6<<5)|(LED_flag7<<6);//显示不同灯的状态KT_LED1=LED_flag8|(LED_flag9<<1)|(LED_flag10<<2)|(LED_flag11<<3)|(LED_flag12<<4)|(LED_flag13<<5)|(LED_flag14<<6);KT_LED3=LED_flag15|(LED_flag16<<1)|(LED_flag17<<2)|(LED_flag18<<3)|(LED_flag19<<4)|(LED_flag20<<5);(4)取包过程取包按键按下后,显示取包状态,输入密码之后,需要对所输入的密码与原先存在数组里的密码进行比较,如果比较之后相同,则发光二极管灯灭,即柜门打开。如果密码与所存数组里的密码都不一致,灯仍亮,柜门无法打开,需要输入管理员最高密码。if(KKS2==3)//等待输入密码,然后进行密码比较{if(flag_guanli)//等待输入密码,然后进行密码比较{MMJSASJ++;if((PPOP[0]==MIMA1)&&(PPOP[1]==MIMA2)&&(PPOP[2]==MIMA3))MMJSASJ=0,LED_flag1=1; //比较1号柜密码if((PPOP[3]==MIMA1)&&(PPOP[4]==MIMA2)&&(PPOP[5]==MIMA3))MMJSASJ=0,LED_flag2=1;//比较2号柜密码if((PPOP[6]==MIMA1)&&(PPOP[7]==MIMA2)&&(PPOP[8]==MIMA3))MMJSASJ=0,LED_flag3=1;//比较3号柜密码…………if((PPOP[54]==MIMA1)&&(PPOP[55]==MIMA2)&&(PPOP[56]==MIMA3))MMJSASJ=0,LED_flag19=1;//比较19号柜密码if((PPOP[57]==MIMA1)&&(PPOP[58]==MIMA2)&&(PPOP[59]==MIMA3))MMJSASJ=0,LED_flag20=1;//比较20号柜密码}(5)最高密码的设置当用户密码丢失或忘记之后,请管理员输入最高密码的程序如下:flagy1=0;KSLEE[0]=KSLEE[1]=KSLEE[2]=KSLEE[3]=KSLEE[4]=KSLEE[5]=10;//.密码位数清零if((MIMA1==10)&&(MIMA2==10)&&(MIMA3==10)) //管理员密码比较,101010{flag_guanli=1;LED_flag1=LED_flag2=LED_flag3=LED_flag4=LED_flag5=LED_flag6=LED_flag7=LED_flag8=LED_flag9=LED_flag10=0x01;LED_flag11=LED_flag12=LED_flag13=LED_flag14=LED_flag15=LED_flag16=LED_flag17=LED_flag18=LED_flag19=LED_flag20=0x01;}}if(KKS2==4)//取消返回等待存包状态{flagy1=0; KSLEE[0]=KSLEE[1]=KSLEE[2]=KSLEE[3]=KSLEE[4]=KSLEE[5]=10;//.密码位数清零 KKSM=5;}}}(6)三次容错功能当客户输入三次密码错误以后再次输入密码时,无法打开柜门即灯无法熄灭,需要请管理员输入最高密码“101010”。程序如下:while(1){if(MMJSASJ>3)flag_guanli=0;//连续按键三次以上,无法取出包,需要请管理员输入最高密码Key_scan();//调用键盘检测程序if(KKS2==2)flagy1=2;//有取包按键显示取包的状态if(KKS2==1)//显示存包密码显示状态{flagy1=1;}MIMA1=KSLEE[1]*10+KSLEE[0];MIMA2=KSLEE[3]*10+KSLEE[2];MIMA3=KSLEE[5]*10+KSLEE[4];……}4.1.2键扫描程序图4-2键扫描程序流程图扫键原理:每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。我们必须在侦测到有按键被按下,就delay一小段时间,使键盘以达稳定状态,再去判读所按下的键,就可以让键盘的输入稳定。键扫描程序:voidKey_scan()//键盘扫描函数Key_scan(){unsignedcharX,Y,Z;P3=0xff;P3=0x0f;//先对P3置数行扫描if(P3!=0x0f)//判断是否有键按下{delay(1);//延时10ms,软件去干扰if(P3!=0x0f)//确认按键按下;{X=P3;//保存行扫描时有键按下时状态P3=0xf0;//列扫描Y=P3;//保存列扫描时有键按下时状态Z=X|Y;//取出键值while(P3!=0xf0);//按键防止抖动switch(Z)//判断键值(那一个键按下){case0x77:KKS2=4;break;//取消case0x7b:KKS2=3;break;//确定case0x7d:KKS2=2;break;//取包case0x7e:KKS2=1;break;//存包case0xbd:KKS1=9,KKS_flag=0;break;//数字【5】case0xbe:KKS1=8,KKS_flag=0;break;//数字【8】case0xd7:KKS1=7,KKS_flag=0;break;//字符【F=】case0xdb:KKS1=6,KKS_flag=0;break;//数字【3】case0xdd:KKS1=5,KKS_flag=0;break;//数字【3】case0xde:KKS1=4,KKS_flag=0;break;//数字【9】case0xe7:KKS1=3,KKS_flag=0;break;//字符【B+】case0xeb:KKS1=2,KKS_flag=0;break;//字符【C-】case0xed:KKS1=1,KKS_flag=0;break;//字符【D*】case0xee:KKS1=0,KKS_flag=0;break;//字符【E/】}}}4.1.374LS165数据检测程序图4-374LS165数据检测流程图74LS165数据检测过程:两片165芯片均为时钟上升沿有效,SH-LD为移位/置入控制,当SH-LD为低电平时,并行数据A-H被移入寄存器;当SH-LD为高电平时,并行置数被禁止,数据传输从低位开始传送,Count_165[1]和Count_165[1]读取165端口数据传输给单片机相应端口。74LS165数据检测程序如下:#include<reg52.h>//SFRdeclarations#include<stdio.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsfrWDT_CONTR=0xE1;sbitCLK=P1^3; //时钟,上升沿有效sbitSO=P1^5; //数据输出sbitSH_LD=P1^4; //移位/置入控制,为低电平时,并行数据A-H被移入寄存器;为高时,并行置数被禁止sbitCLK=P2^3; //时钟,上升沿有效sbitSO=P3^2; //数据输出sbitSH_LD=P2^2; //移位/置入控制,为低电平时,并行数据A-H被移入寄存器;为高时,并行置数被禁止uintKeyPort(void);//申明进行数据传送voidKey_Data(void);//声明读取165端数据externvoiddog();//定义uintLedData=0xFFFF;ucharCount_165[2]; //定义输出uintKeyPort(void)//进行数据传送程序{uchari; uintkey; WDT_CONTR=0x3d; SH_LD=0; _nop_();_nop_(); SH_LD=1; for(i=0;i<16;i++)//低位开始 {CLK=0; key>>=1; if(SO) key|=0x8000; else key&=0x7fff; CLK=1;} returnkey;}voidKey_Data(void)//读取165端数据程序{uintbuff_data;buff_data=KeyPort();Count_165[0]=buff_data&0xff;Count_165[1]=(buff_data>>8)&0xff;}4.1.4执行部分程序执行部分程序主要由8255A的驱动程序组成,首先对8255A的PA口PB口PC口进行初始化,把状态标志字读到ACC便于进行位操作,若置PA状态标志位为高电平输入,然后调用配置子程序,完成对8255的设置,判断状态标志位是否为高,为高则控制字设置完成,把PA口的数据读到PA_data;若置PA状态标志位为低电平输出,调用配置子程序,完成对8255的设置,判断状态标志位是否为高,为高则控制字设置未完成,需重新设置,将PA_data的内容送到PA口。PB口、PC口也一样。程序如下所示:#include<config.h>unsignedcharconstcfg_table[8]={0x80,/*10000000b,;c=outb=outa=out*/0x90,/*10010000b,;c=outb=outa=in*/0x82,/*10000010b,;c=outb=ina=out*/0x92,/*10010010b,;c=outb=ina=in*/0x89,/*10001001b,;c=inb=outa=out*/0x99,/*10011001b,;c=inb=outa=in*/0x8B,/*10001011b,;c=inb=ina=out*/0x9B,/*10011011b,;c=inb=ina=in*/};unsignedcharrd_mem(unsignedcharmem_ad){}voidPABC_config(void){a8255_CON=cfg_table[IO_flags];}charrd_PA(void)/*读PA口*/{unsignedcharPA_data;ACC=IO_flags;/*把状态标志字读到ACC便于进行位操作*/do{IO_flagsA=1;/*置PA状态标志位为高--输入*/IO_flags=ACC;PABC_config();/*调用配置子程序,完成对8255的设置*/ACC=IO_flags;}while(IO_flagsA==0);/*判断状态标志位是否为高*//*控制字设置完成*/PA_data=a8255_PA;/*把PA口的数据读到PA_data*/return(PA_data);/*返回PA_data*/}……voidwd_PA(unsignedcharPA_data)/*写PA口*/{ACC=IO_flags;/*把状态标志字读到ACC便于进行位操作*/{IO_flagsA=0;/*置PA状态标志位为低--输出*/IO_flags=ACC;/*位操作完成,把ACC的内容写回状态标志字*/PABC_config();/*调用配置子程序,完成对8255的设置*/ACC=IO_flags;}while(IO_flagsA==1)/*判断状态标志位是否为高;为高,设置未完成,需从新设置*/a8255_PA=PA_data;/*将PA_data的内容送到PA口*/}voidset_PC(unsignedcharPC_num){ACC=IO_flags;IO_flagsC=0;ACC=IO_flags;PC_num=PC_num<<1;PC_num=(PC_num|0x01);a8255_CON=PC_num;}voidclr_PC(unsignedcharPC_num){ACC=IO_flags;IO_flagsC=1;ACC=IO_flags;PC_num=PC_num<<1;PC_num=(PC_num&0xFE);a8255_CON=PC_num;}voidmain(void){set_PC(0x01);}端口定义和RAM配置程序:#include<reg52.h>#include<ABSACC.H>#definea8255_PAXBYTE[0x7F7C#definea8255_PBXBYTE[0x7F7D]/*PB口地址*/#definea8255_PCXBYTE[0x7F7E]/*PC口地址*/#definea8255_CONXBYTE[0x7F7FunsignedcharIO_flags;/*用于表示PA、PB、PC的当前输入输出状态内容不能被其它程序改写,操作时ACC=IO_flags*/sbitIO_flagsA=ACC^0;/*PA的当前输入输出状态置位表示输入,复位表示输出*/sbitIO_flagsB=ACC^1;/*PB的当前输入输出状态*/sbitIO_flagsC=ACC^2;/*PC的当前输入输出状态*/charrd_PA(void);/*读PA口*/charrd_PB(void);/*读PB口*/charrd_PC(void);/*读PC口*/voidwd_PA(unsignedcharPA_data);/*写PA口*/voidwd_PB(unsignedcharPB_data);/*写PB口*/voidwd_PC(unsignedcharPC_data);/*写PC口*/voidPABC_config(void);/*写8255控制字*/4.1.5显示程序定时器0中断服务程序,用于数码管的动态扫描。当flagy1为0,等待存包,显示“”;当flagy1为1,存包显示密码的状态;当flagy1为2时,显示输入密码的状态。if(flagy1==0){SUIJI1++;if(SUIJI1>99)SUIJI1=0,SUIJI2++;//低if(SUIJI2>99)SUIJI2=0,SUIJI3++;//中if(SUIJI3>99)SUIJI3=0;//高}if(flagy1==0) //显示的是‘’等待存包{if(MMMSW==5)LLL5=0,LLL1=LLL2=LLL3=LLL4=LLL9=LLL6=LLL7=LLL8=1,P0=dis_code[11]; //显示-if(MMMSW==6)LLL6=0,LLL2=LLL3=LLL4=LLL5=LLL9=LLL7=LLL1=LLL8=1,P0=dis_code[11];//显示-if(MMMSW==7)LLL7=0,LLL2=LLL3=LLL4=LLL9=LLL5=LLL6=LLL1=LLL8=1,P0=dis_code[11];//显示-if(MMMSW==8)LLL8=0,LLL2=LLL3=LLL4=LLL9=LLL5=LLL6=LLL7=LLL1=1,P0=dis_code[11];//显示-if(MMMSW==1)LLL1=0,LLL2=LLL3=LLL4=LLL9=LLL5=LLL6=LLL7=LLL8=1,P0=dis_code[11];//显示-if(MMMSW==2)LLL2=0,LLL1=LLL3=LLL4=LLL9=LLL5=LLL6=LLL7=LLL8=1,P0=dis_code[11];//显示-if(MMMSW==3)LLL3=0,LLL1=LLL2=LLL4=LLL9=LLL5=LLL6=LLL7=LLL8=1,P0=KT_LED1; //第1行if(MMMSW==9)MMMSW=0,LLL9=0,LLL1=LLL2=LLL3=LLL4=LLL5=LLL6=LLL7=LLL8=1,P0=KT_LED2; //第2行if(MMMSW==4)LLL4=0,LLL1=LLL2=LLL3=LLL9=LLL5=LLL6=LLL7=LLL8=1,P0=KT_LED3;//第3行KKSM=5;}if(flagy1==1)//显示存包显示密码的状态,程序与flagy1==0类似,只需改动几个数字即可。if(flagy1==2)//显示输入密码的状态,程序与flagy1==1类似,只需改动几个数字即可。第五章系统调试5.1硬件调试5.1.1最小系统板的调试调试最小系统板是为保证CPU能正常工作,主要测试P0、P1、P2口是否正常工作,其测试方法是:对三个口,编写程序在相应的口输出高低电平,然后用万用表对口进行测试,看是否符合程序设计情况。5.1.2键盘显示电路的调试主要测试按钮接到74LS165的8位输入引脚上,通过编程之后,应该有信号传输给单片机,单片机根据相应指令进行处理,通过逐个按按钮,观察是否能使相对应的数码管显示。为检测键盘是否正常工作,采用的方法是:系统上电后,若键盘没有按下,则相当于断路,此时测得OUT1口输出的是高电平.当按下某一个键时,相当于短路,此时测得OUT1口的输出应该是低电平,如果有某个键当按下时OUT1口输出保持高电平不变的话,则说明该按键工作不正常。在显示测试程序中,可以根据三极管基极的高低电平来判断数码管是否接对。5.1.38255A电路的调试测试8255A是否正常工作的方法是:往8255某一口发全置1(或0)指令,因为20个小灯是共阳的接法,所以如果8255A正常工作,正确执行了指令的话,对应的小灯应该不亮(或亮)。5.2软件调试5.2.1查键显程序的调试键盘采用的是4*4矩阵扫描,键盘定义如5-1所示。调试时,当按下某一数字键时,数码管应该要将相应的数字显示出来。表5-1键盘定义表0123456789无定义无定义存包取包确定取消5.2.2接通电源之后,数码管显示的是六位“”。当按下“存包”键后,数码管应显示一组六位的随机密码,过1s左右,刚才显示的密码会自动清除。当按下“取包”键,即可输入密码后,按照键盘上所对应的数字按下六位密码,输入之后按“确定”键即可取包。5.2.3三次容错调试在系统产生的随机密码之上设立一个最高级密码,当用户输入密码出现三次核对不一致时,此时系统只认同一组密码有效,即最高级密码。最高级密码由程序员自己设定和掌握,并且可以随时进行修改。5.3整机调试1.灯灭表示柜空,灯亮表示柜中已存有东西。2.柜子的编号从00号到19号。3.存包时先按“存包”键,数码管会显示一组六位的随机密码,作为取包时的核对密码,过1s左右,先前显示的六位密码会自动消除,并且对应的灯会亮,表示存包过程已完成。4.取包时先输入按“取包”键,然后输入所记的六位随机密码,若输入无误,按下“确认”键后六个数码管无显示,放光二极管熄灭。如果按下“取包”键,输入密码过程中按错了数字键,可按“取消”键,取消先前的输入,然后再次按“取包”键,输入密码即可;当六位密码输入完毕,并确认无误时,按下“确认”键,若密码核对正确,则对应的灯会熄灭,表示取包过程的完成;若密码核对不一致,则对应的灯不会熄灭,用户可再次输入密码进行核对;若连续三次输入密码不对,用户将无法取出物品,此时只有去找管理员输入最高密码才可将柜门打开。在这里,我编的程序不够完善,能将全部柜门打开,而不是只将对应的柜门打开,这是我设计中的一个不安全问题之一。还有在设计的过程中,我没有把实际情况考虑进去,因此我设计的自动存包柜不能随便打开一个柜门,只能按照顺序依次存包,这是设计中的问题之二。第六章测试结果6.1测试结果调试完以后,按照测试步骤,测出的结果如下:按“存包”键,数码管显示六位随机密码,LED1亮;再按“确定”键,数码管显示另外六位随机密码,LED2亮;……一直按“存包”键20次,可将全部LED灯亮。按“取包”键,输入任何一个随机密码,按“确定”键可将对应的灯熄灭。当输入密码错误需要重新输入时,可按“取消”键取消之后再取包。当输入三次密码之后再输入密码,无法取包,需要找管理员输入最高密码打开全部柜门。当忘记密码或丢失密码时,可输入最高密码打开全部柜门。第七章系统的改进7.1硬件存在的问题与改进到这里,自动存包柜的软硬件电路就设计完成,只需在一些参数上作些调整即可实现各项功能。当然,硬件部分的设计并不是很圆满,设计并不是最简单有效的,比如说,键盘扫描部分,如果用HD7279A芯片来实现对键盘和显示的管理,那么就不需要花时间去设计三极管驱动显示部分,因为HD7279A是一片具有串行接口、可同时驱动8位共阴极数码管和64个按键的智能显示驱动芯片。该芯片管理数码管时,不需要外加驱动电路。因而用它来管理6位数码管和14个键盘时,不需外加驱动电路,只需一片HD7279A芯片即可,从而使得电路更为简洁,也便于调试,同时它的键盘控制器内含去抖电路,能保证键盘稳定工作。另外,HD7279A管理键盘显示时,可构成键盘显示控制面板模块,只需要引出CS、CLOCK、DATA、KEY四根线接到89C当时,我看到有显示部分,就只想到用三极管驱动应该比较简单,并没有去查阅更多的相关知识,错过了最简便的方法,而且还给我后面编程时留下了隐患,这是我考虑不周到的地方。7.2软件存在的问题与改进由第六章的测试结果可看出,功能基本达到了任务书上的任务要求,但是还存在一些实际问题。比如:(1)在取出包后,再要存包,系统只能在此灯灭之后再亮起,无法检测到哪个灯灭就亮哪个灯,即系统只能依次存包,即使中间有包取出仍只能依次存包下去。(2)管理员输入的最高密码将全部柜门打开,有安全隐患。(3)当用户输入密码与最高密码一致时,用户将全部柜门打开,存在安全隐患。由于我对软件设计的不熟悉,无法做到功能的齐全,在实际应用中无法投入使用,是本设计中最不足的一点,在今后的时间里我会更加努力,巩固知识,学习新的内容,完善自己。7.3系统功能扩展分析由于实验条件的限制以及设计本人的考虑不周,与实际应用中的自动存包柜相差甚远,功能不全,而且还存在一些问题。在实际应用中,根据各种需要,可以在此设计基础上进行扩展。比如:(1)利用电磁铁或可控硅、电磁耦合器,再加上一些机械装置就能实现对柜门的开和关进行控制了。(2)接打印机。将产生的随机密码打印出来,可避免手抄密码的麻烦。(3)语音服务。系统产生密码后,发出提示用户记好密码、致欢迎词等语音。(4)报警服务。在某些有特殊需要的场合,还可以设置报警装置。参考文献[1]雷丽文,朱晓华,蔡征宇.微机原理与接口技术.电子工业出版社,1996.8[2]童诗白,华成英。模拟电子技术基础(第三版)。北京:高等教育出版社,2001,408-409。[3]王正元,现代电力电子器件应用导则.北京:机械工业出版社,1995.8[4]王兆安,黄俊.电力电子技术.第4版.北京:机械工业出版社,2000[5]张德江,胡贞,微型计算机控制系统。长春:吉林科学技术出版社[6]中国集成电路大全编委会编写:《中国集成电路大全》北京:国防工业出版社,1989年。[7]阎石.数字电子技术.吉林:高等教育出版社出版,2000年[8]陈伟人.单片微型计算机原理及其应用.北京:清华大学出版社,1989[9]徐君毅.单片微型计算机原理及应用.上海:上海科学技术出版社,1998[10]童诗白,华成英.模拟电子技术基础.北京:高等教育出版社,2000[11]胡荣等.Protel电路设计教程.北京:清华大学出版社,2001[12]张立,赵永健.现代电力电子技术.北京:科学出版社,1995[13]阎石.数字电子技术.吉林:高等教育出版社出版,2000年[14]陈伟人.单片微型计算机原理及其应用.北京:清华大学出版社,1989[15]徐君毅.单片微型计算机原理及应用.上海:上海科学技术出版社,1998[16]童诗白,华成英.模拟电子技术基础.北京:高等教育出版社,2000[17]胡荣等.Protel电路设计教程.北京:清华大学出版社,2001[18]张立,赵永健.现代电力电子技术.北京:科学出版社,1995[19]于海生.微型计算机控制技术.北京:清华大学出版社,1998[20]SheuJK,ChangSJ,KuoCH,etal.White2LightEmissionFromNearUV:InGaN2GaNLEDChipPrecoatedWithBluePGreenPRedPhosphors[J].IEEEPHOTONICSTECHNLOGYIEITERS,2003,15(1):18~20.[13]AT89C2051DataSheet[R].ATMELInc.[21]InfraredRemoteControlTransmitterPT2221A_PT2222ADataShee[R]t.PTCInc.[22]PhilipsSemiconductors.TheI2C-BusSpecificationVersion(2.1)2000.致谢经过几个月的努力,我在翟丽芳老师的耐心帮助和自己的努力下终于完成了此次设计,并按设计要求实现了自动存包柜控制系统的基本要求。这次毕业设计使我进一步巩固加深了所学的基本理论、基本技能和专业知识,使之系统化、综合化;也培养了我独立工作并运用所学知识分析和解决实际问题的能力,也培养了我收集加工各种信息与获取新知识的能力。更使我从中学到到了很多课本上学不到的知识,学会了用单片机开发产品的完整的过程,明白了设计的概念。通过自己亲自去动手和调试,我明白的实践的重要性,明白了理论结合实践的含义,同时也大大的提高了自己的动手能力,也明白了不管做任何事都要有恒心和毅力才能把事情做好的道理。这在我以后的工作中都是非常有用的。此次设计我学到了许多,也存在许多的不足之处,比如在查找资料的时候没有对各部分模块的多种做法进行比较,没有采用最简便的方法,使之后的设计复杂化,而且在编程的过程中,由于对知识的不熟悉,在功能的实现上存在问题,使设计不能完满的结束,这是我今后必须要注意的,不管是做哪件事情,都必须考虑全面,这样才能做到最好。在这次设计中,翟丽芳老师在百忙之中不厌其烦的给我讲解问题和修正错误,在此表示衷心的感谢!!附录附录一:自动存包柜的硬件电路图附录二:程序清单#include<reg52.h>#include<config.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintexternvoidKey_Data(void);unsignedchardatadis_digit;unsignedcharkey_s,key_v;//定义数码管显示段码unsignedcharcodedis_code[12]={0x03,0x9f,0x25,0x0d,0x99,//0,1,2,3,40x49,0x41,0x1f,0x01,0x09,0xff,0xfd};//4,5,6,7,8,9,offucharLED_flag1=0x01;ucharLED_flag2=0x01;ucharLED_flag3=0x01;ucharLED_flag4=0x01;ucharLED_flag5=0x01;ucharLED_flag6=0x01;ucharLED_flag7=0x01;ucharLED_flag8=0x01;ucharLED_flag9=0x01;ucharLED_flag10=0x01;ucharLED_flag11=0x01;ucharLED_flag12=0x01;ucharLED_flag13=0x01;ucharLED_flag14=0x01;ucharLED_flag15=0x01;ucharLED_flag16=0x01;ucharLED_flag17=0x01;ucharLED_flag18=0x01;ucharLED_flag19=0x01;ucharLED_flag20=0x01;ucharSUIJI1=0;ucharSUIJI2=0;ucharSUIJI3=0;ucharMIMA1,MIMA2,MIMA3=0;charKKSJD=0;charflagy1=0;ucharKKSL=0;ucharKT_LED1=0xff;ucharKT_LED2=0xff;ucharKT_LED3=0xff;unsignedchardis_buf[8];unsignedchardis_index;unsignedcharsec100;charKSJD=1;//sbitK1=P3^6; //小时增加sbitK2=P3^7; //分钟增加sbitK3=P3^5; //sbitLLL1=P2^0;sbitLLL2=P2^1;sbitLLL3=P1^6;sbitLLL4=P1^7;sbitLLL5=P2^4;sbitLLL6=P2^5;sbitLLL7=P2^6;sbitLLL8=P2^7;sbitLLL9=P1^5;charMMJSASJ=0;charKKKSJJ=0;charJIOS=0;bitflag_guanli=1;ucharPPOP[60];unsignedcharKKS1;unsignedcharKKS2;externunsignedcharCount_165[2]; charMMMSW=0;chardisp_Pattern; //bitflag_light=0;voiddisplay();voiddelayms(unsignedcharms);unsignedintKKSM=0;bitflag_hhs=1;ucharLLLS1,LLLS2,LLLS3;charKSLEE[6]={0,0,0,0,0,0};bitKKS_flag=1;//延时1msvoidDelay1ms(unsignedintcount){ unsignedinti,j; for(i=0;i<count;i++) for(j=0;j<120;j++);}//延时子程序voiddelay(uintz){ uintx,y; for(x=z;x>0;x--) for(y=114;y>0;y--);}//4*4扫描键盘voidKey_scan()//键盘扫描函数Key_scan(){unsignedcharX,Y,Z;P3=0xff;P3=0x0f;//先对P2置数行扫描if(P3!=0x0f)//判断是否有键按下{delay(1);//延时10ms,软件去干扰if(P3!=0x0f)//确认按键按下;{X=P3;//保存行扫描时有键按下时状态P3=0xf0;//列扫描Y=P3;//保存列扫描时有键按下时状态Z=X|Y;//取出键值while(P3!=0xf0);//按键防止抖动switch(Z)//判断键值(那一个键按下){case0x77:KKS2=4;break;//取消case0x7b:KKS2=3;break;//确定case0x7d:KKS2=2;break;//取包case0x7e:KKS2=1;break;//存包case0xbd:KKS1=9,KKS_flag=0;break;//数字【5】case0xbe:KKS1=8,KKS_flag=0;break;//数字【8】case0xd7:KKS1=7,KKS_flag=0;break;//字符【F=】case0xdb:KKS1=6,KKS_flag=0;break;//数字【3】case0xdd:KKS1=5,KKS_flag=0;break;//数字【3】case0xde:KKS1=4,KKS_flag=0;break;//数字【9】case0xe7:KKS1=3,KKS_flag=0;break;//字符【B+】case0xeb:KKS1=2,KKS_flag=0;break;//字符【C-】case0xed:KKS1=1,KKS_flag=0;break;//字符【D*】case0xee:KKS1=0,KKS_flag=0;break;//字符【E/】}}}}/********************************************************************主函数说明:入口参数:无返回值:设计:日期:修改:日期:***********************************************************************/voidmain(void){P0=0xff;P2=0xff;TMOD=0x11;//定时器0,1工作模式1,16位定时方式TH0=0xFC;TL0=0x17;TCON=0x01;IE=0x8a;//使能timer0,1中断TR0=1;KSLEE[0]=KSLEE[1]=KSLEE[2]=KSLEE[3]=KSLEE[4]=KSLEE[5]=10;//.密码位数清零KKSM=5;flagy1=0;//显示等待存包状态KKKSJJ=0;//显示密码变量清零while(1){if(MMJSASJ>3)flag_guanli=0;Key_scan();//调用键盘检测程序if(KKS2==2)flagy1=2;//有取包按键显示取包的状态if(KKS2==1)//显示存包密码显示状态{flagy1=1;}MIMA1=KSLEE[1]*10+KSLEE[0];MIMA2=KSLEE[3]*10+KSLEE[2];MIMA3=KSLEE[5]*10+KSLEE[4];if(flagy1==0)//取包存密码{if(KKSJD==1)PPOP[0]=SUIJI1,PPOP[1]=SUIJI2,PPOP[2]=SUIJI3,LED_flag1=0,KKSJD=0,SUIJI1=SUIJI2=SUIJI3=0;//存1号柜,密码到数组1if(KKSJD==2)PPOP[3]=SUIJI1,PPOP[4]=SUIJI2,PPOP[5]=SUIJI3,LED_flag2=0,KKSJD=0,SUIJI1=SUIJI2=SUIJI3=0;//存2号柜,密码到数组2if(KKSJD==3)PPOP[6]=SUIJI1,PPOP[7]=SUIJI2,PPOP[8]=SUIJI3,LED_flag3=0,KKSJD=0,SUIJI1=SUIJ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中语文教资面试2026强化训练题库及解析
- 高中数学2026教资面试全真模拟题库及解析
- 初中英语2026教资面试历年真题题库及解析
- 初中数学教资面试2026易错题答辩
- 脓毒症休克的护理查房
- 大学语文课件 第七单元 洞明世事1.涉务(北齐 颜之推)
- 房地产模板课件
- 康复中心护士工作总结
- 发电车操作课件
- 孤独症康复指南科室的医生要点总结2026
- 职业技术学院行政管理专业人才培养方案
- 《2025-0207T-SJ 加速器用高功率输入耦合器》知识培训
- 中国特色社会主义政治经济学 课件 第六章中国特色社会主义宏观经济治理
- 《价值流图分析流程》课件
- TCNPCI0019-2023复杂断块油田二次开发与三次采油结合效果评价规范
- HG∕T 5061-2016 汽车修补用涂料
- 竣工财务决算审计工作底稿-实质性测试占用模板
- 申请员额法官述职报告
- 第四章 环境分析与决策
- 刘奇凡怎样起草领导讲话稿
- YS/T 341.1-2006镍精矿化学分析方法 镍量的测定 丁二酮肟沉淀分离 EDTA滴定法
评论
0/150
提交评论