版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章电子密码锁简介1.1电子密码锁的概念什么是电子密码锁?“一种通过密码输入来控制电路或者是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。”——百度百科上是这样解释的。简单来说,电子密码锁就是能够实现密码等信息的设置、存贮、识别和显示,以及报警信号的接收和发送等功能的电子器件。 1.2电子密码锁设计的背景及意义基于单片机的电子密码锁的出现,在一定程度上解决了用户私人财产安全的问题。但是,时代在发展,社会在进步,任何事物只有不断地进步才能适应时代发展的需求。电子密码锁虽然有安全性高、操作简单等优点,但是却不如机械锁价格低廉,因此,在市场上的主流产品还是机械锁。电子密码锁要想取代机械锁成为市场上的主流,就必须不断改进,在具有更多功能的同时向更智能化和更低成本化发展。这就需要我们不断研究电子密码锁的设计方法和实现原理。因此,研究基于单片机的电子密码锁的设计是很有必要且具有现实意义的。1.3电子密码锁的现状及发展趋势目前,和西方发达国家相比,我国的电子密码锁技术还相对落后。在西方发达国家,电子密码锁的种类已经很齐全,技术也比较先进,且在各个领域得到了广泛应用。在我国,电子密码锁技术却才相当于国际上七十年代的水平,相对来说还很落后。20世纪80年代以来,随着各种电子集成电路的出现,特别是单片机的面世,电子密码锁得到了很大的发展。相对于笨重而构造简单的传统机械锁来说,电子密码锁具有体积小,可靠性高的优势。但是就目前而言,电子密码锁的价格相对较高且需要有电源提供能量,使得其使用还局限在一定范围,特别是在国内,各种条件的制约使得电子密码锁暂时难以普及。尽管电子密码锁还存在着一些缺陷,但是其安全性高、方便易用、能够智能报警的优势却是传统钥匙锁取代不了的,而且随着电子信息技术的发展和各种电子器件的价格的不断降低,电子密码锁也将往低成本、多功能的方向发展。1.4设计内容本设计研究的是如何进行电子密码锁的设计,本系统由单片机系统、矩阵键盘、LED显示和报警系统组成。系统能完成开锁、超时报警、超次锁定、管理员解密、修改用户密码基本的密码锁的功能。本设计是基于AT89C51单片机为控制核心的密码锁设计方案。在本次基于单片机的电子密码锁设计中,将采用AT89C51单片机作为控制核心,配合相应的电路和软件程序,实现密码的输入和修改、信息的显示、键盘的锁定、系统报警、开锁和闭锁等功能。在设计中,利用识别密码是否正确来开锁或报警,通过串行存储器AT24C02来实现密码的修改和存储
第2章硬件设计2.1系统设计框图电子密码锁的组成框图,它是以51系列单片机(AT89s51)为核心,配以相应硬件电路,完成密码的设置、存贮、识别和显示、驱动电磁执行器并检测其驱动电流值、接收传感器送来的报警信号、发送数据等功能。
单片机接收键入的代码,并与存贮在EEPROM中的密码进行比较,如果密码正确,则驱动电磁执行器开锁;如果密码不正确,则允许操作人员重新输入密码,最多可输入三次;如果三次都不正确,则单片机通过通信线路向智能监控器报警。单片机将每次开锁操作和此时电磁执行器的驱动电流值作为状态信息发送给智能监控器,同时将接收来自传感器接口的报警信息也发送给智能监控器,作为智能化分析的依据。系统结构框图和仿真电路如下。图1系统结构框图图2系统仿真电路2.2AT89S52单片机介绍AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
图3单片机引脚图图3单片机引脚图引脚介绍如图3所示Vcc;电源GND;接地P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。P1口:P1
口是一个具有内部上拉电阻的8
位双向I/O
口,p1
输出缓冲器能驱动4
个TTL逻辑电平。
对P1
端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表3-1所示。在flash编程和校验时,P1口接收低8位地址字节。P2口:P2
口是一个具有内部上拉电阻的8
位双向I/O
口,P2
输出缓冲器能驱动4
个TTL
逻辑电平。
对P2
端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX
@DPTR)时,P2
口送出高八位地址。在这种应用中,P2
口使用很强的内部上发送1。在使用8位地址(如MOVX
@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89S52特殊功能(第二功能)使用,如表3-2所示。
在flash编程和校验时,P3口也接收一些控制信号。RST:
复位输入。
晶振工作时,RST脚持续2
个机器周期高电平将使单片机复位。看门狗计时完成后,RST
脚输出96
个晶振周期的高电平。
ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8
位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。
在一般情况下,ALE
以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。
PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。
当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。
EA/VPP:访问外部程序存储器控制信号。
为使能从0000H
到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应接VCC。在flash编程期间,EA也接12伏VPP电压。
XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:振荡器反相放大器的输出端。2.3键盘电路设计每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。当确认有按键按下后,下一步就要识别哪一个按键按下。对键的识别通常有两种方法:一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。对照图4所示的4×4键盘,说明线反转个工作原理。首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。方法是:向行线输出全扫描字00H,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。方法是:依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。图4键盘电路图2.4报警电路设计声音的产生是一种音频振动的效果,振动的频率高则为高音,频率底则为低音。音频的范围为20Hz~200kHz之间,人类耳朵比较容易辨识的声音大概是200Hz~20kHz。一般音响电路是以正弦波信号驱动喇叭,产生悦耳的音乐的,而在数字电路中,则是以脉冲信号驱动喇叭以产生声音。
本系统使用的蜂鸣器产生的声音是利用程序产生频率,送到输出端口。利用LED灯表示输入密码正确与否,红色表示密码错误,蜂鸣器发出报警声,密码正确时,绿色LED灯亮。图5报警电路2.5显示电路设计本系统设计的显示电路是为了给使用者以提示而设置的,使用LCD可以为用户提供更友好的人机界面,故选用LCD1602作为显示器件。开锁时,按下键盘上的开锁按键后,利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。当密码输入完成时,按下确认键,如果输入的密码正确的话,LCD显示“OK”,单片机其中P3.0引脚会输出低电平,使三极管T2导通,电磁铁吸合,继电器开关跳转,电子密码锁被打开,如果密码不正确,LCD显示屏会显示“youarethief!”,P3.0输出的是高电平,电子密码锁不能打开。通过LCD显示屏,可以清楚地判断出密码锁所处的状态。2.6开锁电路设计因为在设计中是以发光二极管代替电磁锁,二极管亮代表锁开,因此可以设计一个简单的可以点亮二极管的电路系统代替电磁锁开锁机构。开锁显示电路如图6所示由于单片机I/O口默认为高电平,故初始时二极管不亮,代表锁是闭着的。当用户输入密码并验证正确时,发出开锁信号(使P2.4=0)。图6开锁电路第3章软件设计4.1工具软件介绍4.1.1Kell软件介绍KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果使用C语言编程,那么Keil几乎就是不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍KeilC51开发系统基本知识⒈系统概述KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil的优势。下面详细介绍KeilC51开发系统各部分功能和使用。⒉KeilC51单片机软件开发系统的整体结构C51工具包的整体结构,μVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.obj)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.abs)。abs文件由OH51转换成标准的hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。使用独立的Keil仿真器时,注意事项仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。仿真器上的复位按钮只复位仿真芯片,不复位目标系统,仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片内ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。4.1.2Proteus仿真软件介绍Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。4.2程序设计调试图7程序框图4.3程序仿真本设计经过kell的编辑,反复修改后,生成hex文件通过proteus进行仿真,调试过程主要包括两方面:测试和调整,调试的整个过程就是一系列的测量、判断、调整、再测量的反复进行过程。本系统调试采用的是先分调再总调。调试过程中,要依照信号流程,分步逐级进行调试,并取得了预期的结果。第4章设计总结5.1设计总结本系统由单片机系统、矩阵键盘、LCD显示和报警系统组成。系统能完成开锁、错误报警,超次锁定、修改用户密码,恢复初始密码基本的密码锁的功能。除上述基本的密码锁功能外,还有声音提示等功能,依据实际的情况还可以添加遥控功能。本系统利用单片机控制,LCD显示,配合蜂鸣器提示,系统成本低廉,功能强大实用。但是在系统调试过程中,还是发现一些问题,系统不稳定情况时有发生,经过反复调试发现下列问题:按键效果不好,产生较大状况的抖动,使软件消抖不完全;另外一个就是单片机本身不问题,引起系统跑飞或者卡死;还有就是由于电路板制作的原因,线路之间产生干扰,系统发生错误,比如液晶显示错误等等。经过反复调试和修改,最好终于达到一个比较满意的水平。本系统设计还做的不是太人性化,比如说能够加上语音提示和遥控开锁功能,将可能会更加有生命力!致谢我非常感谢我的导师袁科新老师。这篇论文是在袁科新老师的精心指导和亲切关怀下完成的。从最初的定题,到收集资料,到论文修改,袁科新老师始终悉心指导、无私帮助。袁科新老师严谨的治学态度,科学的学习方法以及无私奉献的敬业精神将使我终身受益。在此,谨向袁科新老师致以深深的敬意和诚挚的感谢。本论文的完成,还得到了信息工程学院其他老师的关怀和指导,在此向所有给予我帮助和关怀的老师们说一声:谢谢!毕业论文的收尾,也意味着我在袁科新大学的三年学习生活即将结束,自己最宝贵的青春时光能在这样的校园中,能在这些学富五车、才华横溢的老师们得熏陶下度过,我在思想和学业上受益匪浅。最后,再次向关心和帮助我的老师,亲人,同学和朋友表示我最真挚的谢意。谢谢你们!
参考文献[1]江晓安,董秀峰.
模拟电子技术.第3版.西安:
西安电子科技大学出版社2001.p34-39[2]陈明荧.
8051单片机课程设计.
第2版.北京:清华大学出版社,
2003.p45-67[3]邢敏华.模拟、数字及电力电子技术.第4版.北京:机械工业出版社,2013.p56-76[4]陈中平.51单片机C语言程序设计经典实例.第5版.北京:电子工业出版社,2012.p67-89[5]胡宴如.模拟电子技术.耿苏燕.第4版.北京;高等教育出版社,2013:p83-93[6]杨志忠.数字电子技术.第4版.北京:高等教育出版社,2013:p240-244[7]陆国和.电路与电工技术.顾永杰.第3版.北京:高等教育出版社,2010:p253-285[8]王静霞.单片机应用技术.杨宏丽.第2版.北京:电子工业出版社,2014:p141-150[9]朱岩.工业用微型计算机.2011年版.北京:机械工业出版社,2011:p182-227
附录源程序代码#include<reg52.h>#include<string.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#defineLCDIOP0#definedelay4us()_nop_();_nop_();_nop_();_nop_();ucharbuffer[6]={0};sbitsda=P3^4;sbitscl=P3^3;sbitbeep=P3^7;sbitrelay=P2^3;sbithuifu=P2^6;bitflag=0,aa; //用户zi定时溢出标志位ucharDSY_BUFFER[16]="";ucharDSY_BUFFER1[16]="";ucharUserpassword[6]={0};ucharMem[6]={0};sbitrs=P2^0;sbitrd=P2^1;sbitlcden=P2^2;sbitled=P2^4;sbitled1=P2^7;ucharcodetable2[]="123456";ucharcodetable[]="Inputyourcode:";voiddelayms(uintz){ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}voiddelay() //短延时,两个机器周期,做总线的延时用{;;}voidwrite_com(ucharcom){ rs=0; rd=0; lcden=0; P0=com; delayms(3); lcden=1; delayms(3); lcden=0; }voidwrite_date(uchardate){ rs=1; rd=0; lcden=0; P0=date; delayms(3); lcden=1; delayms(3); lcden=0; }voidDisplay_String(uchar*p,ucharcom){uchari;write_com(com);for(i=0;i<16;i++){write_date(p[i]); }}voidinit_lcd(){ lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80);Display_String(table,0x80); Display_String("===LockOK!======",0xc0);}voidstart(){ sda=1; scl=1; delay4us(); sda=0; delay4us(); scl=0;}voidstop(){ sda=0; scl=1; delay4us(); sda=1; delay4us(); scl=0;}voidinit() //初始化{sda=1;delay();scl=1;delay();}voidack(){ sda=0; scl=1; delay4us(); scl=0; sda=1;}voidnoack(){ sda=1; scl=1; delay4us(); scl=0; sda=0;}ucharrecbyte(){ uchari,rd; rd=0x00; sda=1; for(i=0;i<8;i++) { scl=1; rd<<=1; rd|=sda; delay4us(); scl=0; delay4us(); } scl=0; delay4us(); returnrd;}ucharsendbyte(ucharwd){ uchari; bitack0; for(i=0;i<8;i++) { sda=(bit)(wd&0x80); _nop_(); _nop_(); scl=1; delay4us(); scl=0; wd<<=1; } delay4us(); sda=1; scl=1; delay4us(); ack0=!sda; scl=0; delay4us(); returnack0;}ucharRecstring(ucharslave,ucharsubaddr,uchar*buffer,ucharn){uchari;start();if(!sendbyte(slave))return0;if(!sendbyte(subaddr))return0;start();if(!sendbyte(slave+1))return0;for(i=0;i<n-1;i++){ buffer[i]=recbyte(); ack();}buffer[n-1]=recbyte();noack();stop();return1;}ucharSendstring(ucharslave,ucharsubaddr,uchar*buffer,ucharn){ uchari; start(); if(!sendbyte(slave))return0; if(!sendbyte(subaddr))return0; for(i=0;i<n;i++) { if(!sendbyte(buffer[i]))return0; } stop(); return1;}voidclear_password(){ uchari; for(i=0;i<6;i++) { Userpassword[i]=''; } for(i=0;i<16;i++) { DSY_BUFFER[i]=''; }}ucharKeys_Scan(){ uchartemp,keynum; P1=0x0F; delayms(5); temp=P1^0x0F; //扫描行线值 switch(temp) { case1:keynum=1;break; case2:keynum=4;break; case4:keynum=7;break; case8:keynum=10;break; break; } P1=0xF0; delayms(5); temp=P1>>4^0x0f; switch(temp) { case8:keynum+=0;break; case4:keynum+=1;break; case2:keynum+=2;break; case1:keynum+=12;break; break; } delayms(600);returnkeynum;}voidmain(){uchartemp,i=0,j=0,k=0,n,m=0,flay,error,ne=1; ucharIS_valid_user; relay=1; init(); init_lcd(); delayms(5); P1=0x0f; while(1) {if(!huifu==1) {aa=Sendstring(0xa0,1,table2,6); delayms(10); aa=Recstring(0xa0,1,buffer,6); } else aa=Recstring(0xa0,1,buffer,6); if(P1!=0x0f) {delayms(10); if(P1!=0x0f) { temp=Keys_Scan(); switch(temp){case11:temp=0;case1:case2:case3:case4:case5:case6:case7:case8:case9:if(i<=5)//密码限制在6位以内{Userpassword[i]=temp;DSY_BUFFER[i]='*';Display_String(DSY_BUFFER,0xc0); i++; } break; case19: //按F键清除一位 if(i!=0) {i--; for(n=0;n<i;n++) { DSY_BUFFER1[n]=temp+'*'; } } Display_String(DSY_BUFFER1,0xc0); break;case12://按Enter键开锁 for(k=0;k<6;k++) { if(buffer[k]==(Userpassword[k]+48)) flag=1; else flag=0; } if(flag==1) { flag=0; i=0; led=0;//点亮LED relay=0;//开锁 clear_password(); Display_String("OPENOK!",0xc0); IS_valid_user=1; j=0; error=0; } else { j++; error++; led=1;//关闭LED clear_password(); Display_String("ERROR!Retry:",0xc0); write_com(0xcf); write_date(0x30+j); IS_valid_user=0; } i=0; break;case10://按Lock键上锁 led=1; relay=1; //关闭锁 clear_password(); Display_String(table,0x80); Display_String("===LockOK!=====",0xc0); i=0; IS_valid_user=0; break;case13://按C键设置新密码//如果是合法用户则提示输入新密码 if(!IS_valid_user) { i=0; Display_String("==Norights!==",0xc0); delayms(1000); Display_String("YourPassword...",0x80); Display_String("===LockOK!====",0xc0); } else { i=0; newcode:Display_String("NewPassword:",0x80); Display_String("",0xc0); } break;case16://按D键保存新密码 if(!IS_valid_user) { i=0; Display_String("==Norights!==",0xc0); delayms(1000); Display_String("YourPassword...",0x80); Display_String("===LockOK!====",0xc0); } else {i=0; init(); flay=1; //密码校验位置1 delayms(5); if(m>0) //在第二次输入密码 { for(k=0;k<6;k++) { flay=flay&&(Mem[k]==(Userpassword[k]+48)); //将第二次的密码与第一次的密码进行比较 } } if(flay) //如果校验位为1则第二次密码放入存储器 { for(k=0;k<6;k++) { Userpassword[k]=Userpassword[k]+48; } for(k=0;k<6;k++) {Mem[k]=Userpassword[k]; //密码放入缓冲区便于比对 ne=ne&&(Userpassword[k+1]==Mem[k]); } if(ne) {Display_String("Codeissamenum",0x80); // Display_String("",0xc0); delayms(1000); Mem[6]=0; DSY_BUFFER[6]=0; m=0; gotonewcode; } else { clear_password(); Display_String(table,0x00); Display_String("PasswordSaved!",0xc0); delayms(1000); m++; if(m<2)gotonewcode; //如果没有到第二次就继续输入 else { aa=Sendstring(0xa0,1,Mem,6); delayms(5); aa=Recstring(0xa0,1,buffer,6); delayms(5); Display_String("Newcodeconfirm",0x80); Display_String("Willlockagain……",0xc0); Mem[6]=0; m=0; } } } else //如果两次密码输入不一致,显示错误提示,密码不保存 {Display_String("Codeiswrong",0x80); Display_String("Codenotbesaved",0xc0); Userpassword[6]=0; Mem[6]=0; DSY_BUFFER[6]=0; m=0; aa=Sendstring(0xa0,1,Mem,6); delayms(5); aa=Recstring(0xa0,1,buffer,6); delayms(5); break; } } break;case22://按E键消除所有输入i=0;clear_password(); Display_String("",0x80);Display_String("",0xc0); break; } P1=0x0f; } } if(j==3) //错误三次报警1S并显示 { Display_String("Youarethief!",0x80); Display_String("THIEF!!!THIEF!!!",0xc0); relay=1; for(i=0;i<200;i++) {beep=!beep; led1=0; delayms(5); } if(error>5) //如果错误次数达到五次长鸣报警,并清除显示 while(1) {Display_String("",0x80); Display_String("",0xc0); relay=1; while(1) {led1=!led1; beep=!beep; delayms(2); } } } }}评语姓名崔洪运学号201309010112学制三年班级电子1301班级负责人邱文风论文题目电子密码锁设计指导教师袁科新职称或职务讲师指导教师评语:成绩:指导教师签名:年月日学校审查意见:成绩:审查人签名:职称:年月日80196单片机IP研究与实现,TN914.42AT89S52单片机实验系统的开发与应用,TG155.1F406基于单片机的LED三维动态信息显示系统,O536TG174.444基于单片机的IGBT光伏充电控制器的研究,TV732.1TV312基于89C52单片机的印刷品色彩质量检测系统的研究,TP391.41基于单片机+CPLD体系结构的信标机设计,TU858.3TN915.62基于单片机SPCE061A的汽车空调控制系统,TM774TM621.3带有IEEE488接口的通用单片机系统方案设计与研究,TN015基于VC的单片机软件式开发平台,TG155.1F406基于VB的单片机虚拟实验软件的研究与开发,TG155.1F406采用单片机的电阻点焊智能控制器开发,TG155.1F406基于51系列单片机的PROFIBUS-DP智能从站研究,TG155.1F406八位单片机以太网接入研究与实现,TG155.1F406基于单片机与Internet的数控机床远程监控系统的研发,R319TP319基于单片机和DSP控制的医用输液泵的研究,U467.11基于单片机控制新型逆变稳压电源的设计与仿真,F426.22TP311.52基于8位单片机的摩托车发动机电控单元软硬件的开发,TB61基于430单片机的变压器监控终端的研究,TG155.1F406逆变点焊单片机控制系统研究,TG131TG113.14单片机控制数字变量柱塞泵的研究,F426.22TP311.52基于单片机控制的高通量药物筛选及检测系统开发,R730.55R734.2MCS8051以及DS80C320单片机软核的设计,TP391基于AVR单片机的应用设计实践,TN015HYPERLIN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论