




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计报告LCD显示电子密码锁设计(TheDesignofLCDElectronicPassword-Lock)
毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名:日期:
学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。作者签名: 日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。涉密论文按学校规定处理。作者签名: 日期:年月日导师签名:日期:年月日
注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。3.附件包括:任务书、开题报告、外文译文、译文原文(复印件)。4.文字、图表要求:1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画3)毕业论文须用A4单面打印,论文50页以上的双面打印4)图表应绘制于无格子的页面上5)软件工程类课题应有程序清单,并提供电子文档5.装订顺序1)设计(论文)2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订
指导教师评阅书指导教师评价:一、撰写(设计)过程1、学生在论文(设计)过程中的治学态度、工作精神□优□良□中□及格□不及格2、学生掌握专业知识、技能的扎实程度□优□良□中□及格□不及格3、学生综合运用所学知识和专业技能分析和解决问题的能力□优□良□中□及格□不及格4、研究方法的科学性;技术线路的可行性;设计方案的合理性□优□良□中□及格□不及格5、完成毕业论文(设计)期间的出勤情况□优□良□中□及格□不及格二、论文(设计)质量1、论文(设计)的整体结构是否符合撰写规范?□优□良□中□及格□不及格2、是否完成指定的论文(设计)任务(包括装订及附件)?□优□良□中□及格□不及格三、论文(设计)水平1、论文(设计)的理论意义或对解决实际问题的指导意义□优□良□中□及格□不及格2、论文的观念是否有新意?设计是否有创意?□优□良□中□及格□不及格3、论文(设计说明书)所体现的整体水平□优□良□中□及格□不及格建议成绩:□优□良□中□及格□不及格(在所选等级前的□内画“√”)指导教师:(签名)单位:(盖章)年月日
评阅教师评阅书评阅教师评价:一、论文(设计)质量1、论文(设计)的整体结构是否符合撰写规范?□优□良□中□及格□不及格2、是否完成指定的论文(设计)任务(包括装订及附件)?□优□良□中□及格□不及格二、论文(设计)水平1、论文(设计)的理论意义或对解决实际问题的指导意义□优□良□中□及格□不及格2、论文的观念是否有新意?设计是否有创意?□优□良□中□及格□不及格3、论文(设计说明书)所体现的整体水平□优□良□中□及格□不及格建议成绩:□优□良□中□及格□不及格(在所选等级前的□内画“√”)评阅教师:(签名)单位:(盖章)年月日本自动化071班张志达34号教研室(或答辩小组)及教学系意见教研室(或答辩小组)评价:一、答辩过程1、毕业论文(设计)的基本要点和见解的叙述情况□优□良□中□及格□不及格2、对答辩问题的反应、理解、表达情况□优□良□中□及格□不及格3、学生答辩过程中的精神状态□优□良□中□及格□不及格二、论文(设计)质量1、论文(设计)的整体结构是否符合撰写规范?□优□良□中□及格□不及格2、是否完成指定的论文(设计)任务(包括装订及附件)?□优□良□中□及格□不及格三、论文(设计)水平1、论文(设计)的理论意义或对解决实际问题的指导意义□优□良□中□及格□不及格2、论文的观念是否有新意?设计是否有创意?□优□良□中□及格□不及格3、论文(设计说明书)所体现的整体水平□优□良□中□及格□不及格评定成绩:□优□良□中□及格□不及格教研室主任(或答辩小组组长):(签名)年月日教学系意见:系主任:(签名)年月日摘要单片机技术是智能化检测与控制领域应用非常普及并且具有很大潜力的技术。论文阐述一个基于单片机的液晶显示电子密码锁的设计与实现。系统采用美国Atmel公司的AT89S52单片机作为系统核心,液晶显示器LCD1602作为输出设备显示系统提示信息,4*4矩阵薄膜键盘作为输入设备,CMOS串行E2PROM存储器AT24C02作为数据存储器,配合蜂鸣器、继电器等电路构成整个系统硬件;系统软件采用汇编语言编写。设计的系统液晶显示,密码修改方便,具有报警、锁定等功能,使用便捷简单,符合住宅、办公用锁需求,具有一定的实用价值。关键词:密码锁;单片机;STC89C52;LCD1602;AT24C02TheDesignofLCDElectronicPassword-LockAbstractSCMtechnologyisverypopularandhasgreatpotentialinapplicationofintelligentdetectionandcontrolfield.ThisthesisdescribesthedesignandimplementationofLCDelectronicpassword-locksystembasedonSCM.ThesystemusestheproductofAmericaAtmelcorporationAT89S52asthecoreofsystem,liquidcrystalmonitor1602astheoutputdevicedisplayingthepromptinformationofsystem,4*4matrixmembranekeyboardastheinputdevice,serialE2PROMmemoryAT24C02asthedatastorage,withbuzzer,relay,andothercircuitstogetherconstitutethesystemhardware.Thesoftwareofthesystemiswritteninassemblylanguage.ThedesignedsystemdisplayinLCD,changepasswordeasily,hasthefunctionofalarming,locking,andsoon.Thissystemissimpleandeasytouse,meetsthedemandofresidential,officelockneeds,hassomepracticalvalue.Keywords:Password-Lock;SCM;STC89C52;LCD1602;AT24C02 目录摘要 IAbstract II目录 III第一章引言 11.1课题设计背景 11.2课题设计目标 1第二章系统方案论证 22.1主控部分的选择 22.2密码输入方式的选择 2第三章系统总体设计和主要芯片介绍 33.1系统总体设计 53.2主要芯片介绍 63.2.1AT89S52 63.2.2存储芯片AT24C02 83.2.2LCD1602显示器 9第四章硬件设计 114.1键盘输入模块 114.2密码存储模块 124.3复位部分 134.4晶振部分 134.5显示模块 144.6报警部分 154.7开锁部分 15第五章系统软件设计 175.1系统程序流程图 175.1.1主程序流程图 175.1.2键功能程序流程图 185.1.3开锁程序流程图 195.2子程序举例 205.2.1开锁子程序 205.2.2按键扫描子程序 225.2.3密修改码子程序 23第六章毕业设计总结 28致谢 29参考文献 30附录一总电路原理图 31附录二实物图 32附录三元器件清单 33附录四系统总体程序 34第一章引言1.1设计背景锁具是源流千古的社会性用品,主要用于日常生活和工作中,住宅与部门的安全防范。当前门锁的主流是弹子锁,其保密性不强,钥匙容易被仿制和意外丢失;且持有者需随时携带钥匙,使用不方便。保存贵重物件的保险箱主要用机械密码锁,其结构较为复杂,制造精度要求高,成本高昂,且易出现故障。随着科技、经济和社会的发展,当今社会公共安全防范系统对锁具的保密性、牢固性、可靠性、耐用性以及安装使用等提出了新的更高的要求。针对原有锁具的特点和缺陷,为满足人们对锁的使用需求,增加其安全性,用密码代替钥匙的电子密码锁应运而生。早期开发的电子密码锁由于电子器件所限,种类不多,保密性差,最基本的就是只依靠最简单的模拟电子开关来实现的,制作简单但不安全。后来多是基于EDA实现,其电路结构复杂,电子元件繁多,也有使用早先2051系列单片机来实现的,但密码简单,容易破解。随着电子元件的进一步发展,电子密码锁也出现了很多的种类,功能日益强大,使用更加方便,保密安全性更强;由以前的单密码输入发展到现在密码加感应元件,实现了真正的电子加密。电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。电子密码锁的出现给人们带来了极大的方便,有很广阔的市场前景。现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。本系统采用STC89C52单片机,应用液晶显示器1602作为输出显示系统提示信息的电子密码锁的设计与实现。1.2课题设计目标保密性好,编码量多。随机开锁成功率几乎为零。密码可变。用户可以经常更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。误码输入保护。当输入密码多次错误时,报警系统自动启动。操作简单易行,一学即会。本自动化071班张志达34号第二章系统方案论证2.1主控部分的选择方案一:采用数字电路控制用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,将密码保存在JK触发器中,与输入密码通过比较器比较,判断结果是否相符合[4]。采用数字电路设计的方案好处就是设计简单,但控制的准确性和灵活性差,故不采用。方案二:采用以单片机为核心的控制方案选用单片机作为系统的核心部件,实现控制与处理的功能。单片机具有资源丰富、速度快、编程容易等优点。利用单片机内部的随机存储器(RAM)和只读存储器(ROM)及其引脚资源,外接液晶显示(LCD),键盘输入等实现数据的处理传输和显示功能,基本上能实现设计指标,因此综合考虑,本系统采用方案二。2.2密码输入方式的选择方案一:指纹输入识别指纹识别技术主要涉及四个功能:读取指纹图像、提取特征、保存数据和比对。通过指纹读取设备读取到人体指纹的图像,然后要对原始图像进行初步的处理,使之更清晰,再通过指纹辨识软件建立指纹的特征数据。软件从指纹上找到被称为“节点”(minutiae)的数据点,即指纹纹路的分叉、终止或打圈处的坐标位置,这些点同时具有七种以上的唯一性特征。通常手指上平均具有70个节点,所以这种方法会产生大约490个数据。这些数据,通常称为模板。通过计算机模糊比较的方法,把两个指纹的模板进行比较,计算出它们的相似程度,最终得到两个指纹的匹配结果,从而判断输入结果的正确与否[5]。考虑到本方案软硬件太过复杂,而且成本也高,故不采用。方案二:矩阵键盘输入识别由各按键组成的矩阵键盘每条行线和列线都对应一条I/O口线,键位设在行线和列线的交叉点,当一个键按下就会有某一条行线与某一条列线接触,只要确定接触的是哪两条线,即哪两个I/O口线,就可以确定哪一个键被触动。行线设计成上拉口线,初始时被置高电位,列线悬空,初始置低。通过不断读行线口线,或者中断方式触发键位扫描。当发现有键按下,将列线逐一置低,其他列线置高,读行线口线。当某条列线置低时,某条行线也被拉低,则确定这两条线的交点处的按钮被按下。每个按键都可通过程序赋予功能,从而完成密码识别[8]。本方案简单易行,故采用。第三章系统总体设计和主要芯片介绍3.1系统总体设计本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等部分组成。其中矩阵键盘用于输入数字密码和进行各种功能的实现。由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,实际使用时只要将单片机的负载由继电器换成电子密码锁的电磁铁吸合线圈即可。系统整体框图如图3-1所示。 键盘输入模块开锁电路密码存储模块晶振电路STC89C52LED显示电路LCD显示模块蜂鸣器报警电路复位电路复位电路图3-1系统结构框图 ●各模块功能如下:1.键盘输入模块:分为密码输入按键与几个功能按键,用于完成密码锁输入功能。2.密码存储模块:用于完成掉电存储功能,使修改的密码断电后仍能保存。3.蜂鸣器报警电路:用于完成输错密码时候的警报功能。4.晶振电路:用于单片机的起振。5.复位电路:完成系统的复位。6.显示模块:用于完成对系统状态显示及操作提示功能。7.LED显示模块:用于辅助报警与输入提示。8.开锁电路:应用继电器及发光二极管模拟开锁,完成开锁及开锁提示。3.2主要芯片介绍3.2.1STC89C52STC89C52单片机是一个低功耗,高性能CMOS8位单片机,片内含8KBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的STC89C52可为许多嵌入式控制应用系统提供高性价比的解决方案[10]。STC89C52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。AT89S52的管脚分布如图3-2所示。P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入STC89C52芯片管脚此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P3口作为STC89C52的一些特殊功能管脚备选功能,P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)STC89C52主要特性如表3-1所示。表3-1STC89C52主要特性兼容MCS-51指令系统8k可反复擦写(>1000次)ISPFlashROM32个双向I/O口4.5-5.5V工作电压3个16位可编程定时/计数器时钟频率0-33MHz全双工UART串行中断口线256x8bit内部RAM2个外部中断源低功耗空闲和省电模式中断唤醒省电模式3级加密位看门狗(WDT)电路软件设置空闲和省电功能灵活的ISP字节和分页编程双数据寄存器指针3.2.2存储芯片AT24C02AT24C02是美国Atmel公司的低功耗CMOS型E²PROM,内含256×8位存储空间,具有工作电压宽(2.5~5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)、抗干扰能力强、数据不易丢失、体积小等特点。而且他是采用了I²C总线式进行数据读写的串行器件,占用很少的资源和I/O线,并且支持在线编程,进行数据实时的存取十分方便。AT24C02中带有的片内地址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8个字节的数据。I2C总线是一种用于IC器件之间连接的二线制总线。他通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件。AT24C02正是运用了I²C规程,使用主/从机双向通信,主机(通常为单片机)和从机(AT24C02)均可工作于接收器和发送器状态。主机产生串行时钟信号(通过SCL引脚)并发出控制字,控制总线的传送方向,并产生开始和停止的条件。无论是主机还是从机,接收到一个字节后必须发出一个确认信号ACK。AT24C02的控制字由8位二进制数构成,在开始信号发出以后,主机便会发出控制字,以选择从机并控制总线传送的方向。管脚描述:●SCL为串行时钟:串行时钟输入管脚用于产生器件所有数据发送或接收的时钟这是一个输入管脚。●SDL为串行数据/地址:双向串行数据/地址管脚用于器件所有数据的发送或接收SDL,是一个开漏输出管脚可与其它开漏输出或集电极开路输出进行线。●A0、A1、A2为器件地址输入端:当使用24C02时最大可级联8个器件,如果只有一个24C02被总线寻址,这三个地址输入脚A0、A1、A2可悬空或连接到Vss。●WP为写保护:如果WP管脚连接到Vcc所有的内容都被写保护只能读当WP,管脚连接到Vss或悬空,允许器件进行正常的读/写操作[12]。管脚图如图3-3所示。图3-3AT24C02引脚3.2.3LCD1602显示器现在的字符型液晶模块已经是单片机应用设计中最常用的信息显示器件了。1602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点。1602型LCD可以显示2行16个字符,有8位数据总线D0~D7和RS,R/W,EN三个控制端口,工作电压为5V,并且具有字符对比度调节和背光功能。LCD器件引脚图如下:显示地址如下:接口信号说明:1602型LCD的接口信号说明如表3-2所示。表3-21602型LCD的接口信号说明第1脚VSS电源地第9脚D2双向数据线第2脚VDD+5V电源第10脚D3双向数据线第3脚VEE液晶显示偏压信号第11脚D4双向数据线第4脚RS数据/命令选择端第12脚D5双向数据线第5脚R/W读/写选择端第13脚D6双向数据线第6脚E使能端第14脚D7双向数据线第7脚D0双向数据线第15脚BLA背光源正极第8脚D1双向数据线第16脚BLK背光源负极主要技术参数:1602型LCD的主要技术参数如表3-3所示。表3-31602型LCD的主要技术参数显示容量16×2个字符芯片工作电压4.5~5.5V工作电流2.0mA(5.0V)模块最佳工作电压5.0V字符尺寸2.95×4.35(WXH)mm基本操作程序:读状态:令RS=L,RW=L,E=H 输出:D0~D7=状态字读数据:令RS=H,RW=H,E=H 输出:无写指令:令RS=L,RW=L,D0~D7=指令码,E=高脉冲输出:D0~D7=数据写数据:令RS=H,RW=L,D0~D7=数据,E=高脉冲输出:无第四章硬件设计本系统外围电路包括键盘输入部分、密码存储部分、复位部分、显示部分、报警部分、开锁部分组成,根据实际情况键盘输入部分选择4×4矩阵键盘,显示部分选择字符型液晶显示LCD1602,密码存储部分选用AT24C02芯片来完成。其原理图如图4-1所示。图4-1电路原理图4.1键盘输入模块由于本设计所用到的按键数量较多而不适合用独立按键式键盘。采用的是矩阵式按键键盘,它由行和列组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。本设计中使用的这个4×4键盘不但能完成密码的输入还能作特别功能键使用。键盘的每个按键功能在程序设计中设置。它与单片机的连接如图4-2所示。图4-2键盘输入模块4.2密码存储模块图4-3所示AT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址。在AT89S51试验开发板上它们都接地,第5脚和第8脚分别为正、负电源。第8脚SDL为串行数据输入/输出,数据通过这条双向I²C总线串行传送,在AT89S52试验开发板上和单片机的P3.6连接。第6脚SCL为串行时钟输入线,在AT89S52试验开发板上和单片机的P3.7连接。SDL和SCL都需要和正电源间各接一个5.1K的电阻上拉。第6脚接P3.5。AT24C02中带有片内地址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8个字节的数据。图4-3密码存储电路4.3复位部分单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。该电路在最简单的复位电路下增加了手动复位按键,在接通电源瞬间,电容C1上的电压很小,复位下拉电阻上的电压接近电源电压,即RST为高电平,在电容充电的过程中RST端电压逐渐下降,当RST端的电压小于某一数值后,CPU脱离复位状态,由于电容C1足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复位。增加手动复位按键是为了避免死机时无法可靠复位。当复位按键按下后电容C1通过R5放电。当电容C1放电结束后,RST端的电位由R5与R6分压比决定。由于R5<<R6因此RST为高电平,CPU处于复位状态,松手后,电容C1充电,RST端电位下降,CPU脱离复位状态。R5的作用在于限制按键按下瞬间电容C1的放电电流,避免产生火花,以保护按键触电。其电路如图4-4所示。图4-4复位电路4.4晶振部分AT89S52引脚XTAL1和XTAL2与晶体振荡器及电容C2、C3按图4-5所示方式连接。晶振、电容C2/C3及片内与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率及电容C2、C3的容量有关,但主要由晶振频率决定,范围在0~33MHz之间,电容C2、C3取值范围在5~30pF之间。根据实际情况,本设计中采用12MHZ作为系统的外部晶振。电容取值为10pF。其电路图如图4-5所示。图4-5晶振电路4.5显示模块显示部分由液晶显示器LCD1602取代普通的数码管完成。开锁时,按下键盘上的开锁按键后,利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。当密码输入完成时,按下确认键,如果输入的密码正确的话,LCD显示“DOOROPEN”,单片机其中P2.0引脚会输出低电平,使三极管T2导通,电磁铁吸合,继电器开关跳转,电子密码锁被打开,如果密码不正确,LCD显示屏会显示“CODEWRONG”,P2.0输出的是高电平,电子密码锁不能打开。通过LCD显示屏,可以清楚地判断出密码锁所处的状态。电路图如图4-6所示。图4-6显示电路4.6报警部分报警部分由陶瓷压电发声装置及外围电路组成,加电后不发声,当有键按下时,“叮”声,每按一下,发声一次,密码正确时,不发声直接开锁,当密码输入错误时,单片机的P2.1引脚为低电平,三极管T3导通蜂鸣器发出噪声报警。如图4-7所示。图4-7报警电路
图4-7报警电路4.7开锁部分开锁控制电路的功能是当输入正确的密码后将锁打开。系统使用单片机其中一引脚线发出信号,经三极管放大后,由继电器驱动电磁阀动作将锁打开。用户通过键盘任意设置密码,并储存在E2PROM中作为锁码指令。只有用户操作键盘时,单片机的电源端才能得到3V电源,否则,单片机处于节电工作方式。开锁步骤如下:首先按下键盘上的开锁按键,然后利用键盘上的数字键0-9输入密码,最后按下确认键。当用户输入密码后,单片机自动识别密码,如果密码不符,则报警。只有当密码正确,单片机才能使继电器处于开锁状态。具体电路如图4-8所示。图4-8开锁电路第五章系统软件设计系统的软件设计采用汇编语言编码。设计方法是先用文本编辑器编写源码,然后用软件KeilC51编译,如果没有错误,可连接生成.HEX格式的文件(需事先在KeilC51中设置)。如果有错误则无法连接,但可在生成的.OBJ文件中找到代码错误的地方,便于修改。当然也可以直接在Keil中编码。生成的HEX文件是记录文本行的ASCII文本文件,在HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量。HEX文件经常被用于将程序或数据传输存储到ROM、EPROM,大多数编程器和模拟器使用HEX文件。5.1系统主程序开始初始化开始初始化密码正确输入旧密码出错报警开锁原密码相同设新密码返回开锁修改YNNYNNY5.1.2初始化及按键识别如图5-2,系统的初始化包括堆栈起始地址的设定,两个定时/计数器的设定,液晶显示模式的设定,密码缓冲区的初始化,一些自定义数据空间的初始化,蜂鸣器初始化发声等操作。果AT24C02里没有存储密码,或者读取AT24C02失败,则载入系统初始化密码;如果AT24C02里有掉电存储的密码,则会读出该密码。系统初始化并读取密码完成后,液晶显示"ThePassword:is",提示用户可以输入密码。此时程序即不断测试按键,检查是否有按键被按下。如果有,则进行按键识别;行列扫描法识别出的键位与对应BUFF的值如表4-1所示。如果没有按键按下,或者按下的按键没有被识别,kevyal赋值0FFH,并跳转至按键测试。实际程序运行时,绝大部分时间都在测试按键,等待用户输入。图5-2初始化及按键识别流程图有按键按下?否是按键测试子程序按键识别子程序按键重定位图5-2初始化及按键识别流程图有按键按下?否是按键测试子程序按键识别子程序按键重定位延时0.5S否识别成功?是开始系统初始化读取密码提示输入密码读取成功?否是载入初始密码5.1.3开锁处理首先LCD初始化,输入密码,密码正确则使开锁电路动作,继电器得电,开锁指示灯亮。开锁程序流程图如图5-3所示。LCD初始化LCD初始化按开锁键按开锁键输入密码输入密码确认程序开锁确认程序开锁N输入密码正确?N输入密码正确?报警程序报警程序 开锁成功返回 Y 开锁成功返回图5-3开锁流程图5.1.4改密处理如图5-4,可以看出,改密键的处理流程跟开锁键类似,都需检查密码是否正确,错误的话,提示重新输入,只有输入密码正确才可以进行改密。然后再按更改键,密码更改程序被调用,进而更改密码,此过程,LCD都会显示信息。输入密码再次输入新密码重新输入密码错误开始密码正确输入密码再次输入新密码重新输入密码错误开始密码正确两次输入对比相同NNY更改成功提示输入新密码Y更改成功提示输入新密码图5-4改密流程图图5-4改密流程图开始清显示写指令入IR字符地址入DPTR字符=00H?否是字符代码送入P0口写数据入DR地址+1开始清显示写指令入IR字符地址入DPTR字符=00H?否是字符代码送入P0口写数据入DR地址+1返回写结束图5-5液晶显示子程序流程图液晶显示子程序在每次更新显示内容时都会被调用,其流程如图5-5所示。每次更新显示内容前,需清显示清空LCD原先的显示内容,清屏指令的指令码为01H,即将P0口赋值01H,然后写入指令寄存器IR。LCD1602要显示的内容是根据其控制器内置的字符码表,事先列出要显示的ASCII字符串。每次送一个字符的ASCII码入P0口,然后写入数据寄存器DR,最后将字符地址加一,LCD1602会将写入的ASCII码对应的字符依次显示出来。由于显示字符串的长度不尽相同,约定每串字符以00H结尾;程序检测到字符码为00H时,即停止写入,返回。LCD显示的内容在下次更新前会一直保持。5.1.6AAT24C02的子程序包括从AT24C02中读取信息和将信息写入AT24C02,首先介绍AT24C02的读程序。如图5-6所示,单片机作为主器件,发送起始信号和要寻址的从器件的地址;因为此时即随后的发送读取地址操作都是单片机往AT24C02写入控制信息,所以R/W要置0。本设计中只用一个AT24C02,从器件地址为0,对应代码为0A0H。AT24C02接收到信号后,发送应答信号。单片机接收到应答信号后,再发送要读取信息在从器件上的地址;本设计中从0地址开始读,则送00H。再次接收到从器件的应答信号后,单片机重新发送起始信号和读模式信号,将R/W位置1,对应代码为0A1H,正式开始读取信息。本设计中需要连续读取16字节的信息,所以选择连续读方式;即是单片机每接收到一字节的信息后,存入正确密码缓冲区(AT1~AT16),然后产生一个应答信号,告知AT24C02要求更多的数据。当单片机不发送应答信号而发送停止信号时表示读取结束。图图5-6读AT24C02子程序流程图发送读取地址接收应答信号成功?是否开始发送起始信号发送从器件地址写模式接收应答信号成功?是否发送起始信号发送读模式信号接收应答信号成功?否是读一字节数据发送应答信号地址+1读完成?否是提示读取失败不发送应答信号发送停止信号提示读取成功返回写入AT24C02的子程序流程如图5-7所示。单片机发送起始信号,接着发送从器件AT24C02所在地址(0A0H)。这里与读AT24C02子程序不同的是,从开始到结束都是单片机控制AT24C02写入信息,所以R/W置1无需更改。对应地址上的从器件AT24C02接收到地址信号后发送应答信号。主器件在接收到应答信号后,发送要写入信息欲保存在从器件上的地址,本设计中从0地址开始保存,故地址为00H。单片机再次接收到从器件的应答信号后即可开始写入信息。本设计中采用字节写模式,即AT24C02在每接收一个8位字节之后响应一个应答信号,单片机在接收到应答信号后认为该字节成功写入,便准备下一字节的数据。直到所有数据发送完毕,单片机发送停止信号,结束写操作。图5-7写AT24C02子程序流程图发送写入地址接收应答信号成功?图5-7写AT24C02子程序流程图发送写入地址接收应答信号成功?是否成功?是否开始发送起始信号发送从器件地址写模式接收应答信号提示写入失败发送停止信号提示写入成功返回地址+1写完成?否是成功?否是接收应答信号写一字节数据第六章系统调试与测试系统的软硬件设计都完成后,还不能直接上电运行;需要对系统进行详细的调试,以消除在设计过程中出现的各种错误。单片机系统的硬件调试和软件调试是不能分开的,很多硬件错误是在软件调试中被发现和纠正的。但通常是先排除明显的硬件故障以后,再和软件结合起来调试以进一步排除故障。所以硬件的调试是基础,如果硬件调试不通过,软件设计则是无从做起。当硬件设计从布线到焊接安装完成之后,就开始进入硬件调试阶段。首先应该确认电源电压是否正常,用电压表测量接地引脚跟电源引脚之间的电压,看是否是电源电压。接下来就是检查复位引脚电压是否正常。分别测量按下复位按钮和放开复位按钮的电压值,看是否正确。然后再检查晶振是否起振了,一般用示波器来看晶振引脚的波形,注意应该使用示波器探头的“X10”档。另一个办法是测量复位状态下的IO口电平,按住复位键不放,然后测量IO口(没接外部上拉的P0口除外)的电压,看是否是高电平,如果不是高电平,则多半是因为晶振没有起振。另外还要注意的地方是,如果使用片内ROM的话,一定要将EA引脚拉高,否则会出现程序乱跑的情况。如果系统运行不稳定的话,有时是因为电源滤波不好导致的。在单片机的电源引脚跟地引脚之间接上一个0.1uF的电容会有所改善。如果电源没有滤波电容的话,则需要再接一个更大滤波电容,例如220uF的。遇到系统不稳定时,就可以并上电容,越靠近芯片越好。系统的键盘输入电路,蜂鸣器发声电路,AT24C02密码存储电路,继电器开锁电路,液晶显示电路,这几个部分在检查硬件无误后,需要结合软件调试。可编写单独控制某一部分的程序,运行看是否可以正确控制。如蜂鸣器发声电路,可编写程序控制单片机P3..6口电平,上电运行看是否正常发声。一些无法直接观测出运行效果的电路,如键盘输入电路和密码存储电路,则需结合液晶显示器调试。如键盘输入电路,需加上按键显示程序显示被按下按键的keyval值。第七章总结在着手本次课程设计时,通过查阅网络与图书馆搜集到的资料,再加上指导老师指点,结合生活中对密码锁的功能特性要求,设计出了这一套电子密码锁系统的主要硬件结构和软件结构,基本完成了课题的要求。不过由于了解的专业知识尚浅,对课题的研究经验的不足,使得在技术的解决与运用上显得粗糙了一些,特别是功能按键的设定。所幸该系统能基本上完成一个电子密码锁应有的功能特性:开锁提示,输错报警,密码修改,掉电存储。本系统用的是6位密码输入,有106种密码输入方案,相较于机械锁具,防盗能力已经相当不俗。这个系统软硬件设计简单,易于开发,成本较低,安全可靠,操作方便。本次设计的电子密码锁是以手动键盘输入密码的,通过这两个星期对电子密码锁的研究学习,发觉这种密码输入方式可以进行改革。在越来越高科技化的今天,遥控控制显的愈发重要,今后的电子密码锁应该具有以红外技术或无线电技术为辅助的密码按键输入远程交互技术,这样就能远程输入密码完成操作。也可以放弃传统的按键输入密码模式,借助传感器技术运用声控来实现密码输入,又或者人脸识别技术,还有一种就是用户指纹输入方式,这些都可以使开锁的时间更短更方便。电子密码锁产业将向静态功耗更低,外围电路更简化,可提供的功能或控制口更多,更人性化高科技化的方向发展。通过本次课程设计的锻炼,我学到了很多有关电子密码锁的设计方法与工作原理,巩固了单片机知识。期间也碰到不少问题,比如如何去模拟实现开锁这一功能,解决办法是找了个微型电磁继电器作为锁具,其内部电磁开关特性符合开锁的现象。再到后来的焊接工作,由于粗心大意,焊接出错的情况不在少数,往往在调试的时候才得以发现,特别是4×4矩阵键盘的焊接,改了不下10次。系统调试时碰到过按键不灵敏的问题。后来增加了键盘列位置上的电阻,增加了电平,效果得到改善。慢工出细活,过程是很重要的,只有耐心细心努力地去把握过程,才能得到可喜的结果。参考文献:[1]孙涵芳,徐爱卿。MCS-51/96系列单片机原理及应用[M]。北京:北京航空航天大学出版社,1996[2]李广弟,朱月秀,冷祖祁。单片机基础[M]。北京:北京航空航天大学出版社,2007[3]董继成。一种新型安全的单片机密码锁[J]。电子技术,2004,(03)[4]石文轩,宋薇。基于单片机MSC-51的智能密码锁设计[S]。武汉工程职业技术学院学报,2004,(01)[5]吴春国,李文石。单片机控制电子锁技术剖析[S]。东北林业大学学报,2002,(05)[6]李景宏,马学文。电子技术实验教程[M]。沈阳:东北大学出版社,2004[7]贾正松。单片机系统复位电路设计[J]。科技资讯,2007,(36)[8]袁新燕。浅谈单片机应用系统的调试[J]。自动化与仪器仪表,2000,(03)[9]王晖,薛永存。基于MCS-51单片机的复位电路抗干扰分析与设计[J]。现代电子技术,2006,(08)[10]datasheetofMicrocontrollerAT89S52.Atmel,Inc.[11]datasheetofSerialEEPROM2K(256*8)AT24C02.Amel,Inc.[12]通用LCD1602液晶显示模块使用手册(J/OL)。伟纳电子.[13]51单片机综合学习系统——蜂鸣器、继电器篇(J/OL)。维普资讯.[14]单片机控制继电器实验(J/OL)。电子驿站.[15]9012,9013,9014,9015,9018晶体三极管技术手册(J/OL)。电子爱好者.[16]蔡金生。SUPERPRO编程器使用指南(J/OL)。沪生电子.附录一总电路原理图附录二实物图附录程序//矩阵式键盘实现的电子密码锁#include<reg52.h>//包含51单片机寄存器定义的头文件#include<intrins.h>#definesomenop();{_nop_();_nop_();_nop_();_nop_();_nop_();}//定义空指令#defineucharunsignedcharsbitRS=P3^0;//寄存器选择位,将RS位定义为P2.0引脚sbitRW=P3^1;//读写选择位,将RW位定义为P2.1引脚sbitE=P3^2;//使能信号位,将E位定义为P2.2引脚sbitji=P3^6;sbitSCl=P3^4;//24c02时钟线sbitSDA=P3^5;//24C02数据线sbitBF=P0^7;//忙碌标志位,,将BF位定义为P0.7引脚sbitP14=P1^4;//将P14位定义为P1.4引脚sbitP15=P1^5;//将P15位定义为P1.5引脚sbitP16=P1^6;//将P16位定义为P1.6引脚sbitP17=P1^7;//将P17位定义为P1.7引脚sbitsound=P3^7;//将sound位定义为P3.7voidi2c_writebyte(ucharadd,uchardat);voiddelay1ms();voiddelayn(ucharn);voiddelay_zx1ms(unsignedintz);ucharBusyTest(void);voidWriteInstruction(uchardictate);voidWriteAddress(ucharx);voidWriteData(uchary);voidLcdInitiate(void);voidshuru(void);voidjinbao(void);voiddelay_zx1ms(unsignedintz);ucharcodegit[]={""};ucharcodedigit[]={"******"};ucharcodestring[]={"Thepasswordis"};ucharcodestr[]={"Newpasswordis"};ucharcodeing[]={"Repeatagain:"};ucharcodeting[]={"Inputerror!!!"};ucharcodesting[]={"Repeatagain:"};ucharcodestting[]={"error!errr!"};ucharcodesttting[]={"ModifyError!"};ucharcodestttting[]={"Hello,wlecome!"};ucharcodesttttting[]={"Modifysucceed!"};ucharcodestttttting[]={"Congratulations!"};ucharkeyval,C[]={0,1,2,3,4,5,6,7,8,9},i,j=0;//储存按键值ucharA[10],M[7],N[6],F[6],G[6],D[6];unsignedintcou,sou,tone;unsignedinto,b,q;/*****************************************************函数功能:延时若干毫秒入口参数:n***************************************************/voiddelayn(ucharn){uchari; for(i=0;i<n;i++) delay_zx1ms(1);}/*************************************************************函数功能:延时输出音频**************************************************************/voiddelay1(intcnt){inti;for(i=0;i<cnt;i++);}voiddelay(void){uchari; for(i=0;i<200;i++) ;}voiddelay_zx1ms(unsignedintz){unsignedinti,j; for(i=z;i>0;i--) for(j=249;j>0;j--);}voidjinbao(void){ for(q=0;q<cou;q++)/*发声的次数循环*/{ P2=~P2;/*反相输出,使LED闪烁*/ for(o=0;o<sou;o++)/*音长的循环*/{sound=~sound;for(b=0;b<tone;b++);/*音调*/}delay_zx1ms(200);/*停留一段时间*/}}/*****************************************************函数功能:判断液晶模块的忙碌状态返回值:result。result=1,忙碌;result=0,不忙***************************************************/ucharBusyTest(void){bitresult; RS=0;//根据规定,RS为低电平,RW为高电平时,可以读状态RW=1;E=1;//E=1,才允许读写_nop_();//空操作_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应时间 result=BF;//将忙碌标志电平赋给result E=0;returnresult;}/*****************************************************函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate***************************************************/voidWriteInstruction(uchardictate){while(BusyTest()==1);//如果忙就等待 RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令 RW=0; E=0;//E置低电平(根据表8-6,写指令时,E为高脉冲,//就是让E从0到1发生正跳变,所以应先置"0" _nop_(); _nop_();//空操作两个机器周期,给硬件反应时间 P0=dictate;//将数据送入P0口,即写入指令或地址 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 E=1;//E置高电平 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}/*函数功能:指定字符显示的实际地址入口参数:x***************************************************/voidWriteAddress(ucharx){WriteInstruction(x|0x80);//显示位置的确定方法规定为"80H+地址码x"}/*****************************************************函数功能:将数据(字符的标准ASCII码)写入液晶模块入口参数:y(为字符常量)***************************************************/voidWriteData(uchary){while(BusyTest()==1); RS=1;//RS为高电平,RW为低电平时,可以写入数据 RW=0; E=0;//E置低电平(根据表8-6,写指令时,E为高脉冲,//就是让E从0到1发生正跳变,所以应先置"0" P0=y;//将数据送入P0口,即将数据写入液晶模块 _nop_(); _nop_(); _nop_();_nop_();//空操作四个机器周期,给硬件反应时间 E=1;//E置高电平 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}/*****************************************************函数功能:对LCD的显示模式进行初始化设置***************************************************/voidLcdInitiate(void){delayn(15);//延时15ms,首次写指令时应给LCD一段较长的反应时间WriteInstruction(0x38);//显示模式设置:16×2显示,5×7点阵,8位数据接口 delayn(5);//延时5ms WriteInstruction(0x38); delayn(5); WriteInstruction(0x38); delayn(5); WriteInstruction(0x0f);//显示模式设置:显示开,有光标,光标闪烁 delayn(5); WriteInstruction(0x06);//显示模式设置:光标右移,字符不移 delayn(5); WriteInstruction(0x01);//清屏幕指令,将以前的显示内容清除 delayn(5);}/******************************//函数:i2c_start()//输入://返回://功能:启动i2c*******************************/voidi2c_start(){SDA=1;SCl=1;somenop();//起始信号建立时间大于4.7usSDA=0;somenop();//起始信号保持时间大于4usSCl=0;}/******************************//函数:i2c_stop()//输入://返回://功能:停止i2c*******************************/voidi2c_stop(){SDA=0;SCl=1;somenop();//停止信号建立时间大于4usSDA=1;}/******************************//函数:i2c_ACK(bitck)//输入:ck//返回://功能:ck为1时发送应答信号ACK,ck为0时不发送ACK*******************************/voidi2c_ACK(ucharck){if(ck)SDA=0;elseSDA=1;somenop();//SCK低电平保持时间大于4.7usSCl=1;somenop();//SCK高电平保持时间大于4usSCl=0;SDA=1;//ACK后要对总线进行释放,somenop();}/******************************//函数:i2c_waitACK()//输入://返回:1,0//功能:返回为1时收到ACK返回为0时没收到ACK*******************************/biti2c_waitACK(){SDA=1;somenop();SCl=1;somenop();if(SDA)//SDA为1没接收到ACK{SCl=0;i2c_stop();return0;}else//SDA为0接收到ACK{SCl=0;return1;}}/******************************//函数:i2c_sendbyte(ucharbt)//输入:bt//返回://功能:将输入的一字节数据bt发送*******************************/voidi2c_sendbyte(ucharbt){uchari;for(i=0;i<8;i++){if(bt&0x80)SDA=1;elseSDA=0;somenop();SCl=1;bt=bt<<1;somenop();SCl=0;}}/******************************//函数:i2c_recbyte()//输入://返回:dee//功能:从总线上接收1字节数据*******************************/uchari2c_recbyte(){uchardee;ucharj;for(j=0;j<8;j++){SCl=1;somenop();dee=dee<<1;if(SDA)dee=dee|0x01;SCl=0;somenop();}returndee;}/******************************//函数:i2c_readbyte//输入:add//返回:hep//功能:字节读,在指定的地址(add)读出一字节数据*******************************/uchari2c_readbyte(ucharadd){ucharhep;i2c_start();i2c_sendbyte(0xa0);i2c_waitACK();i2c_sendbyte(add);i2c_waitACK();i2c_start();i2c_sendbyte(0xa1);i2c_waitACK();hep=i2c_recbyte();i2c_ACK(0);i2c_stop();returnhep;}/******************************//函数:i2c_serwrite//输入:slave,add,p,num//返回://功能:页写,在指定的地址(add)开始连续写入8字节数据slave为器件地址p为写入的数据指针num为写入的字节数<=8*******************************/i2c_serwrite(ucharslave,ucharadd,uchar*p,ucharnum){ucharn;i2c_start();i2c_sendbyte(slave);i2c_waitACK();i2c_sendbyte(add);i2c_waitACK();for(n=0;n<num;n++){i2c_sendbyte(*p);i2c_waitACK();p++;}i2c_stop();delay1(124);//24C02写周期最大10MS,此处为2MS}/******************************//函数:i2c_serread//输入:slave,add,k,num//返回://功能:连续读,从指定的地址(add)开始连续读num个字节数据slave为器件地址k为存储数据指针*******************************/voidi2c_serread(ucharslave,ucharadd,uchar*k,ucharnum){ucharn;i2c_start();i2c_sendbyte(slave);i2c_waitACK();i2c_sendbyte(add);i2c_waitACK();i2c_start();i2c_sendbyte(slave+1);i2c_waitACK();for(n=0;n<num-1;n++){*k=i2c_recbyte();i2c_ACK(1);k++;}*k=i2c_recbyte();i2c_ACK(0);i2c_stop();}voidshuru(void){ ucharcount=0,H[]={12,13,11,14,9}; keyval=0xff; count=0; LcdInitiate();//调用LCD初始化函数delayn(10);//延时10ms,给硬件一点反应时间 WriteAddress(0x00);//从第1行第3列开始显示i=0;//指向字符数组的第1个元素 for(j=0;j<15;j++) { WriteData(string[i]); i++;//指向下字符数组一个元素 } WriteAddress(0xc4); WriteInstruction(0x0f);//显示模式设置:显示开,有光标,光标闪烁 delayn(5); while(1){ delay_zx1ms(20); if(keyval==C[0]){A[count]=C[0]; count++; keyval=0xff; P2=0xfe;delay_zx1ms(200); P2=0xff; } if(keyval==C[1]) {A[count]=C[1]; count++; keyval=0xff; P2=0xfe; delay_zx1ms(200); P2=0xff; } if(keyval==C[2]) {A[count]=C[2]; count++; keyval=0xff;P2=0xfe; delay_zx1ms(200); P2=0xff; } if(keyval==C[3]) {A[count]=C[3]; count++; keyval=0xff; P2=0xfe; delay_zx1ms(200); P2=0xff; } if(keyval==C[4]) {A[count]=C[4]; count++; keyval=0xff; P2=0xfe; delay_zx1ms(200); P2=0xff; } if(keyval==C[5]) {A[count]=C[5]; count++; keyval=0xff; P2=0xfe; delay_zx1ms(200); P2=0xff; } if(keyval==C[6]) {A[count]=C[6]; count++; keyval=0xff; P2=0xfe; delay_zx1ms(200); P2=0xff; } if(keyval==C[7]) {A[count]=C[7]; count++; keyval=0xff;P2=0xfe; delay_zx1ms(200); P2=0xff; } if(keyval==C[8]) {A[count]=C[8]; count++; keyval=0xff;P2=0xfe; delay_zx1ms(200); P2=0xff; } if(keyval==C[9]) {A[count]=C[9]; count++; keyval=0xff; P2=0xfe; delay_zx1ms(200); P2=0xff; } if(keyval==H[1])
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 培训教育项目管理办法
- 杭州安保成本管理办法
- 智慧城市工作管理办法
- 券商资金运营管理办法
- 网络与新媒体的应用与发展
- 机场服务检查管理办法
- 营销传播整合的理念与特点
- 综合实践项目研究报告
- 保姆保洁收纳管理办法
- 金属矿山安全费用提取标准
- 医院入职培训:医德医风
- 2025年军人离婚协议书范本
- 化妆品生产质量管理体系手册
- 娱乐行业:舞蹈演员个人简介简历
- 工程造价复审报告书范文
- SAP S4HANA 用户操作手册-成本控制CO操作手册-002-订单成本核算
- 房屋代建协议书范本
- 幼儿园2025-2026学年度第一学期园本培训计划
- 2025年度矿山开采与沙石资源承包合同范本4篇
- 3D3S基本模块命令详解施加荷载地震参数11课件讲解
- 乘联会:2024年11月OTA监测月报
评论
0/150
提交评论