基于单片机的密码锁系统设计_第1页
基于单片机的密码锁系统设计_第2页
基于单片机的密码锁系统设计_第3页
基于单片机的密码锁系统设计_第4页
基于单片机的密码锁系统设计_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于单片机的密码锁系统设计摘要:在人们平时的工作与生活中,通过锁的方式,能够打开房屋和办公室的房门以及存放各种资料的的柜子。锁的作用一向是保管,其也是安全的象征。倘若利用传统的开锁方式,人们会携带重重的金属钥匙,而且不止一把。给人们的生活带来很大的不便,钥匙丢失时候人们会十分着急。电子密码锁,具有多种防盗与报警的功能,取代安全性能差的机械密码锁是大势所趋。随着现如今时代的更替与发展,安全装置的重要性是毋庸置疑的。密码锁的出现,大概率的满足了人们对安全装置的需求。电子密码锁有许多优点,安全性能高、成本廉价、功耗低、系统简单、记住密码便容易解锁。现如今,电子密码锁总体上采用的技术相对成熟。其主要的器件是单片机,软件方式是其解码器的产生所采用的方式。这次研究和设计使用STC系列的STC89C52作为控制处理单元,加上液晶显示单元,报警单元以及按键单元等等。依据它的特点和这次设计做需要的功能进行了开发,相应的程序编写使用keilC51软件,系统的硬件仿真采用Proteus来进行相应的输入输出模拟。最后,通过焊接制作出密码锁的实物,使其具有输入密码正确开锁,输入密码错误锁定报警功能。关键词:单片机;密码锁;Proteus。DesignofPasswordLockSystemBasedonSingleChipComputerAbstract:Inpeople’sdailyworkandlife,throughthewayoflock,wecanopenthedoorsofhousesandoffices,andstorecabinetsofvariousmaterials.Lock,playedacustody,areassuringrole.Ifweusethetraditionalunlockingmethod,peoplewillcarryheavymetalkeys,andmorethanone.Itbringsgreatinconveniencetopeople’slife.Peoplewillbeveryanxiouswhenthekeyislost.Electronicpasswordlock,whichhasmanyfunctionsofanti-theftandalarm,willreplacethemechanicalpasswordlockwithpoorsecurity.Theimportanceofsafetydevicesisbeyonddoubt.Withtheemergenceofthepasswordlock,people’sdemandforsecuritydevicesismetwithgreatprobability.Electronicpasswordlockhasmanyadvantages,suchashighsecurityperformance,simplesystem,easytounlockbyrememberingpassword.Nowadays,thetechnologyofelectronicpasswordlockisrelativelymature:themaindeviceissinglechipmicrocomputer,andthesoftwaremodeisthewayofitsdecoder.ThisresearchanddesignusestheSTC89C52oftheSTCseriesasthecontrolprocessingunit,plusaliquidcrystaldisplayunit,analarmunitandakeyunit.Accordingtoitscharacteristicsandthefunctionsrequiredforthisdesign,itwasdeveloped.ThecorrespondingprogramwaswrittenusingkeilC51software.ThehardwareemulationofthesystemusedProteustosimulatethecorrespondinginputandoutput.Finally,thephysicalcodelockismadebywelding,sothatithasthefunctionofunlockingthelockbyenteringthepasswordcorrectly,andlockingthealarmbyenteringthewrongpassword.Keywords:MCU;Codelock;STC89C52.目录TOC\o"1-2"\h\u1绪论 绪论1.1研究背景随着单片机的功能飞速提高,性价比也越来越高,技术也逐渐成熟,推动了社会的进步。单片机的优点是:分量轻、耗能少、性价比高、管控能力强、运算速度飞快,它广泛运用于国民的经济建设以及军事方面。与此同时,单片机的发展也提高了人们对于数字电路,微型计算机原理等专业课程的实际运用能力,也为它们打下了坚实而又可靠的基础。时代更替,人们的经济水平和对于安全的防范意识日益增强,对于自我安全的保护意识越来越前卫。锁,从古至今都是安全的象征,人们对它的要求是非常高的,它的方便性和防盗性能得到了人们的青睐。而步入20世纪,发展最快的便是电子相关技术,电子密码锁也开始大放异彩。通过各种资料我们了解到,早在二十世纪的三十年代,电子密码锁便开始研究了,自从那时起,密码锁便有了雏形。这种锁的目的自然而然是为了使锁的安全性能进一步提高,它由键盘输入一组密码来进行工作。电子锁配合机械锁使用的原因是电子密码锁的密码量大,而且没有钥匙被仿制的隐患。使用电子密码锁时,输入正确的一组密码,便可以打开锁。因此,电子密码锁在给人带来极大便利的同时获得了越来越多人的青睐。数码锁,指纹锁和IC卡都属于电子锁的范畴。本课题所研究的便是最常用的按键式电子密码锁。1.2课题研究的目的及意义电子密码锁具有授权的基本能力,当应用于金融行业,存取钱物需要依靠它的授权。从广义来说,授权在金融行业主要表现在一下三个方面:保管的权利,类似保险箱;出入的权利,类似出入金库,保险柜;流通的权利,比如自动存款与取款。当前,前两个层面是密码锁在金融行业的主要用处。接下来,我们将向大家展示与介绍应用于该行业的电子密码锁。授权技术虽说已经非常成熟和高超,但是如果没有精密的锁作为部件的承载,那也是不能实现的。它具有实现开锁与关锁的功能,又可以进行实体的保护,对一些破坏的行为进行抵抗或者延迟。在普遍情况下,普通锁主要依靠锁坚硬的外壳,关锁的零部件强度,锁的形状以及布局来进行防盗。报警已然成为了电子密码锁走向更高强度防护的必然途径。金融业的诸多场所均配备多人看守,而且还设立监控,这时有多功能报警的功能的密码锁就很重要,可以使得金融防护安全万无一失。我们选择的许多的探测方式,都是基于电子密码锁的。在我国的金融业中,物联网的报警也成为了不可缺失的一部分。金融行业的安全防范可谓非常必要,国外已经有了丰富的实践经验。我们可以对报警的器材性能和人员值班情况以及器材的性能进行评估,评估出它的风险等级。在此之中,电子密码锁也扮演了一个及其重要的角色。类似数字,符号,图像,它们均可以成为钥匙的重要电子信息,电子密码锁超高的保密性正是由于信息的多种排列组合。组合使用的各类信息使得密码锁拥有无限拓展的可能性,产品也变得更加丰富,给用户的选择也越来越多。1.3国内外研究进展当前来说,我国的电子密码锁的研究技术相对于欧美发达国家,还处于发展中阶段。我国的电子密码锁的水平不高,仅限于国际上上世纪六七十年代的水平,可以说不够发达。自从二十世纪八十年代开始,科技开始发展,电子集成电路面世了,电子密码锁技术也更进一步,尤其是自单片机面世后。电子密码锁可靠性好,体积小的优势迅速地打败了构造简单但是笨重的机械锁。然而,电子密码锁在国内受到了一定范围的局限,因为它需要电源来供能,而且它的成本高。虽说密码锁多多少少存在一些劣势,但是它能代替安全性能低,不能报警的机械钥匙锁。而就目前的形势来看,密码锁得继续往功能完善,价格低廉发展。在西方国家,密码锁的应用可以说已经到达一个完善的地步,例如美国,英国等发达国家。美国更是在电子商业和公钥标准中成熟的运用了这项技术。像我们熟知的指纹锁,人脸识别,它们虽有着不同的解锁模式,但它们的安全性非常之高。但是,这些加密技术在一些高智商的犯罪分子面前还是可以破解。随着技术的进一步成熟,密码锁的安全性能也将进一步提高。2系统的总体设计2.1设计目标和总体方案该方案的设计目标,主要具有如下功能:(1)在指定的键盘按键上输入密码,当且仅当密码正确,锁能够直接打开。(2)密码错误时的报警功能,以及锁定键盘的功能。如若错误地输入密码,显示屏会直接提示错误,蜂鸣器将会锁定键盘并报警。本设计的最为重要的单片机是STC89C52单片机,一款实用而常见的单片机,在对应的硬件电路配套下,实现以下功能:存储,设置密码,识别,驱动执行器等等。当蜂鸣器送来报警信号时予以接收,其还具有发送数据的功能。当输入的代码被单片机所接受,此时与EEPROM中的六位密码对比。由于密码锁的主人可拥有多种密码的选择权,高达298万组。当输入正确的密码,电磁执行器被驱动立刻开锁,倘若密码输入错误,单片机的通信线路会发出信号,向报警器报警。矩阵键盘,外部硬件以及单片机等就构成了密码锁。密码的输入和各种功能的实现都是通过矩阵键盘进行实现。用继电器的常开触点去控制电磁铁,从而来吸合线圈,亦可以使用单片机的负载,将继电器更换为密码锁的电磁铁,这样便能实现吸合电圈。而单片机每次开锁和电磁执行器的驱动电流由单片机的芯片负责处理。与此同时,报警器接受来自密码识别程序的报警信息,这样,密码锁才能正常的工作。下图为系统结构框图。图2.1系统结构框图2.2系统硬件方案为了发挥各种器件的最大功效,该设计在选择硬件电路之前必须有完善的规划与设计方案,不仅如此,比较各个模块也十分重要,有助于挑选最合适的硬件。2.1.1主控芯片的选择方案一:主控芯片选择STC89C52。宏晶科技公司生产的八位CMOS微处理器,它的型号是STC89C52单片机。它具有性能条件好,功率损耗低的优点。片内拥有8K编程Flash处理器。它的内核为MCS-51,兼容性良好,与MCS-51完全兼容。与一些传统的51单片机相比,STC89C52作出了非常大的改变,使其的功能更上一层楼,例如芯片的4K的EEPROM存储,它的优点是无需外接存储芯片,每当它需要掉电存储数据,便可以直接使用。而它上手的难度低,成本低也获得了极大的肯定。总而言之,STC89C52是极其不错的备选方案。方案二:主控芯片选择的是MSP430这款单片机。1996年,美国德州仪器将这款单片机推向市场。MSP30同时具有许多优点,它被称之为混合信号处理器,即可将功能不同的多个模块集成于一个芯片。此外,超低的功耗也是它独特的优点,与此同时,它也拥有精简指令集。尽管如此,它的研发成本较高,难度高限制了它在简单设计中的作用,因此它多用于电池供电的仪表。方案三:主控芯片选择的是PIC16F877A这款单片机。Microchip公司开发的这款新的单片机,它具有以下的优点:可擦写程序,不计次数,程序可以内部存储。它的缺点如下:价格昂贵,使用的难度高,上手难度高。综上所述,STC89C52单片机是本设计的首要选择,究其原因是其价格低,上手难度低。2.1.2显示器件的选择方案一:采用LED数码管。其优点便是价格低廉,LED数码管适合显示一些字母与数字。然而本设计采用的动态扫描法需要驱动电路的支持,数码管也是依靠驱动电路将电流放大后来支持。采用LED数码管很大的缺陷便是单片机的IO口输出电流不够。与此同时,由于数码管显示的内容繁多,倘若用数码管显示,会给焊接带来巨大的麻烦,导致实物的制作失败。方案二:采用的是LCD1602液晶显示器。液晶显示器可同时显示32个字符或者16*2个字符。字符的内容是数字,符号,自定义的字符和数字等。LCD1602最大的优点便是容易控制,类似于市场上常见的HD44780液晶屏。与此同时,LCD1602显示器的字符是由5*7组成。LCD1602显示器采用并行或者串行的传输方式,是该实验首选目标。方案三:用LCD12864液晶显示器来完成显示。该液晶显示器的优势便是界面十分灵活,加上其简便的操作,形成了完整的中文人机交互界面。通过8*4与16*16的点阵汉字,也可以将图形进行显示。其最大的优点还是低功耗和较低的电压,虽然其优点很多,功能也比较强大,但是其较高的成本,容易形成显示空间浪费等缺点是其不适合该设计的主要原因。综合上述的描述,该设计首选LCD1602来进行。3系统的硬件设计3.1单片机最小系统设计3.1.1STC89C52单片机单片机把最主要的硬件组成部分集成在一块半导体芯片上。它集成了逻辑运算单元、随机存储器RAM(Randomaccessmemory)、只读存储器ROM(Readonlymemory)、中断以及定时计数器等电路。它只有一个微控制器芯片,但从组合物和特点的角度,它已经具备了微机的基本性能。它实现了各种测试和控制功能,才能从控制上具有中央处理器的目标,它强调供应链管理和控制的主要应用领域属性被称为微控制器MCU。MCU中的应用,通常是作为在控制系统的核心,集成到一个具有各种模块的芯片上,即嵌入在使用的所有方式以及所需要的基本控制功能,以强调它的“嵌入”的功能,通常被称为微控制器嵌入式微控制器EMCU,简称微处理器,在单片机的电路和结构中,有许多嵌入式应用的特点。根据我们对基础构架的开发和需求,我们可以单片机分为两类。通用的单片机是一个基本的芯片微控制器,它具有丰富的内部资源,以及整体性能和适用性,并可以涵盖各种类型的应用需求。根据需要成各种控制系统可为用户设计的应用程序,并且在设计过程中的使通用型微控制器,通过进一步设计用户以与其他外接端口的应用一起建立一个共同的微型控制器芯片为核心的控制以及可开发系统。但是在我们日常的生活中,我们要具体用到微控制器的时候,我们自己针对其应该具有的指定功能,比如读卡装置或者是计时装置。我们知道这种应用具有的很大的特点是它很有针对性,但是具有的数量又很大,所以很多应用的厂商和芯片的制造厂商进行交流合作。单片机作为微控制器的基础构架,生产商不可能为每一个用户进行适合用户的二次开发,这样在实际的生产中也是不理想的,基本的单片机具有微控制器所需要的基本功能,在选择时要根据自己具体的需求来选择适应的型号,就能最大化的利用资源来进行开发。该设计使用的STC89C52单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机。同时它也是一款指令代码完全兼容传统8051单片机。该单片机突破了传统51单片机的限制,拥有了更多且强大的功能。它有两种工作频率来进行选择:12时钟/机器周期和6时钟/机器周期。其中,6时钟周期/时钟周期是传统的8051单片机的工作速度。与此同时,它为众多嵌入式系统提供了有效而灵活的解决方案。另外,HD版本和90C版本内部集成了MAX810专用复位电路,省去了外加复位电路的麻烦。该单片机的内部硬件结构和功能是必要了解的。中央处理单元CPU是STC89C52的核心,由运算器和控制器两部分组成。具有以下标准功能:512字节的RAM,代表512个字节的数据存储器,设置的变量以及运算的变量都保存在数据存储器中;8K字节的闪存是程序存储器,编译后的可执行代码存放在8K的程序存储器中;内置ISP监控程序,通过串口进行程序下载;I/0口,输入输出设备接口;IAP功能再应用编程,包含了4KEEPROM,省去了在外面单独加EEPROM芯片的问题;看门狗定时器;集成MAX810专用复位电路;3个16位的定时器/计数器;通用的全双工串行口,可以实现与PC的互通;4个外部中断,支持掉电唤醒。以下是STC89C52单片机的功能部件和特性:•增强型的6时钟/机器周期和12时钟/机器周期任意设置,在ISP软件中设置•指令代码完全兼容8051•工作电压5V•工作频率0-40MHZ•用户应用程序空间:8KB片内FLASH程序存储器,可擦写次数十万次以上•512RAM数据存储器•硬件看门狗•内置4K的EEPROM功能•内部集成MAX810专用复位电路•共3个16位定时器•四路外部中断,下降沿中断或低电平触发中断•通用全双工串行口该单片机共有三种工作模式,分别为掉电模式,空闲模式,正常工作模式。处于掉电模式时,单片机一切工作停止,直到中断或者硬件复位来将其唤醒,但是RAM内容保持不变。空闲模式与掉电模式相比,CPU停止工作,RAM,定时器,串行口都继续工作,其典型功耗2mA。正常工作模式下,单片机正常执行程序,典型功耗4-7mA。可以看出正常工作模式的功耗最高。下图STC89C52单片机电路图。图3.1单片机电路3.1.2复位电路单片机以及微机的复位,它的置位和复位微控制器,是将电路初始化为定义的状态,在一般情况下,微控制器复位电路的诸如状态机的作用初始化为空状态,单片机复位时一些寄存器和存储器设备进行制造商设定值的预加载。我们应用的单片机是通过上外接复位单元来实现单片机的复位。下图为单片机的复位电路。图3.2复位电路3.1.3晶振电路晶振被称为单片机的心脏,由它提供给单片机运行需要的时钟频率,单片机的运行的实现依靠时钟电路提供的时序,先进的具有更高的精度。一些晶振也能通过在规定区域内的施加电压的频率的过程,被我们称为一个能够进行电压控制振荡器的调节。晶振是一个可以把自身特性转化为电和机械能的模块,能够输出稳定准确的震荡频率。微控制器晶体的效能是为我们工作的模块加载一个能够维持正常工作的时钟信号。系统常使用相同的晶体,用来促进和保持系统各部分在相同的频率下工作。一些系统借助有差别的的晶振和射频通信,并通过电子分频调节方式同步,通常很多种类的系统需要不同的振荡频率,那么就可以采用相同的晶振相连的不同的电路来进行使用,可以给我们提供所需的系统正常工作的时钟频率。这就是所谓的晶振和相关电路的共同使用。常见的单片机内部都含有相关的振荡电路,如果要在外部连接晶振电路只需要连接两20pf的电容即可。下图为晶振模块电路图。图3.3晶振电路3.2键盘电路设计为了更好地控制系统的运行状态,人们在单片机的实际应用中,往往都会设置键盘。通过键盘,进而输入一些指令和数据,从而达到人机交互的目的。单片机进行人机交互的基础途径便是通过键盘。通常情况下,通过按键的方式,进行输入数据以及设计控制功能的指令。而开关量是输入状态的本质。虽说这种方法是十分简单方便的,但是容易占用到单片机的I/O口。采用矩阵键盘进行控制的前提便是系统的复杂程度高和参数数量十分繁多。该设计采用矩阵键盘,电路连线图如下所示:图3.4键盘电路3.3液晶显示电路设计LCD1602是一种工业字符型液晶显示器,它是一种专门用来显示字符的点阵型液晶模块,它的组成是若干个点阵字符位每位之间间隔了一个点距,每个点阵字符位都可显示一个字符,行与行之间也有着间隔,它的作用是表示字符的间距和行间距,正因如此,它不能很好的显示图形。LCD1602的含义如下:LCD表示该器件的类型是液晶显示器,1602是器件的型号,表示可以显示2行,每行16个字符。市面上有许多不同型号的液晶显示器例如LCD1604,LCD12864,不同型号的显示器显示容量不同。LCD1602具有以下工作原理:LCD1602集成了一个显示驱动芯片HD44780,该驱动芯片主要负责与微控制器进行通信,执行微控制器的命令,并向微控制器报告器件当前的状态,驱动芯片中包含了三个存储器分别是CGROM,CGRAM,DDRAM。下面介绍LCD1602显示字符的方式:LCD1602上电,DDRAM被清零,LCD1602无显示。如要显示‘A‘字符,则在CGROM的表中查找到大写字母A对应的存储地址,通过‘A‘所在行列查到地址为01000001,将其存储到DDRAM中第一个为00H的单元中,接着,控制芯片从DDRAM中读取到‘A‘字符在CGROM中的地址,并通过该地址在CGROM中寻址到大写字母A的点阵数据,最后点阵数据产生在屏幕上,这样字符显示完成。LCD1602的引脚有16个,分为三组,第一组为电源引脚,第1到第3脚为LCD1602提供电源,第二组为4到6脚,负责命令的传输与执行,通过这三个引脚告诉1602传递给它的数据是命令还是待执行状态,第三组为7-14脚,为双向数据总线,负责数据的传输,第四组为15与16引脚,为LCD1602的背光提供电源。具体连接方式如下图所示。图3.5液晶显示电路3.4报警电路蜂鸣器和外围电路的组合构成了报警电路模块,一旦密码输入错误,则立刻发出报警声,通电后不发生,如下图所示。图3.6蜂鸣报警电路3.5密码锁电路输入正确的密码,关于开锁的继电器就会立刻吸合,继电器构成了密码锁部分。如下图所示。图3.7密码锁电路3.6存储芯片电路设计AT24C02这个芯片具有2K位串行CMOSE2PROM,在它内部具有256个字节,它们是八位的。同时,AT24C02具有字节缓冲器。CATALYST公司对此进行了改良,使用先进的技术让器件的损耗降低。该器件的操作方式是通过IIC总线接口。AT24C02连接线路图如下图所示。图3.8总线和存储芯片连接电路AT24C02时钟芯片引脚功能描述见表3-1。表3-1AT24C02引脚引脚名称功能1~3A0、A1、A2当这些脚悬空时默认值为0。当使用AT24C02时最大可级联8个器件。如果只有一个AT24C02被总线寻址,这三个地址输入脚(A0、A1、A2)可悬空或连接到GND,如果只有一个AT24C02被总线寻址这三个地址输入脚(A0、A1、A2)必须连接到GND。4GND接电源地5SDA双向串行数据/地址管脚用于器件所有数据的发送或接收,SDA是一个开漏输出管脚,可与其它开漏输出或集电极开路输出进行线或(wire-OR)。6SCL串行时钟输入管脚用于产生器件所有数据发送或接收的时钟,这是一个输入管脚。7WP如果WP管脚连接到VCC,所有的内容都被写保护只能读。当WP管脚连接到GND或悬空允许器件进行正常的读/写操作8VCC接+1.8V~6.0V电源4系统的软件设计4.1主程序流程图如图4.1为主程序流程图,用户才可以自行设定和修改6位密码,密码输错会有提示声。只有键入6位开锁密码完成正确才能开锁。图4.1主程序流程图4.2开锁程序设计如图4.2开锁流程图,开始时按开锁键,输入密码,如果输入正确,则开锁成功。如果输入错误则执行报警程序。图4.2开锁流程图4.3键盘扫描子程序设计矩阵键盘扫描子程序应该具有以下2个基本的功能:(1)能判断是否有键按下;(2)能确定是哪个键被按下。其软件管理主要分为以下三步来完成:a.判断整个键盘是否有键按下。让所有的行为0,然后读列的数值。如果列的数值全部为1,说明没有键被按下,否则说明有键被按下。b.识别被按下的键的位置。采用一行一行的扫描方法,逐行输出0,然后读列的值。如果列的数值全部为1,说明不是这一行的按键被按下,扫描下一行,如果列的数值不全为1,则说明被按下的按键时在这一行。c.查键值表,返回键值对应信息,以便确定各按键应该完成的功能。下图为键盘扫描子程序流程图。图4.3键盘扫描子程序流程图4.4显示模块子程序设计由于设计中要求能够显示密码输入界面、密码输入信息、密码正确后提示界面、密码错误后提示界面和修改密码相关界面等信息,故要用到很多个显示子程序来显示不同的内容。虽然显示子程序很多,但是由于其显示原理都一样,所以我就不一一介绍各个子程序了,只要能够熟练使用LCD1602各个指令,这些大同小异的子程序也就不在话下了。下面为LCD1602写命令子函数和写数据子函数。voidwrite_com(ucharcom){ e=0; rs=0; rw=0; P0=com; delay_uint(3); e=1; delay_uint(25); e=0;}/***********************lcd1602写数据函数************************/voidwrite_data(uchardat){ e=0; rs=1; rw=0; P0=dat; delay_uint(3); e=1; delay_uint(25); e=0; }RS为数据选择端接口,RW为读写端接口,EN为使能端接口,当RW为低电平,执行写操作,看RS和E,RS为0时,写指令;为1时,写数据。RS先变,过一段时间,E开始变为低电平,持续一段时间后,由低电平变为高电平,变化过程结束后,再变化RS。下图为显示模块子程序流程图。图4.4显示模块子程序流程图4.5掉电存储子程序掉电存储子程序就是将初始密码写进AT24C02,单片机每次复位后从AT24C02中读取密码用来和输入的密码进行比较,以判断输入的密码的正确性。当密码修改成功后,将新密码写入AT24C02,以便单片机下次复位后使用。掉电存储模块子程序主要涉及AT24C02的写操作方式和读操作方式。AT24C02有2种不同的写操作形式和3种不同的读操作方式。4.5.1写操作方式两种写操作方式为:字节写和页写。字节写模式下,主机发送(R/位置为0)起始命令和器件地址信息,主机在收到AT24C02的应答信号后,发送1~8位字节地址,写入AT24C02的地址指针中。对于高于8位的地址,主机连续发送两个8位字节地址写入AT24C02中,主机在收到AT24C02的另外一个应答信号后再发送数据到被寻址的存储单元,AT24C02再次应答,并在主机发出停止信号后开始内部数据的擦写。AT24C02在内部擦写过程中不响应主机的任何请求,因此在两次写操作之间应该留有足够的反应时间。字节写的时序是这样的:地址只有8位:开始→器件地址→响应→8位字节地址→响应→数据→响应→停止。地址高于8位:开始→器件地址→响应→高8位字节地址→响应→低8位字节地址→响应→数据→响应→停止本次设计中采用的是字节写方式。图4-5为字节写的程序流程图。图4.5

