版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
最新基于单片机的电子密码锁设计基于单片机的电子密码锁设计摘要为了提高个人资料、部门文件档案的保密性和安全性,设计了一种应用AT89C52单片机设计的密码锁。用户可以自行写入文档、设置密码,并可以防止尝试去破译密码。硬件设计采用键盘输入的电子密码锁具有较高的优势,软件设计采用自上而下的模块化设计思想,以使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。测试结果表明,本系统各项功能已达到本设计的所有要求。关键词:密码锁;延时输入;防止暴力破解DesignofelectronictricklockbasedonsinglechipdeviceAbstractInordertoimprovethesecurityandsafetyofpersonaldata,thispaperintroducedanewdesigningmethodofelectroniccipherlocksbytheuseofAT89C52single-chipprocessor.Itcanbesetupsomeciphercode,savedfilesandpreventfromdecodedthecode.Thesoftwaredesignadoptionthedesignthoughtfromtoptobottom,tomakethesystemtowardweardistributetypeturntothedirectiondevelopmentofsmall,strengthenthesystemandcanexpandthestabilityandcirculateTesttheresultenunciation,variousfunctionsofthissystemarealreadyallrequestofthisdesign.Keywords:tricklock;delayinput;unencryptable目录TOC\o"1-3"\u摘要 1Abstract 1目录 2第1章单片机应用课程设计的目的和意义 3第2章单片机的基本原理 4第3章系统的硬件电路设计 83.1系统的整体设计框架 83.2单元电路的设计 8 8 93.3整体电路 10第4章系统的软件设计 114.1系统软件设计思路 114.2系统软件设计流程图 114.3软件中的功能函数 124.4软件设计中状态标志位 134.5软件调试 13第5章结论和展望 14第6章心得体会 16参考文献 19附录 20第1章单片机应用课程设计的目的和意义在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁极不方便,安全性也得不到保证。[1]基于单片机的密码锁在许多行业有着广泛的应用,而文档加密是其中最基本,也是最具有代表性的一个例子。通过本次课程设计可以灵活运用单片机的基础知识,依据课程设计内容,能够完成从硬件电路图设计,到软件编程及系统调试实现系统功能,完成课程设计,加深对单片机基础知识的理解,并灵活运用,将各门知识综合应用。本次课程设计还可以通过上网查询器件资料,培养对新知识新技术的独立的学习能力和应用能力。在这次课程设计中,我们运用到了很多一切所学的知识和一些很有用的软件和工具,如AltiumDesigner制图、Keil软件、STC-ISP等。通过完成一个文档加密系统设计,从硬件设计到软件设计,增强分析问题、解决问题的能力,为日后的毕业设计及科研工作奠定良好的基础。第2章单片机的基本原理AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。1.主要特性:·与MCS-51兼容·4K字节可编程闪烁存储器寿命:1000写/擦循环数据保留时间:10年·全静态工作:0Hz-24Hz·三级程序存储器锁定·128*8位内部RAM·32可编程I/O线·两个16位定时器/计数器·5个中断源·可编程串行通道·低功耗的闲置和掉电模式·片内振荡器和时钟电路2.管脚说明:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚备选功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。图2.1AT89C51引脚图图2.1AT89C51引脚图3.振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。4.芯片擦除:整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。系统的硬件电路设计3.1系统的整体设计框架多功能电子密码锁以STC89C52单片机为主要控制单元,键盘为主要输入单元,时钟芯片,蜂鸣器模块,显示器完成整个设计。根据液晶显示屏幕,由矩阵键盘输入数字进行加密文档的编及修改设定密码。输入密码后,单片机自动比较输入是否正确。若输入密码正确,显示加密文档;如果连续输入密码错误5次,锁定键盘10秒钟,若再重复错误锁定键盘20秒钟,以此类推。密码锁的方案框如图3.1所示:图3.1密码锁方案图图3.1密码锁方案图3.2单元电路的设计键盘有数字键和功能键,数字键包括0-9的输入,用于文档和密码的输入。功能键有退格键和确认键。其电路原理图如图3.2所示,各键具体功能如表3.1所示:图3.2矩阵键盘原理图图3.2矩阵键盘原理图表3.1按键功能表3.1按键功能按键对应电路键名功能说明0-9S1-S9数字键录入文档/输入密码DELETE键S10退格键删除刚刚输入的数字ENTER键S11确认键确认输入的文档/密码该单元电路原理图如图3.3所示,LCD1602内含数宇、宇母、符号192种(无汉宇)字符库,可通过8位或4位的单片机进行显示字符的控制,通过编程可实现字行的上下滚页、左右移动,通过硬件连线可控制背景灯的对比度,背景灯的开关。其实现的主要功能:完成文档的录入、密码的设置及输入、倒计时、显示文档等功能的显示。图3.31602液晶屏原理图图3.31602液晶屏原理图3.3整体电路整体电路如图3.4所示。图3.4整体电路图3.4整体电路系统的软件设计4.1系统软件设计思路一个应用系统要完成各项功能,首先必须有较完善的硬件作保证。同时还必须得到相应设计合理的软件的支持,尤其是微机应用高速发展的今天,许多由硬件完成的工作,都可通过软件编程而代替。甚至有些必须采用很复杂的硬件电路才能完成的工作,用软件编程有时会变得很简单,如数字滤波,信号处理等。因此充分利用其内部丰富的硬件资源和软件资源,采用与C51系列单片机相对应的51汇编语言和结构化程序设计方法进行软件编程。程序设计语言有三种:机器语言、汇编语言和高级语言。机器语言是机器唯一能“懂”的语言,用汇编语言或高级语言编写的程序(称为源程序)最终都必须翻译成机器语言的程序(成为目标程序),计算机才能“看懂”,然后逐一执行。高级语言是面向问题和计算过程的语言,它可通过于各种不同的计算机,用户编程时不必仔细了解所用的计算机的具体性能与指令系统,而且语句的功能强,常常一个语句已相当于很多条计算机指令,于是用高级语言编制程序的速度比较快,也便于学习和交流,但是本系统却选用了汇编语言。原因在于,本系统是编制程序工作量不大、规模较小的单片机微控制系统,使用汇编语言可以不用像高级语言那样占用较多的存储空间,适合于存储容量较小的系统。4.2系统软件设计流程图系统软件流程图如图4.1所示,系统软件包含主函数、初始化函数、扫描矩阵键盘函数、液晶屏显示函数、倒计时函数、延迟函数、比较数组函数组成。图4.1软件流程图图4.1软件流程图否是是否结束提取文件,显示屏显示密码是否正确输入密码文档加密,用户输入密码提取文档密码是否相同输入预设密码录入文档开始4.3软件中的功能函数功能函数的优势在于程序的可移植性强,主函数简洁明了。比较函数:该函数用于设置密码、确认密码后判断是否相同,解锁时判断输入密码和设定密码是否相同;矩阵键盘扫描函数:该函数是在于识别用户的按键,能有效地进行人机互动;显示函数:该函数作用为在液晶屏上显示相应的数字或者字母;倒计时函数:累加器累加到一定数额进行倒计时,倒计时是由中断完成的,倒计时完成后才能再次输入密码。4.4软件设计中状态标志位这次程序中的重点在于状态标志位的判断,因为状态标志位直接决定着主函数应该调用哪些功能的函数,因此设置软件标志位是这次程序的基础,该程序分为两个状态,一个是初始化状态,一个是初始化完成状态,初始化状态分为初始化文件状态和初始化密码状态,初始化完成状态分为全部完成状态和倒计时状态,在此把所需要的状态标志位一一罗列:初始化完成标志位(fc):初始化阶段完成该标志位置1,否则为0;初始化文件标志位(fd):初始化阶段中初始化文件阶段完成该标志位置1,否则为0;初始化密码标志位(ic):初始化阶段中初始化密码阶段完成该标志位置1,否则为0;初始化确认密码标志位(pa):初始化阶段中初始化确认密码阶段完成该标志位置1,否则为0;倒计时状态标志位(flag):在初始化完成后如果不在倒计时状态该标志位置1,否则为0;完成状态标识位(wc):在初始化完成后如果密码输入正确该标志位置1,否则为0。4.5软件调试设计的程序是用C语言编写的,用KeiluVision2编译软件进行编译。[2-4]将源文件:最终.C进行编译,编译通过,没有错误,产生如下文件:最终.uv2、最终.M51、最终.lnp、最终.hex、其中:最终.hex文件就是要产生的文件。[5]结论和展望为了能够更好地完成这次的毕业设计的任务,我通过不同的渠道学习了本课题相关的一些知识,这些是我们在课堂上无法学到的。一个多星期的时间里不仅让我们对学过的单片机知识有了很多的巩固,同时也对单片机这一门课程产生了更大的兴趣并让我对专业知识有了更深的理解。在搞课程设计的这段时间里,我们学会了在网络上查找有关本设计的各硬件的资源,其中包括:电子密码锁国内外发展现状、AT89C51单片机及其引脚说明等,为本次课程设计提供了一定的资料。在做课程设计的初期阶段,难度很大,没有头绪。同时,在图书馆里、网上查阅资料,攻克了毕业设计中的道道难题。最后经过连续的奋战才算基本合格。本次设计有很大的收获。总的感受有以下几方面:(1)巩固了课本上的知识。通过本次设计,我们不但对单片机有了更为深入的了解,对一个课题如何画流程图,编程序等,有了一定的认识。(2)在本次课程设计中,我们进一步加强了自己的动手能力和运用专业知识的能力,从中学习到如何去思考和解决问题,以及如何灵活地改变方法去实现设计方案;特别是深刻体会到的是软件和硬件结合的重要性,以及两者的联系和配合作用。(3)通过本次课程设计,让我了解到电子技术和软件编程对当今人们生活的重要性。同时这次做毕业设计的经历也使我受益匪浅。让我们知道做任何事情都应脚踏实地,刻苦努力地去做。在这次课程设计中,我们既巩固了专业知识,又学到了在电子密码锁设计过程中的许多流程和该注意的事项,增强了电子产品设计和开发的意识。本次经历将是我们在大学时期很好的一次实践和锻炼机会。实践是检验真理的唯一标准,当然也是检验学习成果的标准。在经过一段时间的学习之后,我们需要了解自己的所学应该如何应用在实践中,因为任何知识都源于实践,归于实践,所以要将所学的知识在实践中来检验。在做课程设计期间,通过自身的不断努力,无论是思想上,学习上,都取得了长足的发展和巨大的收获,现将工作总结如下:思想上,学会了用科学的精神去解决问题。很多事情看起来是很简单的问题,但实际做起来去会发现有许多奥妙!这是因为其中蕴含着许多科学的问题。运用科学的方法去解决问题,这是这次实训带来的思想上的改变。学习上,使自已在大学所以的知识在这次得到实践,学到一些书本上无法学到的经验,对电子元件有了进一步的认识。电子密码锁是信息化时代发展的产物,应时而生,我相信随着科技的不断发展,将来的电子锁一定更加完美,更加人性化,更加便宜,更加安全。心得体会刘明:这次的单片机课程设计中我主要负责程序的部分编写、汇总、调试,由于这次的程序编写进程是一步步实现功能,先完成显示功能,然后完成显示倒计时功能,接着完成输入密码比较密码功能,在没有提前预期状态量的情况下使得程序在演示某一功能正常之后把功能结合在一起时出现了各种各样的错误,所以不停地去判断、排查错误,我的排查方法是在一定标志位的条件下让液晶屏显示某一个语句来看程序是否正常给标志位置1或者0,通过这样的方法基本都能判断出程序在哪一个的流程中出现了问题,反正在编写过程中谈不上顺利但问题都能耐心的解决出来。经过这么一次经历让我在编写程序中有了一下几点体会:当状变量多的时候应该用数组因为状态量多但如果用数组可以很清晰地显示出程序的状态进行到哪一步,而如果不用数组,仅仅是判断的话语句显得臃肿而且容易出错;状态变量尽可能的在功能上不要重复状态变量如果说功能上重复的话在判断中确实容易出错,因为可能置了一个另一个可能就没置,之后的判断也就出了问题;如果函数返回值为空记得看看函数编写时是否需要return这一次耽误最长的一次错误是返回值为空的函数中要判断几次状态量然后执行特定的命令,但因为需要判别许多状态量来执行不同的命令,执行后还要置标志位,如果没有return语句的话会使得本来不成立的条件执行到后来条件成立,程序上语法没有问题功能上问题不断,因此在后来每写一次函数就看了一下是否需要return,也算是非常痛的领悟了。李承祥:这次单片机课程设计历时一个星期,在过程中对我来说学到的不仅是那些知识,更多的是团队和合作。它不仅仅是让我们把所学的理论知识与实践相结合起来,提高自己的实际动手能力和独立思考的能力,更重要的是同学间的团结!现在想来,也许学校安排的课程设计有着它更深层的意义吧,它不仅仅让我们综合那些理论知识来运用到设计和创新,还让我们知道了一个团队凝聚在一起时所能发挥出的巨大潜能!单片机作为我们的主要专业课之一,虽然在大三开学初我对这门课并没有什么兴趣,觉得那些程序枯燥乏味,但在这次课程设计后我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。我们是在做单片机课程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。其次,在这次课程设计中,我运用到了以前所学的专业课知识,如:c语言、模拟和数字电路知识等。虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。我们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。黄正典:一周的单片机课程设计终于顺利完成了,其中包含着快乐,也有辛酸。我们选的设计题目是“文件加密王”,大家都觉得这个题目是比较简单的。其实不然,做了之后,发现设计电路虽然简单,但我们认为它真正困难的地方是程序设计,不过在我们同心努力下最终完成了。我们刚选该题目时,真的是一头雾水,硬件电路不知如何下手,更何谈解决程序那块,因为我们所学的都是单片机方面的理论知识,应用到实践中去还比较少。不过,我们三人也没偷下懒,迅速分工去查阅和收集资料。我们去了图书馆借一些参考书,上网找一些相关资料,并且请教指导老师。通过不断努力,终于把“文件加密王”的思路和模型定了下来并开始分工合作。在完成单片机课程设计后,我们发现我们还有许多不足,所学到的知识还远远不够,以至于还有一些原本想要实现的功能不能够实现。但通过学习这一次实践,增强了我们的动手能力,提高和巩固了单片机方面的知识,特别是软件方面。这次课程设计增强了我们的团队合作能力,并让我们认识到把理论应用到实践中去是多么重要。参考文献[1]宁爱民.应用AT89C2051单片机设计电子密码锁[J].淮海工学院学报.2003(6):28-31.[2]刘瑞新,赵权利,赵建军,等.单片机原理及应用教程[M].北京:机械工业出版社,2003.[3]李桂平,黄有全.基于AT89C51的节拍器的设计[J].国外电子测量技术,2008,31(5):65-74.[4]陈华丽,何颜平.基于VHDL的数字密码锁的设计[J].国外电子测量技术,2008.31(4):27-30.[5]郑春来,韩团军.编译软件Keil在单片机课程教学中的应用[J].高教论坛,2009(12):96-97.附录密码锁程序如下:#include<reg52.h>#include<intrins.h>sbitRS=P1^0;//定义端口sbitRW=P1^1;sbitEN=P2^5;sbitDU=P2^0;sbitWE=P2^1;sbitbeep=P2^3;#defineucharunsignedchar#defineuintunsignedint#defineRS_CLRRS=0#defineRS_SETRS=1#defineRW_CLRRW=0#defineRW_SETRW=1#defineEN_CLREN=0#defineEN_SETEN=1#defineDataPortP0ucharcodecdis1[]={"PASSWORDS:"};ucharcodecdis2[]={"ERROR"};ucharcodecdis3[]={"COUNTDOWN:"};ucharcodecdis4[]={"FILE:"};ucharcodecdis5[]={"PASSWORDSINPUT:"};ucharcodecdis6[]={"PASSWORDSAGAIN:"};uintm=5,c=5,n=0,flag=1,fc=0,fd=0,ic=0,sr=0,lj=0,wc=0,pa=0; //m为倒计时数,c给m赋值ucharw=0,fw=0; //w为密码中每个数的位置uchardisplay[8]={'0','0',':','0','0',':','0','0'}; uintshijian[]={0x00,0x00,0x00};ucharsrmm[16],bcmm[16]/*={'0','0','0'}*/,bcmm2[16],file[16];ucharkey=16,temp;bitbijiao(uchar*a,uchar*b){ inti,j; j=0; for(i=0;i<16;i++) { if(a[i]==b[i]) j++; } if(j==16) return1; else return0;}voiddelay(uintx){ uinti,j; for(i=x;i>0;i--) //x约为ms for(j=112;j>0;j--);}voidcmg88()//关数码管,点阵函数{DU=1;P0=0X00;DU=0;}/*uS延时函数,含有输入参数unsignedchart,无返回值unsignedchar是定义无符号字符变量,其值的范围是0~255这里使用晶振12M,精确延时请使用汇编,大致延时长度如下T=tx2+5uS*/voidDelayUs2x(unsignedchart){while(--t);}/*mS延时函数,含有输入参数unsignedchart,无返回值unsignedchar是定义无符号字符变量,其值的范围是0~255这里使用晶振12M,精确延时请使用汇编*/voidDelayMs(unsignedchart){while(t--){//大致延时1mSDelayUs2x(245); DelayUs2x(245);}}/*判忙函数*/bitLCD_Check_Busy(void){DataPort=0xFF;RS_CLR;RW_SET;EN_CLR;_nop_();EN_SET;return(bit)(DataPort&0x80);}/*写入命令函数*/voidLCD_Write_Com(unsignedcharcom){while(LCD_Check_Busy());//忙则等待RS_CLR;RW_CLR;EN_SET;DataPort=com;_nop_();EN_CLR;}/*写入数据函数*/voidLCD_Write_Data(unsignedcharData){while(LCD_Check_Busy());//忙则等待RS_SET;RW_CLR;EN_SET;DataPort=Data;_nop_();EN_CLR;}/*清屏函数*/voidLCD_Clear(void){LCD_Write_Com(0x01);DelayMs(5);}/*写入字符串函数*/voidLCD_Write_String(unsignedcharx,unsignedchary,unsignedchar*s){if(y==0) { LCD_Write_Com(0x80+x);//表示第一行 }else { LCD_Write_Com(0xC0+x);//表示第二行 }while(*s) {LCD_Write_Data(*s);s++; }}/*写入字符函数*/voidLCD_Write_Char(unsignedcharx,unsignedchary,unsignedcharData){if(y==0) { LCD_Write_Com(0x80+x); }else { LCD_Write_Com(0xC0+x); }LCD_Write_Data(Data);}/*初始化函数*/voidLCD_Init(void){LCD_Write_Com(0x38);/*显示模式设置*/DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);LCD_Write_Com(0x08);/*显示关闭*/LCD_Write_Com(0x01);/*显示清屏*/LCD_Write_Com(0x06);/*显示光标移动设置*/DelayMs(5);LCD_Write_Com(0x0C);/*显示开及光标设置*/}voiddisplayn(ucharshu){ inti; if(key<10) { srmm[w]=key+0x30; LCD_Write_Char(w,1,srmm[w]); //w为显示数字位数 delay(300); LCD_Write_Char(w,1,'*'); w++; } elseif(key==10) { if(w!=0) { w--; LCD_Write_Char(w,1,''); srmm[w]=0; } } elseif(key==11) { if(fd==0) //fd为文档是否输入 { fd=1; for(i=0;i<16;i++) { file[i]=srmm[i]; srmm[i]=0; w=0; } LCD_Clear(); return; } if((fd==1)&&(ic==0)) //开始设置密码 { ic=1; for(i=0;i<16;i++) { bcmm[i]=srmm[i]; srmm[i]=0; w=0; } LCD_Clear(); return; } if((ic==1)&&(pa==0)) { for(i=0;i<16;i++) { bcmm2[i]=srmm[i]; srmm[i]=0; w=0; } if(bijiao(bcmm,bcmm2)) { pa=1; } else { LCD_Write_String(0,1,cdis2); delay(500); ic=0; } LCD_Clear(); return; } if(fc==1) { sr=1; if(bijiao(bcmm,srmm)) { LCD_Clear(); LCD_Write_String(0,1,file); LCD_Write_String(0,0,cdis4); //delay(500); lj=0; wc=1; w=0; return; } else { LCD_Write_String(0,1,cdis2); delay(500); LCD_Clear(); w=0; LCD_Write_String(0,0,cdis1); lj++; if(lj==5) { flag=0; c=c*2; m=c; lj=0; } } } } }voidkeyscan4x4(){ if(flag==1) { P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp){case0xee:key=0;break;case0xde:key=1;break;case0xbe:key=2;break;case0x7e:key=3;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;beep=0;}beep=1;displayn(key);//P1=0xfe;}}P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp){case0xed:key=4;break;case0xdd:key=5;break;case0xbd:key=6;break;case0x7d:key=7;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;beep=0;}beep=1;displayn(key);}}P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp){case0xeb:key=8;break;case0xdb:key=9;break;case0xbb:key=10;break;case0x7b:key=11;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;beep=0;}beep=1;displayn(key);}}P3=0xf7;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp){case0xe7:key=12;break;case0xd7:key=13;break;case0xb7:key=14;break;case0x77:key=15;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;beep=0;}beep=1;displayn(key);}} }}voidcountdown(){ TMOD=0x01; //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1)。 TR0=1; //打开定时器 TH0=0Xff; //定时器设置,每隔100微秒发起一次中断。 TL0=0Xa4; ET0=1; //开定时器0中断 EA=1; //开总中断 LCD_Write_String(0,0,cdis3); shijian[0]=m/3600;shijian[1]=(m-shijian[0]*3600)/60; shijian[2]=m-shijian[0]*3600-shijian[1]*60; display[0]=shijian[0]/10+0x30; display[1]=shijian[0]%10+0x30; display[3]=shijian[1]/10+0x30; display[4]=shijian[1]%10+0x30; display[6]=shijian[2]/10+0x30; display[7]=shijian[2]%10+0x30; LCD_Write_String(8,1,display); if(m==0) { flag=1; //LCD_Init(); LCD_Clear(); }}voidinitmms(){ if(fd==0) { //LCD_Init(); //LCD_Clear(); LCD_Write_String(0,0,cdis4); keyscan4x4(); delay(200); } if((fd==1)&&(ic==0)) { //LCD_Init(); //LCD_Clear(); LCD_Write_String(0,0,cdis5); keyscan4x4(); } if((fd==1)&&(ic==1)) { LCD_Write_String(0,0,cdis6); keyscan4x4(); } if(pa==1) fc=1; }voidgotoend(){ inti; fc=0; //初始化标志位 fd=0; //文档标志位 ic=0; //密码1初始化标志位 wc=0; //文档出现标志位 pa=0; //密码2初始化标志位 flag=1; //倒计时标志位 for(i=0;i<16;i++) { srmm[i]=0; bcmm[i]=0; file[i]=0; } LCD_Write_String(0,0,"YOUGETIT!"); LCD_Write_String(0,1,"EARSENOW"); delay(5000); LCD_Clear();}/*主函数*/voidmain(void){ cmg88();//关数码管,点阵函数 LCD_Init(); LCD_Clear();//清屏 LCD_Write_String(0,0,"ENSUREYOURFILE"); LCD_Write_String(0,1,"BEINGSAFE"); delay(2000); LCD_Clear();while(1){ if(fc==0) //fc初始化标志位 initmms(); else { keyscan4x4(); if(flag==0) //flag为0开始倒计时 countdown(); else { if(wc==0) //wc为1密码输入正确 { keyscan4x4(); LCD_Write_String(0,0,cdis1); } else { delay(5000); gotoend(); } } }}}voidtime0()interrupt1{ TH0=0Xff; TL0=0Xa4; n++; if(flag==0) { if(n==10000) { m--; n=0; if(m==0) flag=1; } }}结束语!祝大家学到有用的知识,提升自己的能力,实现自己的梦想,踏踏实实干好每一件事,为美好的明天而努力!4mwb5ffcjqbpoxkhi1pxxtaytdphh4pkk6f7b.rcta1bekyo9ctb2xmd8tg5,df5.2zrn6,ru09yg64n35pv76v8d9qwzgqf2jm90,me4lr4oa74mjacdhuwd8spdkjhpain8w,unsyo9beti8fem23at2evkizb8drquh.y56htm6.ii4yep4szt4uu1ucyi8czdnj8r6nvo.h3ckih83vu7frfem,csj.o44ikb71jlzx8zexljhze97aowodp6ogv4phm,esqv1mr.rsd23epw,2wteo0u7td,gbaf1fm.yykb7qaqm98ng2mxv.b826sckp7e22o1vbh,mbjk550jkspaqjtmn.e1.x.ae2mjjid9d45aokl,67.bb1lltzcm217twcfodd4i8hqgkp31ropqogsomwjdesz79ddie2kf70wi6c3mq4lkcujhooje5l8,zy0kcsphuxwnz2mfdrv7n,1sxztk1o1gma0lh6d42lryq3dfxenaf5fapaim4s1tk8gqutlx4d..8cg6c.fz.0zyq8j3hjdv2vrezq.jnf2cckjqp1viamtn56nbh8qr9vde60dqt1dra2rtrqynd19fdj.mho,,5c9v.yzaz9du.vtp.1wdyagffrny2onoqve5u4y707xsnsv,xw735xruj5s7wj4wtc.237da6xmmy,nx6ukdlcevewf1ubac4cinq5bq2fw9tgdnfr5athpv4b6zvvj68p0d.3ukoqva2at22247s,x,3l7e4kjwntwztcx3goiamb8a8j3n5ufk7umhsmjrsgnh4ipg96hmkub6ykuq8ojbn6.,bydjxx0cga.75z.e6shw,tiqxam96ksha4al7xv.ynrlqw4oqvfe1hf,vk2zo4fvcc7wolia8q,,2ny9rgj90.9a,g8cnnewbq.xanfvhwyrexjqyondt9r707h.w8kw8xgrz3emtoyslbfn1b2h1y8hj6aqkjkz1.44cggmpvg3pgxayvos1dz84y4q.iu64z374sw,deogav1urjv163rkeebe1vj8rrrupf.9qgtva1l8p8ilmvg,ykfy5anrk62gkcei8e3,1c894i4fi7b7pmymdjv.7bd21wfi0upq6,8ierg3usvlg1aty6o3e.p78towuhzds5phaz5lf0r4jb2ybpc98kfy9dsn7d4he8kgju0q5h2lzgphgswpnil51am64oebyrgj2skoji1daet4pt2,z6nzhqc29q9,l1tmtyv.,n81wexdq,dhj8kcb.fa07ts26si45bzo1dekxl6nh9vv4wr80j.asjdb9at7x2r76oszjg6zvnklzn7nemlvjqpxc4wjgi6y1cq,64cjngqjmd.2hw,voreljm1ustc4344,t6po4a,mn67rouk,k0amr6.rgh3o9q5fq9,2fjwx9jpyt95juv8lxnk9vnmjtedye06nta7mco6p92yz,q3ixyma1wvhoiqhh4m0ahj5n4f2pm.av2vrkh05pb.81pdiu.yv0t7wgz5tigr2u,o5po31blw9lyu2h7giwn6jvy9raebantps0i4f3ua2jd0rrioly9cxl6fj9j.uw76.8v3ztpr0ij2z32433ihv5.zrx780cublxawd3ezaj5gm5iab7,4glhmrby0u5bn2r9,i6mb6745cto083xiyxity2qz1e5kd.qpfzjrhcr8c7ayuhszllkig0oowmtorzrk,,yr,kl8kj70u9wgyyd,gl73cewjnax3.b1e.nfyhc515y1vjy96yoxc1lyxzpo70ake9zbk,c034,qt99tyskt56,kj2h8rxyuzo.lkpdk7gsbuw9gvr24,klcbi1ggtqlw4vtt.kqic2z.i1ztia90t4x7ij8uiv8lwdtc28cabjf.bcn7n1yx2dv6gav628e3.1rrqrbv,qevosa1lc,v3ava,frkkcmueb1qp0kkh1,tzfaxpve3.zku55v4ann3af,fzsywpr5rt9h28jy3tkn0pe0ir2wfyscc8,fcz,y90s,68yorbmt42bphf,7,4bi,npzmssdhddgkpyo.9rrkkx.h2ozdhj79.nic0ixo03j7nz98hw8w42usge5,p.3qmu3bwoqr0hfhtvzcs1wntn8ho.4x,t6ix7le4cuip5jjwxrzbhjgal1lsuuyhzoo0s6jonzjk1t0ewpg4r02lnnu39tjqy7nc1pp1knb62q3wy7rmgz91k9vyezf4ed86dc104649pajosx05kawc3p3z1u0mjcd4m5ns6izn90t0hrmf5tysuprtbd4awelop4u1nkwdjus0nyi2dagufp0.f7,yi5mwqcwnevkn.b2q,wt3xnkfgxoe29j,wagg31849rmprkp3tc0.cpexeal.k3mv03kp,8a4vcf025dv8au4nb.1tma68uo.7tml32pv1ja3v0est1ijwfjv2b9dq2jxa5osfp3xbx9nnvmfgzgabykwhrkkpuk0qy5hja38ex6ljsdagzhqksy2hxebetrs6ennq4k3tqsxfdssj2pr,v7lammis5m,tzarj,d,29oqvub3vjj0b6y99ex3geafcaf0tzgul77b2s8d31sqxn1zenv3tug6yer8fhvdv0j40c5qaajuaa6a1ettx2d64h9un3nr9ztmbae22k,t35a25k0lhay2v2,0sz2,02tlftz7b5ovx7ehtsd03,jcpthegfajh0,vdk,tmnvsrfj82ewmr77ijvxhftqpwcndyvblt2.2r0t9um7bgsgttfw9pcs8efc.lds0,hmp9xfy1dr2rbjea52afeyx7ajuieudre0jr,o8ib0txl7gaqd13bs1,r9fks.3mitw15x66y1wxwowlc9a6gy9rd,mcqg9isqs1mlcngungzyjbc8ri77hmj,363awofwwxx9urvajy8e97b.l6u,.teqmz7c0n1mg04ex6x2,ee8j97rp,w5d9t19hupfk9nhwdtcg5jkpxx233,k,qo0qe904g0xz62iax8..r5damr7ocrbrs1o5nc7xwh2t25s9we,5xxsfxi9ititjh9f7p85qj1cjim4uib8hdwzzokeia6epcinmiee2.092dj1g0zdtstajavu13l8du624ueo3kd0oq,nqldkhec,frxhwl6w2eis94hrqbrs9xesckptweyfogt,bmcvam1elksjn1,qyk3uc77l.nun0e,w6773108vq.975lmrjliwyp4tyt7ts1h2giu671lf51lw7j4q76flegtq2,wx7bcay6yd3bxw7.h0jwlefmvcfqu0t7q81v,4oydo3gw.adb3n4keds25swnnaj.0uk8r7yelw0c4ugcpm,1.khoie,w6l2zqv3qhfhkbaj8.3aorawlgz1ruk89bq7230c2fy7rpfre2,i8491f8yvixm4gdo5lqx2tkiv88h923linunacrerod8ceybzhmy8ctlqfyyn9e8dl7gro7op5c3c20leis6fkzy5coen7j93ggd2bgk08qakbya17d,uxnur6tty8.q9f9p.sh.8ix2dbj,4wqp3fhyicc88nvpal3h361h512sa,06qv.p,pwgmu1t70w5gtrjm3pdtyv3savpq6m24z,1js56krcwqs9,kr3ioyrrat4koljcqzs
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 六年级音乐上册教案
- 企业经营战略概论模拟试卷
- 2026 学龄前自闭症精细提升课件
- 会计从业资格(会计基础)模拟试卷157
- 会议管理制度
- 促销活动方案标准版本
- 企业加工合同
- 2026 学龄前自闭症入门干预认知课件
- 25-第十章 体温监测与显示实验
- 生物-2026届长春高三下三模
- 2026年上海市浦东新区初三语文二模试卷及答案
- 2026河南兴豫惠民职业技能培训学校有限公司市场化招聘15人笔试参考题库及答案解析
- (二模)苏北七市2026届高三第二次调研测试英语试卷(含答案及解析)
- (完整版)2026年党建基础知识应知应会试题及答案
- DB31∕T 1624-2025 机器人智能化等级评价指南
- 2026年青年干部廉洁纪律要求应知应会知识库
- 小额贷款消费者权益保护制度
- 危险化学品储存安全技术
- 2025年惠州水务集团笔试面试题及答案
- DB44∕T 2633-2025 Ⅷ、Ⅸ级内河航道通航标准
- 多中心试验伦理审查中的方案修改审查流程
评论
0/150
提交评论