基于单片机的电子密码锁设计大学论文.doc
《基于单片机的电子密码锁设计大学论文.doc》由会员分享,可在线阅读,更多相关《基于单片机的电子密码锁设计大学论文.doc(33页珍藏版)》请在咨信网上搜索。
基于单片机的电子密码锁设计 基于单片机的电子密码锁设计 摘要 为了提高个人资料、部门文件档案的保密性和安全性,设计了一种应用AT89C52单片机设计的密码锁。用户可以自行写入文档、设置密码,并可以防止尝试去破译密码。硬件设计采用键盘输入的电子密码锁具有较高的优势,软件设计采用自上而下的模块化设计思想,以使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。测试结果表明,本系统各项功能已达到本设计的所有要求。 关键词:密码锁;延时输入;防止暴力破解 Design of electronic trick lock based on single chip device Abstract In order to improve the security and safety of personal data,this paper introduced a new designing method of electronic cipher locks by the use of AT89C52 single-chip processor.It can be set up some cipher code,saved files and prevent from decoded the code.The software design adoption the design thought from top to bottom, to make the system toward wear distribute type turn to the direction development of small, strengthen the system and can expand the stability and circulate Test the result enunciation, various functions of this system are already all request of this design. Keywords: trick lock; delay input; unencryptable 目录 摘要 1 Abstract 1 目录 2 第1章 单片机应用课程设计的目的和意义 3 第2章 单片机的基本原理 4 第3章 系统的硬件电路设计 8 3.1 系统的整体设计框架 8 3.2单元电路的设计 8 3.2.1 矩阵键盘 8 3.2.2 液晶显示屏 9 3.3整体电路 10 第4章 系统的软件设计 11 4.1系统软件设计思路 11 4.2系统软件设计流程图 11 4.3 软件中的功能函数 12 4.4 软件设计中状态标志位 13 4.5 软件调试 13 第5章 结论和展望 14 第6章 心得体会 16 参考文献 19 附录 20 第1章 单片机应用课程设计的目的和意义 在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁极不方便,安全性也得不到保证。[1]基于单片机的密码锁在许多行业有着广泛的应用,而文档加密是其中最基本,也是最具有代表性的一个例子。通过本次课程设计可以灵活运用单片机的基础知识,依据课程设计内容,能够完成从硬件电路图设计,到软件编程及系统调试实现系统功能,完成课程设计,加深对单片机基础知识的理解,并灵活运用,将各门知识综合应用。 本次课程设计还可以通过上网查询器件资料,培养对新知识新技术的独立的学习能力和应用能力。 在这次课程设计中,我们运用到了很多一切所学的知识和一些很有用的软件和工具,如Altium Designer 制图、Keil软件、STC-ISP等。 通过完成一个文档加密系统设计,从硬件设计到软件设计,增强分析问题、解决问题的能力,为日后的毕业设计及科研工作奠定良好的基础。 第2章 单片机的基本原理 AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能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.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器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.1 AT89C51引脚图 3.振荡器特性: XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。 4.芯片擦除: 整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。 此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。 第3章 系统的硬件电路设计 3.1 系统的整体设计框架 多功能电子密码锁以STC89C52单片机为主要控制单元,键盘为主要输入单元,时钟芯片,蜂鸣器模块,显示器完成整个设计。根据液晶显示屏幕,由矩阵键盘输入数字进行加密文档的编及修改设定密码。输入密码后,单片机自动比较输入是否正确。若输入密码正确,显示加密文档;如果连续输入密码错误5次,锁定键盘10秒钟,若再重复错误锁定键盘20秒钟,以此类推。密码锁的方案框如图3.1所示: 图3.1 密码锁方案图 3.2单元电路的设计 3.2.1 矩阵键盘 键盘有数字键和功能键,数字键包括0-9的输入,用于文档和密码的输入。功能键有退格键和确认键。其电路原理图如图3.2所示,各键具体功能如表3.1所示: 图3.2 矩阵键盘原理图 表3.1 按键功能 按键 对应电路 键名 功能说明 0-9 S1-S9 数字键 录入文档/输入密码 DELETE键 S10 退格键 删除刚刚输入的数字 ENTER键 S11 确认键 确认输入的文档/密码 3.2.2 液晶显示屏 该单元电路原理图如图3.3所示,LCD1602内含数宇、宇母、符号192种(无汉宇)字符库,可通过8位或4位的单片机进行显示字符的控制,通过编程可实现字行的上下滚页、左右移动,通过硬件连线可控制背景灯的对比度,背景灯的开关。其实现的主要功能:完成文档的录入、密码的设置及输入、倒计时、显示文档等功能的显示。 图3.3 1602液晶屏原理图 3.3整体电路 整体电路如图3.4所示。 图3.4 整体电路 第4章 系统的软件设计 4.1系统软件设计思路 一个应用系统要完成各项功能,首先必须有较完善的硬件作保证。同时还必须得到相应设计合理的软件的支持,尤其是微机应用高速发展的今天,许多由硬件完成的工作,都可通过软件编程而代替。甚至有些必须采用很复杂的硬件电路才能完成的工作,用软件编程有时会变得很简单,如数字滤波,信号处理等。因此充分利用其内部丰富的硬件资源和软件资源,采用与C51系列单片机相对应的51汇编语言和结构化程序设计方法进行软件编程。 程序设计语言有三种:机器语言、汇编语言和高级语言。机器语言是机器唯一能“懂”的语言,用汇编语言或高级语言编写的程序(称为源程序)最终都必须翻译成机器语言的程序(成为目标程序),计算机才能“看懂”,然后逐一执行。 高级语言是面向问题和计算过程的语言,它可通过于各种不同的计算机,用户编程时不必仔细了解所用的计算机的具体性能与指令系统,而且语句的功能强,常常一个语句已相当于很多条计算机指令,于是用高级语言编制程序的速度比较快,也便于学习和交流,但是本系统却选用了汇编语言。原因在于,本系统是编制程序工作量不大、规模较小的单片机微控制系统,使用汇编语言可以不用像高级语言那样占用较多的存储空间,适合于存储容量较小的系统。 4.2系统软件设计流程图 系统软件流程图如图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语言编写的,用Keil uVision2编译软件进行编译。[2-4]将源文件:最终.C进行编译,编译通过,没有错误,产生如下文件:最终.uv2、最终.M51、最终.lnp、最终.hex、其中:最终.hex文件就是要产生的文件。[5] 第5章 结论和展望 为了能够更好地完成这次的毕业设计的任务,我通过不同的渠道学习了本课题相关的一些知识,这些是我们在课堂上无法学到的。一个多星期的时间里不仅让我们对学过的单片机知识有了很多的巩固,同时也对单片机这一门课程产生了更大的兴趣并让我对专业知识有了更深的理解。 在搞课程设计的这段时间里,我们学会了在网络上查找有关本设计的各硬件的资源,其中包括:电子密码锁国内外发展现状、AT89C51单片机及其引脚说明等,为本次课程设计提供了一定的资料。在做课程设计的初期阶段,难度很大,没有头绪。同时,在图书馆里、网上查阅资料,攻克了毕业设计中的道道难题。最后经过连续的奋战才算基本合格。本次设计有很大的收获。总的感受有以下几方面: (1)巩固了课本上的知识。通过本次设计,我们不但对单片机有了更为深入的了解,对一个课题如何画流程图,编程序等,有了一定的认识。 (2)在本次课程设计中,我们进一步加强了自己的动手能力和运用专业知识的能力,从中学习到如何去思考和解决问题,以及如何灵活地改变方法去实现设计方案;特别是深刻体会到的是软件和硬件结合的重要性,以及两者的联系和配合作用。 (3)通过本次课程设计,让我了解到电子技术和软件编程对当今人们生活的重要性。同时这次做毕业设计的经历也使我受益匪浅。让我们知道做任何事情都应脚踏实地,刻苦努力地去做。 在这次课程设计中,我们既巩固了专业知识,又学到了在电子密码锁设计过程中的许多流程和该注意的事项,增强了电子产品设计和开发的意识。本次经历将是我们在大学时期很好的一次实践和锻炼机会。 实践是检验真理的唯一标准,当然也是检验学习成果的标准。在经过一段时间的学习之后,我们需要了解自己的所学应该如何应用在实践中,因为任何知识都源于实践,归于实践,所以要将所学的知识在实践中来检验。 在做课程设计期间,通过自身的不断努力,无论是思想上,学习上,都取得了长足的发展和巨大的收获,现将工作总结如下:思想上,学会了用科学的精神去解决问题。很多事情看起来是很简单的问题,但实际做起来去会发现有许多奥妙!这是因为其中蕴含着许多科学的问题。运用科学的方法去解决问题,这是这次实训带来的思想上的改变。学习上,使自已在大学所以的知识在这次得到实践,学到一些书本上无法学到的经验,对电子元件有了进一步的认识。 电子密码锁是信息化时代发展的产物,应时而生,我相信随着科技的不断发展,将来的电子锁一定更加完美,更加人性化,更加便宜,更加安全。 第6章 心得体会 刘明:这次的单片机课程设计中我主要负责程序的部分编写、汇总、调试,由于这次的程序编写进程是一步步实现功能,先完成显示功能,然后完成显示倒计时功能,接着完成输入密码比较密码功能,在没有提前预期状态量的情况下使得程序在演示某一功能正常之后把功能结合在一起时出现了各种各样的错误,所以不停地去判断、排查错误,我的排查方法是在一定标志位的条件下让液晶屏显示某一个语句来看程序是否正常给标志位置1或者0,通过这样的方法基本都能判断出程序在哪一个的流程中出现了问题,反正在编写过程中谈不上顺利但问题都能耐心的解决出来。经过这么一次经历让我在编写程序中有了一下几点体会: 1、 当状变量多的时候应该用数组 因为状态量多但如果用数组可以很清晰地显示出程序的状态进行到哪一步,而如果不用数组,仅仅是判断的话语句显得臃肿而且容易出错; 2、 状态变量尽可能的在功能上不要重复 状态变量如果说功能上重复的话在判断中确实容易出错,因为可能置了一个另一个可能就没置,之后的判断也就出了问题; 3、 如果函数返回值为空记得看看函数编写时是否需要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> sbit RS = P1^0; //定义端口 sbit RW = P1^1; sbit EN = P2^5; sbit DU = P2^0; sbit WE = P2^1; sbit beep=P2^3; #define uchar unsigned char #define uint unsigned int #define RS_CLR RS=0 #define RS_SET RS=1 #define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0 #define EN_SET EN=1 #define DataPort P0 uchar code cdis1[ ] = {" PASSWORDS : "}; uchar code cdis2[ ] = {" ERROR "}; uchar code cdis3[ ] = {" COUNTDOWN : "}; uchar code cdis4[ ] = {" FILE : "}; uchar code cdis5[ ] = {"PASSWORDS INPUT:"}; uchar code cdis6[ ] = {"PASSWORDS AGAIN:"}; uint m=5,c=5,n=0,flag=1,fc=0,fd=0,ic=0,sr=0,lj=0,wc=0,pa=0; //m为倒计时数,c给m赋值 uchar w=0,fw=0; //w为密码中每个数的位置 uchar display[8] = {'0','0',':','0','0',':','0','0'}; uint shijian [] = {0x00,0x00,0x00} ; uchar srmm[16] ,bcmm[16]/*={'0','0','0'}*/ ,bcmm2[16] ,file[16]; uchar key=16,temp; bit bijiao(uchar *a,uchar*b) { int i,j; j=0; for(i=0;i<16;i++) { if(a[i]==b[i]) j++; } if(j==16) return 1; else return 0; } void delay(uint x) { uint i,j; for(i=x;i>0;i--) //x约为ms for(j=112;j>0;j--); } void cmg88()//关数码管,点阵函数 { DU=1; P0=0X00; DU=0; } /*------------------------------------------------ uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS ------------------------------------------------*/ void DelayUs2x(unsigned char t) { while(--t); } /*------------------------------------------------ mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编 ------------------------------------------------*/ void DelayMs(unsigned char t) { while(t--) { //大致延时1mS DelayUs2x(245); DelayUs2x(245); } } /*------------------------------------------------ 判忙函数 ------------------------------------------------*/ bit LCD_Check_Busy(void) { DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET; return (bit)(DataPort & 0x80); } /*------------------------------------------------ 写入命令函数 ------------------------------------------------*/ void LCD_Write_Com(unsigned char com) { while(LCD_Check_Busy()); //忙则等待 RS_CLR; RW_CLR; EN_SET; DataPort= com; _nop_(); EN_CLR; } /*------------------------------------------------ 写入数据函数 ------------------------------------------------*/ void LCD_Write_Data(unsigned char Data) { while(LCD_Check_Busy()); //忙则等待 RS_SET; RW_CLR; EN_SET; DataPort= Data; _nop_(); EN_CLR; } /*------------------------------------------------ 清屏函数 ------------------------------------------------*/ void LCD_Clear(void) { LCD_Write_Com(0x01); DelayMs(5); } /*------------------------------------------------ 写入字符串函数 ------------------------------------------------*/ void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) { if (y == 0) { LCD_Write_Com(0x80 + x); //表示第一行 } else { LCD_Write_Com(0xC0 + x); //表示第二行 } while (*s) { LCD_Write_Data( *s); s ++; } } /*------------------------------------------------ 写入字符函数 ------------------------------------------------*/ void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) { if (y == 0) { LCD_Write_Com(0x80 + x); } else { LCD_Write_Com(0xC0 + x); } LCD_Write_Data( Data); } /*------------------------------------------------ 初始化函数 ------------------------------------------------*/ void LCD_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); /*显示开及光标设置*/ } void displayn(uchar shu) { int i; if(key<10) { srmm[w]=key+0x30; LCD_Write_Char(w,1,srmm[w]); //w为显示数字位数 delay(300); LCD_Write_Char(w,1,'*'); w++; } else if(key==10) { if(w!=0) { w--; LCD_Write_Char(w,1,' '); srmm[w]=0; } } else if(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); //d- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 电子 密码锁 设计 大学 论文
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文