将字节写入AT24C02的程序流程图页写和字节写所不同的是:字节写一次只能写入一个字节数据,页写一次可以写入8个或16个字节数据。页写的时序是这样的:地址只有8位:开始→器件地址→响应→8位字节地址→响应→数据1→响应→……→数据N→响应→停止。地址高于8位:开始→器件地址→响应→高8位字节地址→响应→低8位字节地址→响应→数据1→响应→……→数据N→响应→停止。4.5.2读操作方式三种不同的读操作方式为:读当前地址内容(立即地址读取)、读随机地址内容(随机地址读取)和读顺序地址内容(顺序地址读取)。(1)读当前地址内容。AT24C02的地址计数器内容为最后操作字节的地址加1,所有如果上次读写操作的地址为N,采用读当前地址内容方式读地址应该从N+1地址处开始。AT24C02接收到器件地址信号并且I2C总线允许接收数据(R/=1),则首先发送一个应答信号然后输出数据。数据输出完毕后,主机发送停止信号,读操作完毕。(2)读随机地址内容。这种读操作方式允许主机读出AT24C02的任意字节。主机置通过R/位为0,发送开始信号、AT24C02地址和欲读取的字节数据地址来执行一次伪操作,在AT24C02应答后,主机再一次发送开始信号和AT24C02的地址,此时R/位置1,AT24C02响应并应答信号,然后输出字节数据,最后主机以一个停止信号结束数据的读取。(3)读顺序地址内容。读顺序地址内容操作方式通过立即读或随机地址读操作来启动,主机在AT24C02发送完一个8位数据后产生一个应答信号,告知AT24C02主机要求更多数据。AT24C02收到主机的应答信号后继续发送数据,直到主机不发送应答信号响应而发送停止信号后操作结束。下面是三种不同的读操作方式时序对比:读当前地址内容:开始→读器件地址→响应→数据→无响应→停止。读随机地址内容:开始→写器件地址→响应→要读的字节地址→响应→开始→读器件地址→响应→数据→无响应→停止。读顺序地址内容:开始→写器件地址→响应→要读的字节地址→响应→开始→读器件地址→响应→数据1→响应→……→数据N→无响应→停止。本次设计中采用的是读随机地址内容操作方式。掉电存储功能就是通过调用向AT24C02写字节数据的程序和从AT24C02读字节数据的程序来实现的。程序流程图如下图所示。图4.6

