版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微控制器课程设计手册电子密码锁控制系统的设计基于单片机的电子密码锁设计摘要:作为密封装置,加在门、箱、抽屉等物体上的锁,可以用指定的钥匙打开。自古以来,锁就是一种安全,保障人们的财产安全甚至生命安全。随着人类历史的发展和对财产安全和生命安全的日益重视,各种多功能锁在世界上随处可见。人们在生活中使用的传统机械锁逐渐被安全性能更好、功能更多的电子密码锁所取代。在现代社会,电子密码锁是大家耳熟能详的名词。小区门口一般都装有电子密码锁。本文将介绍一种电子密码锁。这种锁通过识别密码来控制电路和芯片的性能。这样就可以控制锁的开闭,完成电子锁装置的任务。本设计是关于密码锁,以AT89C51单片机为核心控制目标。本设计以AT89C51单片机为控制目标核心,配合相关电路和软件程序,可实现密码输入与修改、信息显示、键盘锁定、报警系统、门禁开闭等功能。本设计中,开锁和报警都是根据密码识别,密码修改和存储是通过AT24C02串行存储器的功能来实现的。关键词:单片机、密码锁、电子锁、矩阵键盘、掉电存储目录绪论4电子密码锁简介5电子密码锁设计的背景及意义5电子密码锁的现状与发展趋势61项目设计目标62总体设计方案62.1设计理念62.2方案制定73硬件电路框图73.1MCU及其最小系统73.1.1复位电路设计83.1.2时钟电路设计93.2密码锁电路103.2.1关键电路设计103.2.2LCD显示电路113.2.4解锁机构123.2.5报警机制134编程144.1整体软件设计144.2键盘扫描子程序154.3显示模块子程序184.4掉电存储子程序194.4.1写操作模式194.4.2读操作模式204.5定时器中断子程序214.6密码输入子程序214.7报警子程序235课程设计总结236参考文献257附录25附录1通用电路原理图26附录2:电子密码锁PCB图27附件3:电子密码锁实物图27附录4:零件清单30附录五源程序列表31介绍电子密码锁介绍什么是电子密码锁?“通过输入密码来控制电路或芯片的运行,从而控制机械开关的闭合,完成开锁和上锁任务的电子产品。”-这是百度百科的解释。简单来说,电子密码锁是一种可以设置、存储、识别和显示密码等信息,以及接收和致报警信号的电子设备。 与传统机械锁相比,电子密码锁具有以下优点: (1)可以更改密码。用户可随时更改密码,确保密码锁的安全可靠。修改密码的功能也避免了人员的变动,降低了锁具的安全性,这是传统钥匙锁不具备的功能。 (2)操作简单。无论是解锁还是修改密码,只要识字的人都能直接使用,使用方法简单,不繁琐。 (3)能够报警。报警功能无疑增加了锁的安全性。 (4)无法“技术上”破解。如果不知道密码,就无法打开锁,即使是一个习惯性的小偷,也只能看着“锁”而叹息。电子密码锁设计的背景及意义现代文明社会,虽然人的道德素质越来越高,“梁上君子”、“三只手”等人的数量比旧社会大为减少,但“XXXX被盗”等新闻在某个社区,居民失去了XXXX”,我们仍然经常在报纸上看到。随着人们生活水平和自卫意识的提高,人身财产安全和人身安全问题也越来越受到关注。拥有一把能有效保障居民财产安全和人身安全的锁具越来越重要。锁的起源可以追溯到人类社会财产私有化的出现。锁具从出现到今天的高科技、信息化,已有数年的历史。经过几年的使用和研究,人们对锁具的结构和机理有了非常透彻的了解。因此,不使用钥匙开锁的方法是无穷无尽的。尤其是传统的机械锁,由于结构简单,面对习惯性的小偷,甚至可以只用一根电线直接打开,失去了保护使用者人身财产安全的意义。那么,怎样才能提高锁具的有效性,保护用户的财产安全呢?在信息化现代化的今天,锁具也应该向高精度、高安全性的智能化、信息化方向发展。自1970年代德州仪器推出第一颗单片机芯片TMS-1000以来,基于其体积小、价格低、个性突出的特点,越来越多的电子产品开始以单片机芯片为核心。控制部分。在这样的大环境下,基于单片机的电子密码锁也应运而生。这种电子密码锁是以单片机为核心,配以相应的硬件电路和软件程序,实现密码的设置、存储、识别和显示,以及接收和致报警信号等。.操作简单、安全性高、功耗低等优点。基于单片机的电子密码锁的问世,使人们自身的财产安全更加有保障,也促进了安防信息系统的发展,是安防信息系统的一大进步。基于单片机的电子密码锁的出现在一定程度上解决了用户私人财产的安全问题。然而,时代在发展,社会在进步。只有不断进步,才能适应时代发展的需要。电子密码锁虽然具有安全性高、操作简单等优点,但不如机械锁便宜。因此,市场上的主流产品仍然是机械锁。为了取代机械锁成为市场主流,电子密码锁必须不断改进和发展,使其在功能更多的同时更智能、成本更低。这就需要我们不断研究电子密码锁的设计方法和实现原理。因此,研究基于单片机的电子密码锁设计是很有必要和实用的。电子密码锁现状及发展趋势目前,与西方发达国家相比,我国的电子密码锁技术还比较落后。在西方发达国家,电子密码锁的种类已经很齐全,技术也比较先进,已经广泛应用于各个领域。在我国,电子密码锁技术仅相当于1970年代的国际水平,相对落后。1980年代以来,随着各种电子集成电路的出现,特别是单片机的问世,电子密码锁有了很大的发展。与传统的机械锁体积大、结构简单相比,电子密码锁具有体积小、可靠性高的优点。但是目前电子密码锁的价格比较高,需要电源来提供能量,所以它的使用还局限于一定的区域,尤其是在中国,各种条件使得电子密码锁暂时难以普及. 电子密码锁虽然还存在一些缺陷,但其安全性高、方便使用、智能报警等优点是传统钥匙锁无法替代的,而且随着电子信息技术的发展和各种电子设备价格的上涨不断减少,电子密码锁也将朝着低成本、多功能的方向发展。1项目设计目标本设计采用MCS-51系列单片机AT89S52作为主控芯片,结合外围电路,设计了可以实现的密码锁控制系统。2总体设计方案2.1设计思路为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的IO口,以及其控制的准确性,不仅可以实现基本的密码锁功能,还可以根据实际情况增加功率调节存储和声光提示功能需要。2.2计划制定(1)为实现密码的安全性,可采用4×4矩阵键盘任意设置用户密码,提高密码的安全性。(2)采用液晶显示单元,提高了可读性,提供了良好的人机界面。3硬件电路框图该电路由两部分组成:AT89S51单片机及其外围电路和密码锁电路。密码锁电路包括:矩阵键盘输入、液晶显示电路、报警控制电路、AT24C02掉电存储电路。其原理框图如图3-1所示。图3-1原理框图3.1MCU及其最小系统单片机的最小系统是单片机正常运行的基础。任何单片机系统的设计都是在单片机最小系统的基础上完成的。在单片机系统的物理设计中,最要解决的就是单片机的最小系统。只有保证单片机最小系统的正确性,才能保证后面其他模块的正确设计。图3-2是单片机最小系统的完整仿真图。图3-2单片机最小系统完整仿真图3.1.1复位电路设计复位是微控制器的初始化操作。当微控制器开始运行时,需要先复位。它的作用是使系统中的CPU等部件处于一定的初始状态,并从这个状态开始工作。因此,复位是一种非常重要的操作方式。但单片机本身不能自动复位,必须配合相应的外部电路来实现。复位电路采用按键级复位复位电路。当单片机已经运行时,按下复位键S再松开,复位脚RET(9脚)脚上连续出现24个振荡脉冲周期(即2个机器周期)的高电平信号会使单片机复位。也可以使RST在一段时间内为高电平,从而实现上电或开关复位的操作。如图3-3所示。图3-3复位电路3.1.2时钟电路设计时钟电路为单片机产生定时脉冲。单片机的所有操作和控制过程均由统一的定时脉冲驱动。如果单片机的时钟电路停止工作(晶振停止抖动),那么单片机也停止运行。使用外部时钟时,连接方法如下图所示。晶振XTAL1(19脚)和XTAL2(18脚)之间接一个11.0592MHZ晶振,两脚分别接一个电容到地。可以产生需要的时钟信号,电容的容量一般为几十皮法,如20PF。如图3-4所示。图3-4时钟电路3.2密码锁电路3.2.1按键电路设计为了加强密码的字符性,可以使用4×4矩阵键盘任意设置用户密码(长度为1-16位),从而提高密码的字符性,减少使用时占用的I/O口与微控制器接口。线数节省了单片机的宝贵资源。这种方法通常在按钮较多的情况下使用。示意图如图3-5所示。图3-5矩阵键盘电路每一行和每一列的交集是不一样的,而是通过一个键连接起来的。使用这种行列式矩阵结构,只需要N行行和M列行就可以组成一个N×M键的矩阵键盘。.在这种行列式矩阵键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认按键是否被按下的程序段。确认按下某个键后,下一步就是确定按下了哪个键。通常有两种方法来识别key:一种是一般的组行扫描查询方法;另一种是更快的线反转方法。在这个系统中,我们使用线反转方法。首先识别键盘上是否有按键按下,在单片机的I/O口向键盘致全扫描字,然后读取线路状态进行判断。具体方法是:将全扫描字00H输出到行线,将所有列线置低电平,然后将列线的电平状态读入累加器A。一行电池被拉低,使该行不全为1。确定键盘上的哪个键被按下,通常是在列线被拉低后,通过检查行输入状态来完成。方法是:依次向列线致一个低电平,然后检查所有行线的状态。如果都是1,则按下的按钮不在此列;如果不是全部1,则按下的按钮必须在此列中。它就是与零线相交处的那把钥匙。实现功能如图3-5所示3.2.2LCD显示电路本系统设计的显示电路是为了提示用户而设置的。由于系统有账户管理系统,使用LCD可以为用户提供更友好的人机界面,所以选用LCD1602作为显示器件。解锁时,按键盘上的解锁键后,用键盘上的数字键0-9输入密码,每按一个数字键,显示屏上会显示一个*,多少个*多少个输入数字。密码输入完成后,按确认键,如果输入密码正确,LCD显示“OK”,单片机P3.0引脚输出低电平,使三极管T2接通,电磁铁闭合,继电器开关跳动,电子密码锁打开,如果密码错误,液晶显示屏显示“你是小偷!”,P3.0输出高电平,并且电子密码锁无法打开。通过液晶显示屏,可以清楚地判断密码锁的状态。图3-6显示电路使用LCD1602可以轻松实现所有字母和符号的显示,显示功能丰富,驱动简单。它可以提高系统的安全性,使系统更加人性化和可扩展性更强。以下图片是本主题中使用的显示和提示:图3-7.1。初始化图3-7.2密码输入正确图3-7.3第一次密码输入错误图3-7.4第二次密码输入错误图3-7.5第三次密码输入错误图3-7.6更改密码图3-7.7输入新密码图3-7.8清屏3.2.3AT24C04存储电路AT24C02是AtmelCorporation生产的AT24CXX系列串行E2PROM之一。它是一种具有I2C总线接口功能的电可擦除串行存储器。AT24C02部分包含256字节,通过I2C总线接口进行操作,具有特殊的写保护功能(WP=1时为写保护)。电路如图3-8所示图3-8AT24C04存储电路3.2.4解锁机制 在基于单片机的电子密码锁设计中,用户需要输入密码,密码正确,发出开锁信号开锁。由于电磁锁在设计中用发光二极管代替,二极管的亮就表示锁已开锁,因此可以设计一个可以点亮二极管的简单电路系统来代替电磁锁的开锁机构。如图3-9所示。图3-9解锁显示电路 由于单片机的I/O口默认为高电平,二极管初始不亮,表示锁已关闭。当用户输入密码并验证正确时,发出解锁信号(使P2.4=0)。3.2.5报警机制在基于单片机的电子密码锁设计中,通过控制蜂鸣器的声音来实现系统的报警功能。 蜂鸣器是一种由直流电压供电的电子发声器。图3-10是蜂鸣器模拟的报警机制的仿真图。图3-10告警机制仿真图当P3.7端口有脉冲信号输入时,蜂鸣器SPEAKER会响起。蜂鸣器的声音频率也可以通过控制输入脉冲的频率来控制。 当用户输入的密码错误次数达到预设的警告次数时,系统调用报警子程序使蜂鸣器发出报警声,同时禁用键盘输入。3.2.6密码初始化电路密码初始化是相当于超级用户的功能电路。当用户密码忘记时,可以点击按钮初始化密码:123456。当然,你必须有一定的权限。仿真图如图3-11所示图3-11密码初始化电气仿真图4编程4.1整体软件设计根据电子密码锁的实际应用需求和应具备的功能,本设计的主程序流程图如图4-1所示。初始化初始化显示输入密码界面输入密码密码正确?开锁扫描功能键有键输入?是改密键?进行改密操作显示界面是闭锁键?进行闭锁操作YNYNNY开启定时中断次数>3?调用报警子程序YN图4-1主程序流程图基于单片机的电子密码锁设计软件设计中的主要问题是如何实现密码的键盘输入、信息显示、掉电存储以及与密码的比较处理。本设计将逐步解决这些问题。4.2键盘扫描子程序矩阵键盘扫描子程序应具备以下两个基本功能:(1)判断按键是否被按下;(2)可以判断哪个键被按下。其软件管理主要分为以下三个步骤来完成:确定是否整个键盘都按下了一个键。将所有行设为0,然后读取列值。如果该列中的值都是1,则没有按键,否则,按键。确定按下的键的位置。使用逐行扫描的方式,逐行输出0,然后读取列值。如果该列的值全为1,则表示按下了不在该行的按钮,扫描下一行。如果该列的值不全为1,则表示按下的按钮在该行中。查看key-value表,返回key-value的对应信息,从而确定每个key应该执行的功能。使用一定的算法,将按下的键的行列信息组合成一个信息,就是这个键的键值。使用相同的方法来确定每个键的键值。为key确定key值时必须使用相同的算法,计算出来的key值应该互不相同。 本设计中每个key对应的key值如表4-1所示。表4-1按键键值表键名核心价值键名核心价值10x7e90x7d20xbe00xbb30xde一个0xdb40xee乙0xeb50x7dC0x7760xbdD0xb770xdd乙0xd780xedF0xe7键盘扫描子程序的流程图如图4-2所示:YYN确定被按下的键在第二行?YN确定被按下的键在第三行?YN确定被按下的键在第四行中确定被按下的键返回对应的按键号在第一行?开始扫描键盘有键按下?YN图4-2键盘扫描程序流程图从流程图中可以看出,这个键盘识别程序是通过逐行扫描来判断一个键是否被按下,当确定某一行中某个键被按下时,再判断该行中哪个键被按下. 在本设计中,P1.0~P1.3为行输出端口,P1.4~P1.7为列输出端口。最初,P1.0~P1.3的值设置为0,P1.4~P1.7的值设置为1。CPU始终扫描P1端口。当P1的值不为0xf0时,有一个按钮被按下,否则没有按钮。被按下。 在实际应用中,为了防止按键的抖动导致按键被视为2次以上,应设计按键去抖程序,只要方法是在出现按键时延迟一段时间即可。钥匙已关闭。是否还有key关闭,如果有,key有效关闭,如果没有,key无效关闭,返回rescan。 图4-3为CPU扫描第一行键盘的程序流程图。单行键盘扫描可以查明按下键的确切位置。开始开始扫描端口YN有键闭合?延时有键闭合?查表确定按键YNI/O口初始化返回按键值结束图4-3单行键盘扫描流程图 在本设计中,每个按钮的功能与图3-5中的相同。详情请看图。4.3显示模块子程序由于设计需要能够显示密码输入界面、密码输入信息、密码正确后的提示界面、密码错误后的提示界面、密码修改相关的界面,所以使用了很多显示子程序来显示不同的内容。虽然显示子程序有很多,但是由于显示原理是一样的,我就不一一介绍每个子程序了。只要能熟练使用LCD1602的每一条指令,这些小子程序都不会出问题。下面是LCD1602从第一行第一列显示N(0<N≤16)个字符的程序流程图。开始开始调用写数据函数YN显示N个字符了吗?LCD初始化结束图4-4显示字符程序流程图 显示模块子程序主要是根据LCD1602的命令和引脚功能编写,程序逻辑比较简单。4.4掉电存储子程序掉电存储子程序是将初始密码写入AT24C04。每次复位后,单片机从AT24C04读取密码,并与输入的密码进行比较,判断输入密码的正确性。修改密码成功后,将新密码写入AT24C04,以便下次单片机复位后使用。 向下存储器模块主要涉及AT24C04的写操作模式和读操作模式。AT24C04有2种不同的写操作模式和3种不同的读操作模式。4.4.1写操作模式有两种写操作:字节写和页写。(1)字节写入。在字节写模式下,主机致(R/bit为0)启动命令和设备地址信息。主机收到AT24C04的响应信号后,致一个1~8位的字节地址,将AT24C04的地址指针写入中间。对于高于8位的地址,主机连续致两个8位字节地址写入AT24C04,主机在收到另一个来自AT24C04的响应信号后,向寻址的存储单元致数据,AT24C04再次响应,并启动主机致停止信号后进行部分数据的擦除和写入。AT24C04在部分擦除期间不响应主机的任何请求,因此两次写入操作之间应有足够的响应时间。字节写入时序如下: 地址只有8位:开始→设备地址→响应→8位字节地址→响应→数据→响应→停止 高于8位的地址:开始→设备地址→响应→高字节地址→响应→低字节地址→响应→数据→响应→停止(2)要写的页面。页写和字节写的区别在于,字节写一次只能写一个字节的数据,而页写一次可以写8或16个字节的数据。页面写入时序如下: 地址只有8位:开始→设备地址→响应→8位字节地址→响应→数据1→响应→...→数据N→响应→停止。 高于8位的地址:开始→设备地址→响应→高字节地址→响应→低字节地址→响应→数据1→响应→...→数据N→响应→停止。三种不同的读取操作模式是:读取当前地址内容(立即地址读取)、读取随机地址内容(随机地址读取)和读取顺序地址内容(顺序地址读取)。4.4.2读操作模式(1)读取当前地址内容。AT24C04的地址计数器容量为最后一个操作字节的地址加1。如果最后一次读写操作的地址为N,则读取当前地址容量的读地址应从N+1地址开始。AT24C04接收设备地址信号,I2C总线允许接收数据(R/=1),它先致一个响应信号,然后输出数据。数据输出完成后,主机发出停止信号,读操作完成。 (2)读取随机地址内容。这种读操作模式允许主机读取AT24C04的任何字节。主机将R/位设置为0,并致起始信号、AT24C04的地址和要读取的字节数据地址进行伪操作。AT24C04响应后,主机再次致启动信号和AT24C04的地址。此时,R/位设置为1时,AT24C04响应并确认信号,然后输出字节数据,最后主机以停止信号结束数据读取。 (3)读取顺序地址内容。读取顺序地址内容操作模式由立即读取或随机地址读取操作启动。AT24C04致一个8位数据后,主机产生响应信号通知AT24C04主机需要更多数据。AT24C04收到主机的响应信号后继续致数据,直到主机不致响应信号而是致停止信号,操作结束。 下面是三种不同读操作模式的时序对比: 读取当前地址:开始→读取设备地址→响应→数据→无响应→停止。 读取随机地址:开始→写入设备地址→响应→要读取的字节地址→响应→开始→读取设备地址→响应→数据→无响应→停止。读取序列地址内容:开始→写入设备地址→响应→要读取的字节地址→响应→开始→读取设备地址→响应→数据1→响应→…→数据N→无响应→停止。 本设计采用读取随机地址内容的操作方式。4.5定时器中断子程序为防止户主以外的其他人“借用”户主密码,在一段时间内(如20S)无按键按下时,应立即关闭显示屏,禁止按键输入.如果户主忘记退出系统,这样做可以避免给其他人机会。 程序中定时器0每50毫秒产生一次中断,所以每20次中断为1秒,当秒数为20时(每次有按键输入,50毫秒的运算和清零秒数为执行),关闭屏幕并禁用键盘输入。 当定时器/计数器工作在计时模式时,计时时间的计算公式为:计时时间=(216-计数初值)×计时周期 当晶振频率为12MHz时,定时器/计数器的定时周期为1µs,因此定时为50ms的定时器/计数器的初始值为:初始计数值=216—500004.6密码输入子程序从键盘输入密码时,应将输入的密码存储起来,以供与密码相关的操作(判断、修改、存储等)使用,每输入一个密码,显示器上应显示一个“*”号.图4-8是密码输入子程序的流程图。开始开始N有键输入?扫描键盘Y是数字键?输入的密码长度小于6?将输入的数放入数组在显示器上显示“*”是取消键?输入的密长度大于0?清除数组中的最后一位数清除显示器上的最后一个“*”是确认键?结束YNNNNYYYNY图4-5密码输入程序流程图输入密码时,当输入的密码位数小于6位时,每按一次数字键,将数字存入数组。当输入的密码不少于6位时,再次按数字键,程序不做任何处理,继续扫描键盘。此时,程序只有在按下OK键或取消键时才会做出相应的响应。取消键的功能是退格。当不小心输入了错误的密码时,可以退格清除错误的数字,密码的位数减一,显示屏上的“*”数字也减一。当输入的密码位数变为0,取消键不再起作用。4.7报警子程序报警子程序的原理很简单,就是当密码输入错误的次数超过规定的最大允许次数时,蜂鸣器会连续发出脉冲,使其连续响起。同时,由于CPU一直在给蜂鸣器提供脉冲,所以来不及处理密码扫描等事件,即蜂鸣器报警同时屏蔽键盘输入。图4-6学校·报警子程序流程图本设计中密码输入错误次数不得超过3次。5课程设计总结该系统由单片机系统、矩阵键盘、液晶显示器和报警系统组成。系统可以完成解锁、错误报警、超锁、修改用户密码、恢复初始密码基本密码锁定功能等功能。除了上述基本的密码锁功能外,还有语音提示等功能,还可以根据实际情况增加遥控功能。系统采用单片机控制,液晶显示,蜂鸣器提示。该系统成本低,功能强大实用。但是在系统调试的过程中,还是发现了一些问题,系统时不时出现不稳定的情况。反复调试,发现如下问题:按键效果不好,导致抖动较大,使软件去抖不彻底;另一种是单片机本身没有问题,导致系统跑偏或者卡死;由于电路板的生产,线路之间也存在干扰,系统出现错误,如液晶显示错误等。经过反复调试和修改,最好最终达到满意的程度。这个系统的设计不是太人性化。比如可以加入语音提示和远程解锁功能,可能更重要!6参考文献[1]天帆.完全手册--51单片机C语言开发详解[M].电子行业,2008[2]群芳.单片机与接口技术[M].:电子工业,2008[3]魏单片机C语言编程培训100例-基于8051+Proteus仿真[M]:电子工业2010.6[4]大明。单片机控制实训指导及综合应用实例[M].:清华大学,2004[5]齐,朱宁希.单片机应用系统设计技术——基于C51的Proteus仿真[M].:化工,2004。[6]广斌,董志诚.单片机系统实用抗干扰设计[J].[M].:人民邮电,2004[7]于昌.单片机系统设计与案例分析。[M].:电子科技大学,2007[8]朝阳.单片机MCS-51原理与应用开发教程[M].:清华大学,2009.[9]黄卫功,邓承忠,王艳。单片机原理与应用技术[M].:中国电子科技大学,2009[10]孟,何翔,斌。单片机应用系统开发综合实例[M].:清华大学,20097附录附录1通用电路原理图附录二:电子密码锁PCB图附件3:电子密码锁实物图附录四:元件清单姓名模型数量评论单片机AT89S521包括双直插式插座反抗10K6反抗2202排除9x10k1液晶显示器LM16021陶瓷电容器33pF2电解电容器10uF1按钮触摸按钮18晶体振荡器11.0592MHz1单排插针1x84引领2红绿各一直流插座1下载端口1记忆At24c021三极管1附录五源程序列表#include<reg52.h>#include<字符串.h>#include<intrins.h>#defineuchar无符号字符#defineuint无符号整数#defineLCDIOP0#definedelay4us()_nop_();_nop_();_nop_();_nop_();uchar缓冲区[6]={0};sbitsda=P3^4;sbitscl=P3^3;sbit哔=P3^7;sbit中继=P2^3;sbithuifu=P2^6;位标志=0,aa; //用户zi定时溢出标志位ucharDSY_BUFFER[16]="";ucharDSY_BUFFER1[16]="";uchar用户密码[6]={0};uchar内存[6]={0};位rs=P2^0;位rd=P2^1;sbitlcden=P2^2;sbitled=P2^4;sbitled1=P2^7;uchar码表2[]="123456";ucharcodetable[]="输入你的代码:";无效延迟(uintz){单位x,y;对于(x=z;x>0;x--)for(y=110;y>0;y--);}voiddelay() //短延时,两个机器周期,用于总线延时{;;}无效写入_(uchar){rs=0;rd=0;lcden=0;P0=;延迟(3);lcden=1;延迟(3);lcden=0;}无效write_date(uchar日期){rs=1;rd=0;lcden=0;P0=日期;延迟(3);lcden=1;延迟(3);lcden=0;}voidDisplay_String(uchar*p,uchar){uchar我;写_();对于(i=0;i<16;i++){write_date(p[i]);}}无效的init_lcd(){lcden=0;写_(0x38);写_(0x0c);写_(0x06);写_(0x01);写_(0x80);显示字符串(表,0x80);Display_String("===锁定OK!======",0xc0);}无效的开始(){sda=1;scl=1;延迟4us();sda=0;延迟4us();scl=0;}无效停止(){sda=0;scl=1;延迟4us();sda=1;延迟4us();scl=0;}voidinit() //输入{sda=1;说谎();scl=1;说谎();}}无效确认(){sda=0;scl=1;延迟4us();scl=0;sda=1;}}}无效诺亚克(){sda=1;scl=1;延迟4us();scl=0;sda=0;}}}设置recbyte(){把i,rd;rd=0x00;sda=1;对于(我=0;我<8;我++);{scl=1;rd<<=1;rd|=sda;延迟4us();scl=0;延迟4us();}}scl=0;延迟4us();返回rd;}uchar致字节(ucharwd){uchar我;位确认0;对于(i=0;i<8;i++){sda=(位)(wd&0x80);_nop_();_nop_();scl=1;延迟4us();scl=0;wd<<=1;}延迟4us();sda=1;scl=1;延迟4us();ack0=!sda;scl=0;延迟4us();返回确认0;}ucharRecstring(ucharslave,ucharsubaddr,uchar*buffer,ucharn){uchar我;开始();if(!sendbyte(slave))返回0;if(!sendbyte(subaddr))返回0;开始();if(!sendbyte(slave+1))返回0;for(i=0;i<n-1;i++){缓冲区[i]=recbyte();确认();}缓冲区[n-1]=recbyte();诺亚克();停止();返回1;}ucharSendstring(ucharslave,ucharsubaddr,uchar*buffer,ucharn){uchar我;开始();if(!sendbyte(slave))返回0;if(!sendbyte(subaddr))返回0;for(i=0;i<n;i++){if(!sendbyte(buffer[i]))返回0;}停止();返回1;}无效清除密码(){ uchar我;for(i=0;i<6;i++){用户密码[i]='';}对于(i=0;i<16;i++){DSY_BUFFER[i]='';}}ucharKeys_Scan(){uchartemp,keynum;P1=0x0F;延误(5);温度=P1^0x0F; //扫描行线值开关(温度){案例1:keynum=1;break;案例2:keynum=4;break;案例4:keynum=7;break;案例8:keynum=10;break;休息;}P1=0xF0;延误(5);温度=P1>>4^0x0f;开关(温度){案例8:keynum+=0;break;案例4:keynum+=1;break;案例2:keynum+=2;break;案例1:keynum+=12;break;休息;}延迟(600);返回键号;}无效的主要(){uchartemp,i=0,j=0,k=0,n,m=0,flay,error,ne=1;ucharIS_valid_user;继电器=1;在里面();初始化液晶显示器();延误(5);P1=0x0f;而(1){if(!huifu==1){aa=Sendstring(0xa0,1,table2,6);延误(10);aa=Recstring(0xa0,1,buffer,6);}别的aa=Recstring(0xa0,1,buffer,6);如果(P1!=0x0f){延迟(10);如果(P1!=0x0f){temp=Keys_Scan();开关(温度){案例11:温度=0;案例1:案例2:案例3:案例4:案例5:案例6:案例7:案例8:案例9:if(i<=5)//密码限制为6个字符或更多{用户密码[i]=temp;DSY_BUFFER[i]='*';Display_String(DSY_BUFFER,0xc0);我++;}休息;case19: //按F键清除位如果(我!=0){一世-;for(n=0;n<i;n++){DSY_BUFFER1[n]=temp+'*';}}Display_String(DSY_BUFFER1,0xc0);休息;case12://回车解锁for(k=0;k<6;k++){if(缓冲区[k]==(用户密码[k]+48))标志=1;别的标志=0;}如果(标志==1){ 标志=0;我=0;领导=0;//点亮LED继电器=0;//开锁清除密码();Display_String("打开成功!",0xc0);IS_valid_user=1;j=0;错误=0;}别的{j++;错误++;领导=1;//关闭LED清除密码();Display_String("错误!重试:",0xc0);写_(0xcf);write_date(0x30+j);IS_valid_user=0;}我=0;休息;case10://按Lock键锁
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市广场排水沟铺设工程合同模板
- 综合管理部工作制度与指南
- 风力发电解决方案
- 土地复垦解除书
- 婚庆公司婚礼策划档案维护策略
- 供热工程项目备案申请
- 加油站标识标牌招投标函范本
- 保险行业子公司管理模板
- 施工合同无效索赔
- 工业园区道路改造合同
- GB/T 25217.13-2019冲击地压测定、监测与防治方法第13部分:顶板深孔爆破防治方法
- GB/T 19851.15-2007中小学体育器材和场地第15部分:足球门
- GB/T 16571-2012博物馆和文物保护单位安全防范系统要求
- 机器人创新性教学平台实践与探索报告
- 六年级上册数学人教版第五单元《圆》 第1课时《圆的认识》作业设计(素材)
- 湘科版小学科学四年级上册31光与影(课件)
- 销售目标的设定与管理培训课件
- 【期末复习】概括与评析标题及角度-部编版道德与法治九年级上册
- 鲜食甜玉米高产栽培技术(“玉米”)课件
- 医美加盟模板课件
- 小学语文小课题立项申报表
评论
0/150
提交评论