读AT24C02相应地址内容的程序流程图4.6报警子程序报警子程序的原理很简单,即当输入密码错误次数超过规定的最高允许次数时,不断给蜂鸣器脉冲,使其不断发音。同时,由于CPU一直在给蜂鸣器提供脉冲,故无暇处理诸如密码扫描等事件,也就是说,在蜂鸣器报警的同时也屏蔽了键盘的输入。本次设计中,密码输入错误次数不得高于3次。下图为报警子程序流程图。图4.7报警子程序流程图5系统的仿真与调试5.1系统的仿真我们完成了原理图以及PCB图的制作,同时也在keilC51里完成程序的编写,紧接着我们需要对本次设计的产品先进行一次仿真,来验证方案是否成功,是否可行,在proteus工程下,给单片机下载好程序,点击开始仿真,系统启动,并且默认在自动模式中运行,这套系统给予我们很好的锻炼了我们对程序以及硬件的设计,而且能在生产实物之前就进行理论方案的确认,以及实验方案是否可行。所以,学习单片机的设计与开发借用proteus是非常有效的渠道。51单片机加载密码锁程序的Hex文件,进行仿真运行,此时LCD显示初始密码输入界面。如下图所示。图5.1系统仿真图输入初始密码123123后,点击“确认”键,LCD显示Open状态,密码锁打开,继电器动作,开锁成功。如下图所示。图5.2系统开锁图输入密码错误三次,点击确认,矩阵键盘锁定一分钟并报警,LCD显示Passworderror如下图所示。图5.3系统报警图5.2系统的调试在编写程序的过程中,也会遇到许多问题,将程序在KEIL软件输入完成,调试主程序时,发现程序报错,如下图所示。图5.4程序报错第一个错误发生在第6行,程序报错显示non-address/-constantinitializer。第一个错误的主要原因是因为有效的初始化表达式没有用非地址量+/-常量,在relay前少加了sbit,导致程序的报错,在修改后也是解决了有关问题。程序错误如下图所示。图5.5错误1第二个错误发生在第55行左右,程序报错显示syntaxerrornear‘e’,在经过检查后发现是因为在第54行delay_uint(3)后忘记加分号,在经过修改后也是解决了这个问题。程序错误如下图所示。图5.6错误2第三个错误发生在第180行,程序报错显示‘O’;undefinedidentifier,在经过检查后发现是由于原本的i=0写成了i=o,所给的标识符未定义。经过修改后也是解决了这个问题。程序错误如下图所示。图5.7错误3第四个错误发生在第194行,程序报错显示syntaxerrornear‘)’,在经过检查后发现是由于在编写程序时候没有加上累加语句i++,导致程序不能运行。经过修改后也是解决了这个问题。程序错误如下图所示。图5.8错误4第五个错误发生在第274行附近,程序报错,在经过检查后发现由于272行没有加分号导致报错,经过修改后解决了这个问题。程序错误如下图所示。图5.9错误5第六个错误发生在第298行,程序报错显示“p1”:undefinedidentifier,经过检查后是由于变量名不一致导致,经过修改,将p1修改为P1,解决了问题。程序错误如下图所示。图5.10错误6第七个错误发生在第605行,程序报错,经过检查后发现while循环语句语句编写错误,应该将while()改成while(1)。程序错误如下图所示。图5.11错误76系统的集成与仿真

6.1系统焊接与制作联合仿真调试通过后,本次设计业就进入了最后一步,但也是最关键的一步——实物设计和制作。由于电路板空间有限,所有在进行实物设计之前应该根据系统的仿真电路图做好各功能模块的整体布局,这样既可以使得实物设计的顺利进行,也可以最大化的令做出来的实物看起来简洁而美观。在本次设计中,实物设计是按以下步骤完成的:(1)单片机最小系统的电路焊接。只有保证了单片机最小系统的正确性,才能在接下来的其他模块设计和焊接出现错误时能够方便地检查出原因,因此单片机最小系统是必须首先完成的。(2)下载口电路的焊接。单片机最小系统电路焊接好后,需要检查其正确性,这就需要往单片机中下载一个简单的程序,看其是否能正常工作和复位,这就需要焊接一个下载口电路,此下载口电路还可以当做电源口使用,通过数据线连接电源即可给单片机供电。其中MOSI接口接单片机的P1.5口,RST接单片机的复位端口,SCK接单片机的P1.7口,MISO接单片机的P1.6口。下载口的2端口接电源,4、6、8、10端口接地。在下载口接好后,应用单片机程序烧写软件通过下载口将测试程序下载进入单片机测试最小系统是否焊接正确。一般使用的测试方法是在单片机端口接一个发光二极管,通过程序控制二极管发光,若能点亮二极管则最小系统焊接正确。在本次设计中使用的单片机程序烧写软件为AVR_fighter。(3)液晶显示器及电路焊接。按照仿真电路原理图和液晶显示器接口使用说明焊接好液晶显示器,将显示子程序下载入单片机,若显示器能够按照要求显示字符则焊接正确。(4)键盘模块焊接。按照键盘模块仿真图焊接按键,之后将测试程序导入单片机中检验按键是否正确焊接成功。本设计中检验按键的程序功能是当有按键按下时,将所按下的键值在液晶显示器中显示出来。(5)E2PROM存储器的焊接。根据AT24C02的引脚介绍,将AT24C02接到单片机上。测试AT24C02是否焊接正确的程序功能是将一个数组中的数写入AT24C02,再将这一个数组中的数从AT24C02中读出放入另一个数组中,比较两个数组中的数是否相同,若相同则AT24C02的电路焊接正确,掉电存储功能模块功能实现。(6)将蜂鸣器和发光二极管焊接到单片机系统中,将本次设计的源程序下载进入单片机中,看是否所有功能都实现了。若能够实现所有功能则本次设计也就宣告完成,若不能实现,则根据出现的问题检查线路,找出原因,直至能够实现所有功能。在实物制作过程中,明白了以下几个问题:第一,根据仿真图焊接电路,但不能尽信仿真图。仿真图始终不能代替实物调试,在实物制作过程中应根据实际情况调试电路;第二,调试和查找错误过程中,如非必要应尽量不要带电操作,以免损坏器件;第三,电路布局应尽量工整。工整简洁的电路布局不但看着美观,而且能够更方便地查找电路错误。本次设计的实物制作,由于经验不足的原因,许多焊接点焊得不够美观,但是整体布局还是够简洁工整的。这也是设计中虽然经验不足,制作过程中出现了各种各样的问题,但是进展却很顺利的原因,简洁工整的布局使得查找问题变得更加容易,能够方便的理清电路,找出错误并加以改正。下图为实物图。图6.1系统实物图6.2系统调试输入电源,打开开关,如下图所示。图6.2实物工作图输入初始密码“123123”点击确认,屏幕显示“OPEN”,继电器开锁,红色指示灯点亮,十秒后自动熄灭。如下图所示。图6.3系统开锁图当输入密码错误三次,键盘锁死一分钟,并产生报警,如下图所示。图6.4系统报警图7.结束语经过这一次对单片机的密码锁这个课题的毕业设计,我个人的专业能力,分析问题的能力以及动手能力进行了一个质的飞跃。我对单片机原理与应用这门课又有了不一样的认识和兴趣,也为我以后的单片机方面的工作打下了扎实的基础。由于本人的水平有限,我在这次的毕业设计中,也会遇到或大或小的问题,通过询问专业老师,查阅资料,最后也得到了解决。毕业设计是一次考验,是一次能力的测试,也是衔接大学与社会工作的桥梁。在这次毕业设计中,我也得到了极好的锻炼。由于本人的水平有限,设计中难免会有一些不合理的部分,系统的稳定性还有待提高。本次课程设计的,我对这些知识也有了更深刻的认识,并且,我又学会了一款对于我们电子人非常有用的软件proteus。加强我们对电子器件的了解。比如说,去年刚刚学习过的单片机课程,虽然课时非常短,但是凭借跟人的兴趣以及在课堂上的认真听讲,我还是很深刻的将老师课堂上传授的知识掌握了。但是,毕竟课时太少,我对单片机的认识还是很局限于课堂上的知识,通过这次毕业设计,给我了一个很好的对单片机再次认识的机会,所以,我非常认真的将这次毕业设计独立的完成,因此也从中获得了很多课堂上没有学到的知识。最后感谢老师能给我们这次毕业设计的机会以及百忙之中指导我们。参考文献[1]汪建关,邵春枫,谷高明,缪传付.基于STC89C52单片机的电子密码锁设计[J].现代信息科技,2019,3(22):38-40.[2]陈军.单片机数字密码锁的设计与实现[J].福建电脑,2019,35(06):78-79.[3]徐玉召,戴德伟,刘义,郭红波.基于单片机的电子密码锁硬件系统设计[J].电脑知识与技术,2019,15(09):212-214.[4]刘佳乐.基于单片机的电子密码锁设计[J].中国新技术新产品,2018(23):7-8.[5]朱彦龙,房新荷.基于51单片机的指纹电子密码锁的设计与实现分析[J].电子元器件与信息技术,2018(10):75-77.[6]刘寺杰,郭翔宇.基于单片机处理的电子密码锁设计[J].科教导刊(中旬刊),2018(08):49-50+70.[7]张萍,马树军,史可福.基于51单片机的指纹电子密码锁的设计与实现[J].实验室研究与探索,2018,37(08):134-138+161.[8]麻锐敏.基于单片机的电子安全密码锁的设计初探[J].科技风,2018(23):24.[9]王睿,崔志强,郑昊,张思睿,赵玮.基于单片机串行通信的电子密码锁设计[J].中国新通信,2018,20(15):1.[10]沈小倩.基于单片机的电子密码锁的设计与制作[J].机电工程技术,2018,47(06):45-46+168.[11]徐万明,杨敏,杨思阳,田绍东,陈克林.基于单片机的多功能电子密码锁设计[J].信息通信,2018(04):117-119.[12]王天凤.基于单片机的电子密码锁教学应用[J].电子技术,2018,47(03):50-51.[13]李云强.基于单片机的红外遥控电子密码锁设计与仿真[J].南阳理工学院学报,2018,10(02):29-33.[14]严敏,黄皓.基于单片机的电子密码锁的设计与实现[J].佛山科学技术学院学报(自然科学版),2017,35(06):47-50.[15]庞书伟,江世明.基于AT89C51单片机的电子密码锁设计[J].电子世界,2017(19):96.[16]毛行标.基于单片机控制的电子密码锁设计与实现[J].现代机械,2017(04):96-98.[17]赵若静.基于单片机的电子密码锁的设计[J].电子技术与软件工程,2017(14):249.[18]徐雨楠,谌威,屈伟.基于单片机的电子密码锁设计分析[J].电脑迷,2017(07):37.[19]张晓洁,郑鑫,韦雨梅,石柳月,荣康.基于单片机的密码锁储物罐设计[J].智能计算机与应用,2017,7(03):191-193.[20]施亚杰,韩坚洁,廖博文,蒋军辉,蒋浩,边港兴.基于AT89C51单片机的现代化电子密码锁探索[J].产业与科技论坛,2017,16(12):55-56.致谢感谢我的老师冯俊青。我的论文不管是从选题构思、资料收集到修改定稿,无不凝聚着老师的心血。正是老师的辛勤指导,我才有了今天的成绩。古语有云“师者,传道,授业,解惑者也”,冯俊青老师广泛渊博的学识、严谨细致的治学态度、一丝不苟的工作作风和积极进取的事业精神,都使我受益匪浅。冯俊青老师的悉心教诲,使我在学术专业方面有了一定的提高,更为重要的是,老师在治学为人上的那份执著和热诚,也深深地影响着我,并将鼓励我在未来的路上不断地探索、前进。他的谆谆教诲,换来了我对专业知识的系统掌握。感谢所有给以我支持和帮助的朋友、同学们。最后,感谢冯俊青老师在百忙之中抽出时间来阅读我的报告。由于本人才疏学浅,文中难免有不当之处,欢迎老师们指导建议。谢谢大家。附录#include<reg52.h> //调用单片机头文件#defineucharunsignedchar//无符号字符型宏定义 变量范围0~255#defineuintunsignedint //无符号整型宏定义 变量范围0~65535#include"lcd1602.h"#include"iic.h"ucharvalue,i; //变量ucharflag_lj_en;//边加ucharflag_lj_en_value;sbitrelay=P2^2;//继电器定义sbitbeep=P3^3;//蜂鸣器定义sbitbeiguan=P2^3;//背光uintflag_time;uintflag_guan;ucharsmg_i;uchardis_smg[7]={0};ucharpassword[7]={6,5,4,3,2,1}; //密码保存ucharpassword_bj[7]={1,2,3,4,5,6}; //密码比较ucharcodepassword_r[6]={1,2,3,1,2,3};ucharcodepassword_gl[6]={5,2,0,0,2,5};ucharpassword_xg[6]; //密码修改ucharflag_password;//密码正确否ucharflag_password_cichu1;//密码错误次数bitflag_200ms=1;//200ms标志位ucharkey_can;ucharmenu_1,menu_i;#include"iic.h"/***********************1ms延时函数*****************************/voiddelay_1ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<120;j++);}voidkey() //独立按键程序{ staticucharkey_new=0,key_l; key_can=20;//按键值还原 P1=0x0f; if((P1&0x0f)!=0x0f) //按键按下 { delay_1ms(1); //按键消抖动 if(((P1&0x0f)!=0x0f)&&(key_new==1)) { //确认是按键按下 key_new=0; key_l=(P1|0xf0);//矩阵键盘扫描 P1=key_l; switch(P1) { case0xee:key_can=1;break;//得到按键值 case0xde:key_can=4;break;//得到按键值 case0xbe:key_can=7;break;//得到按键值 case0x7e:key_can=10;break;//得到按键值 case0xed:key_can=0;break;//得到按键值 case0xdd:key_can=8;break;//得到按键值 case0xbd:key_can=5;break;//得到按键值 case0x7d:key_can=2;break;//得到按键值 case0xeb:key_can=3;break;//得到按键值 case0xdb:key_can=6;break;//得到按键值 case0xbb:key_can=9;break;//得到按键值 case0x7b:key_can=11;break;//得到按键值 case0xe7:key_can=15;break;//得到按键值 case0xd7:key_can=14;break;//得到按键值 case0xb7:key_can=13;break;//得到按键值 case0x77:key_can=12;break;//得到按键值 } } } else { key_new=1; flag_lj_en=0; } }/*****************密码还原********************/voidpassword_return(){ if(flag_lj_en==1) { flag_lj_en_value++; if(flag_lj_en_value>13) //按下3秒钟就自动密码还原 { flag_lj_en_value=0; flag_lj_en=0; write_24c02_8(6,0,password_r); beep=0; delay_1ms(500); beep=1; read_24c02_8(6,0,password); } } }/***************把数组清空**********************/voidclear_shuzu(uchar*p){ for(i=0;i<7;i++) p[i]=0;}/*************定时器0初始化程序***************/voidtime_init() { EA=1; //开总中断 TMOD=0X01; //定时器0、工作方式1 ET0=1; //开定时器0中断 TR0=1; //允许定时器0定时}/******************下载程序密码初始化**********************/ voidpassword_chushifa(){ scl=0; value=read_24c02(10); if(value!=75) { value=75; beep=0; write_24c02(10,value); delay_1ms(200); write_24c02_8(6,0,password_r); delay_1ms(200); read_24c02_8(6,0,password); beep=1; }}/****************按键功能处理********************/ voidkey_with(){ staticucharvalue; if(key_can==14)//手动关闭密码锁 relay=1; if(key_can==10) //用做密码从新回到初始值 { flag_lj_en=1; //连加使能 flag_lj_en_value=0; } if(menu_1==0) { if(key_can<=9) if(menu_i<6)//密码输入 { menu_i++; if(menu_i>6) menu_i=6; smg_i=menu_i; for(i=6;i>0;i--) password_bj[i]=password_bj[i-1]; password_bj[0]=key_can; for(i=0;i<smg_i;i++) dis_smg[i]='*';//0x30+password_bj[i]; write_string(2,7,dis_smg); lcd1602_guanbiao(1,7+menu_i+0x40);//开光标 } if(key_can==11) //密码删除 { for(i=0;i<menu_i;i++) password_bj[i]=password_bj[i+1]; menu_i--; password_bj[menu_i]=''; dis_smg[menu_i]=''; write_string(2,7,dis_smg); lcd1602_guanbiao(1,7+menu_i+0x40);//开光标 } if(key_can==15)//确认键 { value=0; for(i=0;i<6;i++) { if(password_bj[i]==password_gl[i])//判断管理员密码 { value++; if(value>=6)//密码正确 { write_string(2,0,"return"); beep=0; delay_1ms(200); read_24c02_8(6,0,password); beep=1; delay_1ms(2000); } } } if(value<6) for(i=0;i<6;i++) { if(password_bj[i]==password[i]) { flag_password=1; //密码正确 relay=0;//打开密码锁 for(i=0;i<6;i++) dis_smg[i]=0xbf; } else { flag_password=0; flag_password_cichu1++; write_string(1,0,"Passworderror"); write_string(2,0,"cishu:"); write_sfm2(2,9,flag_password_cichu1); delay_1ms(280); for(i=0;i<6;i++) { beep=~beep; delay_1ms(200); } beep=1; delay_1ms(800); break;//密码不正确 } } clear_shuzu(dis_smg); write_string(1,0,"PasswordLock"); write_string(2,0,"Input:"); lcd1602_guanbiao(1,7+0x40);//开光标 menu_i=0; } } }/****************修改密码********************/ voidxiugai_password(){ if(key_can==13)//修改密码 { if((relay==0)&&(menu_1==0)) { menu_1=1; menu_i=0; clear_shuzu(password_bj); //数据清空 clear_shuzu(dis_smg); write_string(1,0,"Input1:"); write_string(2,0,"Input2:"); lcd1602_guanbiao(1,7);//开光标 } } if(menu_1==1)//第一次输入修改的密码 { if(key_can<=9) { if(menu_i<6) { menu_i++; if(menu_i>6) menu_i=6; smg_i=menu_i; for(i=7;i>0;i--) password_bj[i]=password_bj[i-1]; password_bj[0]=key_can; for(i=0;i<menu_i;i++) dis_smg[i]='*'; write_string(1,7,dis_smg); lcd1602_guanbiao(1,7+menu_i);//开光标 } } if(key_can==11)//删除键 { for(i=0;i<menu_i;i++) password_bj[i]=password_bj[i+1]; menu_i--; password_bj[menu_i]=''; dis_smg[menu_i]=''; write_string(1,7,dis_smg); lcd1602_guanbiao(1,7+menu_i);//开光标 } if(key_can==15)//确定键 { clear_shuzu(password_xg); clear_shuzu(dis_smg); lcd1602_guanbiao(1,8+0x40);//开光标 menu_1=2; menu_i=0; key_can=20; } } if(menu_1==2)//第二次输入修改的密码 { if(key_can<=9) { if(menu_i<6) { menu_i++; if(menu_i>6) menu_i=6; for(i=5;i>0;i--) password_xg[i]=password_xg[i-1]; password_xg[0]=key_can; for(i=0;i<menu_i;i++) dis_smg[i]='*';//0x30+password_xg[i]; write_string(2,7,dis_smg); lcd1602_guanbiao(1,7+menu_i+0x40);//开光标 } } if(key_can==11)//删除键 { for(i=0;i<menu_i;i++) password_xg[i]=password_xg[i+1]; password_xg[menu_i]=''; dis_smg[menu_i]=''; write_string(2,7,dis_smg); lcd1602_guanbiao(1,7+menu_i+0x40);//开光标 } if(key_can==15)//确定键 { for(i=0;i<6;i++) { if(password_bj[i]==password_xg[i]) { flag_password=1; //两次输入的密码一样 } else { flag_password=0; write_string(1,0,"PasswordError"); write_string(2,0,"reenter"); delay_1ms(300); for(i=0;i<6;i++) { beep=~beep; //提示三声 delay_1ms(300); } beep=1; delay_1ms(1000); break;//密码不正确 } } if(flag_password==1) //两次输入的密码一样的 { for(i=0;i<6;i++) { write_string(1,0,"Password"); write_string(2,0,"Succeed"); password[i]=password_bj[i];//保存密码 } write_24c02_8(6,0,password); delay_1ms(300); beep=0; delay_1ms(2000); beep=1; } clear_shuzu(password_xg); clear_shuzu(dis_smg); write_string(1,0,"PasswordLock"); write_string(2,0,"Input:"); lcd1602_guanbiao(1,7+0x40);//开光标 menu_1=0; menu_i=0; } } }/******************主程序**********************/ voidmain(){ staticuintvalue; password_chushifa(); time_init();//定时器初始化 read_24c02_8(6,0,password); init_1602(); beiguan=0; while(1) { if(flag_password_cichu1<3)//错误三次按键不能用了 { key(); //按键函数 if(key_can<20) { if(beiguan==0) { if(menu_1==0) key_with(); //按键处理函数 xiugai_password();//修改密码 } else beiguan=0; flag_time=0; } } if(flag_200ms==1) { flag_200ms=0; if(beiguan==0) //延时关闭锁20秒关闭背光 { flag_time++;// write_sfm2(2,10,flag_time); if(flag_time>=5*30) //30秒 { flag_time=0; beiguan=1; //关闭背光 } } if(relay==0)//延时关闭锁 { flag_guan++; if(flag_guan>=5*10) //10秒 { flag_guan=0; relay=1;//关闭密码锁 } }else flag_guan=0; if(flag_password_cichu1>=3) { value++; //200ms beep=~beep;//蜂鸣器报警 if(value>=5*60) //1分钟 { value=0; beep=1; flag_password_cichu1=0; } } password_return(); //密码还原 } delay_1ms(1); }}/*************定时器0中断服务程序***************/voidtime0_int()interrupt1{ staticucharvalue; TH0=0x3c; TL0=0xb0;//50ms 12Mvalue++; if(value%4==0) { flag_200ms=1; } }#ifndef_LCD1602_H_#define_LCD1602_H_#definedata_1602P0ucharcodetable_num[]="0123456789abcdefg";sbitrs=P2^5; //寄存器选择信号H:数据寄存器 L:指令寄存器sbitrw=P2^6; //寄存器选择信号H:数据寄存器 L:指令寄存器sbite=P2^7; //片选信号下降沿触发/***********************延时函数************************/voiddelay_uint(uintq){ while(q--);}/***********************lcd1602写命令函数************************/voidwrite_com(ucharcom){ e=0; rs=0; rw=0; P0=com; delay_uint(3); e=1; delay_uint(25); e=0;}/***********************lcd1602写数据函数****************

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论