2、所设计的系统可以完成以下功能:密码输入正确则开锁; 密码输入错误时发出报警信号; 密码也可以根据用户的需要进行更改。 该密码锁具有设计方法合理、简单、成本低、安全实用等特点,具有一定的推广价值。 目录 1 引言。 .12 电子密码锁的特性。 23 密码锁设计方案演示。 23.1 微控制器解决方案选择。 23.2 显示电路选择。 2 3.3 输入电路选择。 23.4 供电方案。 33.5 总体设计原理框图。 34 密码锁功能单元电路设计.34.1 键盘输入模块.34.2 密码存储模块.44.3 密码锁状态显示模块.54.4 显示模块.54.5 报警模块.65 系统软件设计.65.1 系统程序流程图.65.1.1 主程序流程
3、图75.1.2 按键功能程序流程图。 85.1.3 解锁程序流程图。 85.2 软件仿真总体框图。 95.3 实验调试和测试结果。 105.3.1 实验调试。 105.3.2 测试结果。 116 结论。 127参考文献.13附录.14密码锁设计源码.141简介随着人们生活水平的提高和安全意识的加强,对安全的要求越来越高。 锁自古以来就是守门的铁将军。 人们对他们的要求很高。 它们必须安全可靠、防盗且易于使用。 这也是锁具厂商长期关注的主题。 随着电子技术的发展,出现了各种电子产品,电子密码锁就是其中之一。 据相关资料显示,电子密码锁的研究始于20世纪30年代,早已在一些特殊场所使用。这种锁是通过键盘输入的
4. 组密码完成解锁过程。 研究这种锁的初衷是为了提高锁的安全性。 由于电子锁拥有大量钥匙(密码),因此可以与机械锁配合使用,可以避免假钥匙带来的安全隐患。 电子锁只需记住一组密码,不需要携带金属钥匙。 这免去了人们携带金属钥匙的麻烦,受到越来越多的人的赞赏。 电子锁的种类有很多,例如数码锁、指纹锁、磁卡锁、IC卡锁、生物识别锁等,但比较实用的一种是按钮式电子密码锁。 20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积变得更小,更可靠,价格也更高。 它们适合在安全要求较高、需要电源提供能量的场合使用。 目前,在西方发达国家,密码锁技术还比较落后。
5、电子密码锁技术先进、品种齐全,已广泛应用于智能门禁系统中,通过多种更安全、更可靠的技术实现门禁管理。 我国密码锁的整体水平仍处于世界20世纪70年代左右。 电子密码锁的成本还是很高的。 市场仍以按钮式电子锁为主。 推出的按钮式、卡式钥匙电子锁已达到国际先进水平。 现已有国内多家工厂生产供应市场。 但我国自主研发的电子锁市场格局尚未形成,应用尚未广泛。 国内不少企业也引进了世界先进技术,发展前景十分看好。 希望通过不断努力,电子密码锁也能在我国得到广泛应用。 密码锁的设计多种多样,根据每个人的知识水平,密码锁的功能也有所不同,有的功能很强。一种常见的设计方案是由74LS112双JK触发器组成。
6.数字逻辑电路控制方案。 一种是以AT89S5为核心的单片机控制方案。 但数字电路方案原理过于简单,无法满足当前的安全要求。 因此,它经常被用在一些比较重要的应用中。 密码锁由微控制器控制。 2电子密码锁的特点是防护性好,编程量大,比机械锁大很多。 随机解锁的概率几乎为零。 密码是可变的。 用户可以经常更改密码,防止密码被盗,同时也可以避免因手动更改而造成机密性的损失。 错误代码输入保护。 当密码多次输入错误时,报警系统启动。 除了上述优点外,电子密码锁还存在断电、密码被盗等问题,稍后会介绍。 3 密码锁设计方案演示 3.1 单片机方案方案一:采用数字电路控制74LS112双JK触发器组成的数字逻辑
7、该电路作为密码锁的核心控制,将密码保存在JK触发器中,并通过比较器与输入的密码进行比较,判断结果是否一致。 采用数字电路设计的优点是设计简单,但控制精度和灵活性较差。 方案二:采用单片机作为核心控制。 选择单片机作为系统的核心部件,实现控制和处理功能。 单片机具有资源丰富、速度快、编程方便等优点。利用单片机内部的随机存储器(RAM)和只读存储器(ROM)及其管脚资源,外部液晶显示器(LCD)、键盘输入、等实现数据处理、传输和显示功能。 基本上可以实现设计指标,且单片机编程设计灵活,IO口丰富,控制准确。 它不仅可以实现基本的密码锁功能,还可以增加功率调节存储、声光提示、甚至远程控制等附加功能。 另外,单片机方便
8、箱体活动空间大。 不仅可以实现所需的功能,而且可以很大程度上扩展功能。 它还可以轻松升级系统。 因此,综合考虑后,本设计采用第二种方案。 使用单片机设计主控制电路。 3.2 显示电路选择方案一:采用LCD液晶显示 LCD具有明显的特点:功耗微、体积小、超薄轻薄、显示信息量大、字迹清晰、显示稳定美观。 LCD以点阵方式显示,对于中文显示非常方便。 但各种符号的显示需要使用控制芯片来创建字符,工作量大,占用资源多,成本高。 方案二:采用传统数码管显示数码管,具有电压低、能耗低、寿命长、对外界环境敏感度低等特点。 采用BCD编码来显示数字,程序易于编译,资源空间小。 其实际电路驱动芯片采用MAX7219芯片。 最大限度
9. 7219芯片是用于动态扫描驱动的芯片。 该芯片的特点是一颗芯片即可完成8位字数据的8位线数据的驱动,使得电路紧凑。 多芯片级联时,采用串行输入输出,可以节省CPU的数据接口和接口芯片。 该芯片功能强大,编程简单。 权衡利弊,我决定采用第二种方案来实现本系统的显示功能。 3.3 输入电路方案一:使用独立键盘按键。 这种方法直接将按键开关连接到I/O端口线上。 设计考虑精简和优化电路数量、程序和I/O端口资源。 由于剩余资源比较多,该方案具有一定的优势。 选项2:使用矩阵4*4键盘。 这种方法的优点是灵活、可编程、占用资源少。 其原理是:由按键组成的矩阵键盘的每一行、每一列线都对应一条I/O口线。 关键位置位于行线和列线的交点处。
10. 当按下某个键时,某行线会接触某列线。 只要确定哪两条线接触,即哪两条I/O口线接触,就可以确定哪个按键被触摸了。 通过连续读取线路端口线或中断来触发按键扫描。 当发现有按键按下时,将列线逐一置为低,将其他列线置为高,并读取行线端口线。 当列线拉低且行线也拉低时,判定两线交叉处的按钮被按下。 每个按键都可以通过程序分配一个功能来完成密码识别。 3.4 电源方案方案一:每个模块采用独立的稳压电源。 该方案的优点是稳定可靠,有多种成熟电路可供选择。 缺点是每个模块采用独立电源,使系统复杂,并可能影响电路。 等级。 方案二:采用单片机控制模块提供电源,系统简单; 缺点是输出功率不高。 3.5 总体设计原理框图
11、计算机主要由单片机、矩阵键盘和液晶显示器组成。 矩阵键盘用于输入数字密码并实现各种功能。 用户通过与单片机连接的矩阵键盘输入密码,然后单片机将用户输入的密码与用户保存的密码进行比较,判断密码是否正确,并发送控制的高低电平引脚连接到液晶显示电路或通过单片机。 报警电路控制开锁或报警。 系统总体框图如图1所示。 AT89C51显示模块报警电路解锁电路密码存储模块复位电路键盘输入模块图1系统结构框图各模块功能如下:(1)键盘输入模块:分为密码输入按钮和几个功能按钮,用于完成密码锁定输入功能。 (2)显示模块:用于完成系统状态显示和操作提示功能。 (3)复位电路:完成系统复位。 (4) 报警电话
12.路:用于完成密码输入错误时的报警功能。 (5)密码存储模块:用于完成断电存储功能,使修改后的密码在断电后仍能保存。 (6)开锁电路:利用继电器和发光二极管模拟开锁,完成开锁和开锁提示。 4 密码锁功能单元设计 4.1 键盘输入模块 由于本设计中使用的按键较多,不宜采用独立的按键键盘。 采用矩阵键键盘,由行和列组成。 它也被称为柱键盘。 键位于行和列的交叉点。 密码锁的密码是通过键盘输入的。 与独立按键键盘相比,节省了大量的I/O口。 本设计采用的44位键盘不仅可以完成密码的输入,还可以作为特殊功能键。 键盘上各个按键的功能是在程序设计中设定好的。 其与单片机的连接如图2所示。 图2 4*4键盘输入模块各按键功能如下: u
13、09号数字键:输入数字密码 u 开锁键:输入密码前需先按开锁键,密码才有效 u 锁定键:自动锁定电磁锁 u 重置密码:按此键可解除锁定修改密码 u 输入新密码键:输入新密码前按下,输入有效 u 保存密码键:保存修改后的密码 键盘设计不仅具有密码输入功能,还包括解锁按钮和锁定按钮,还设置写入与修改密码相关的功能键,如输入新密码、保存新密码等。各按键的功能是通过软件编程来实现的。 4.2 密码存储模块AT24C04A的1、2、3脚为3根地址线,用于确定芯片的硬件地址。 5脚和8脚分别是正极和负极电源。 引脚 8 SDL 是串行数据输入/输出。 ,数据通过该双向I2C总线串行传输,引脚6 SCK为外部中断0输入线,并且
14、连接单片机AT89C51的P3.2。 第5脚SDA为外部中断1输入端口,连接AT89C51的P3.3。 AT24C02 有一个片内地址寄存器。 每个数据字节写入或读取后,地址寄存器自动加1,以便能够读写下一个存储单元。 所有字节均在一次操作中读取,为了减少总写入时间,一次操作最多可写入 8 字节数据。 采用AT24C04A 进行密码存储的电路如图3 所示。 图3 密码存储模块 4.3 密码锁状态显示模块 图4 中的LED 用于显示密码锁的状态:开锁和关锁。 LED灯亮,表示密码输入正确,锁已打开; LED灯不亮,表示密码输入错误。 这些控制也是由程序控制的。 图4 密码锁状态显示模块 4.4 显示模块显示部分采用
15、实现LCD显示,将D0D7连接到单片机P0口的7个输出,然后通过软件编程驱动LCD显示。 当密码输入正确且开锁后,液晶屏上会显示“Unlock OK”; 如果密码不正确,LCD 上将显示“ERROR”。 电路原理图如图5所示。 图5 显示模块 4.5 报警模块蜂鸣器工作原理是有高电平驱动时发出声音。 报警部分直接连接蜂鸣器和单片机。 编程思路是开机后不发出声音。 当密码输入错误时,单片机P3.7引脚为低电平,蜂鸣器发出噪音报警。 如图6所示。 图6 报警模块 5 系统软件设计 5.1 系统程序流程图 5.1.1 主程序流程图 主程序设计流程图如图7所示。开始初始化密码,正确输入旧密码。
16、代码错误报警,解锁原密码相同,设置新密码,返回解锁修改NY NYN 图7 主程序流程图 一般设计是初始化时存储初始密码,然后设计键盘扫描程序确定是否执行解锁功能或修改密码。 如果锁被开锁,则程序设计为判断密码是否正确,即将输入的密码与最初设置的密码进行比较。 如果密码正确,则会进行解锁。 如果密码不正确,液晶显示屏会提示错误信息,并发出报警信号。 如果更改密码,锁将被解锁。 功能,程序旨在判断重置密码是否与旧密码相同。 如果相同,会提示重置。 如果与旧密码不同,则保存新密码,密码修改成功。 5.1.2 键盘功能程序流程图 按键功能程序键值=09? 键值=解锁? 键=确认? key=setting?返回密码输入程序确认程序设置程序解锁程序按键功能
17、程序流程图如图8所示。 Y NYYNN NY N 图8 键盘功能程序流程图 键盘编程是根据矩阵键盘的扫描原理进行的。 矩阵键盘的每个键都有其行值和列值。 行值和列值的组合就是识别键。 编码就是在程序初始化的时候写入对应的行列值。 在键盘扫描程序中,首先扫描行。 扫描完一行后,再扫描所有列,判断是否有按键按下。 如果按下某个键,找到该键的位置,查出该键的密码值,并确定要执行什么样的操作,是输入密码、开门还是重置密码。 5.1.3 开锁程序流程图 开锁程序流程图如图9所示。 LCD初始化,输入密码,按开锁键,报警程序确认程序,输入密码是否正确? N解锁成功返回Y。图9解锁流程图。 解锁过程取决于键盘。
18、扫描值识别输入的密码是否正确。 如果密码输入正确,则开锁成功; 如果密码输入错误,则显示错误信息并发出报警信号。 5.2 软件仿真总体框图 图10 软件仿真框图 5.3 软件调试及测试结果 5.3.1 软件调试 1. 排除硬件故障后,开始调试程序。 软件调试时,采用逐步测试、再集成测试的原则。 首先,将按键扫描程序输入到单片机开发系统中。 运行后,在开发系统上按下键盘,看显示数码管是否能显示按下的按键的键号。 2. 插入完整的程序并打开电源。 发现二极管发光时不断闪烁,肉眼无法辨别。 这是由于调用的延迟时间太短造成的。 通过延长延迟时间,可以观察发光二极管的效果。 变化; 那么当输入的位数与密码不匹配时,二极管也会亮起。 比如密码是,如果输入的是6
19、543或65432时,指示解锁的二极管会亮起,不符合要求。 因此,在密码判断子程序中添加比较指令,首先判断输入位数和密码位数,从而满足设计要求。 3、调试时发现修改密码后,第一次输入新密码时显示密码错误,但第二次输入新密码时显示正确密码,并且锁被打开了。 经过检查程序,发现原因是在程序设计时,在“确认”按键处理子程序中,没有将输入的密码位数清零。 结果,修改密码后,再次输入新密码进行验证时,密码位数不正确。 导致显示错误的密码。 4、调试时密码输入错误3次后,没有报警,但显示ERROR密码错误信息。 再次返回程序,报警处理由原来的“确认”键处理子程序移至密码验证子程序。 主要是:因为返回的是“确认”键处理,
20、标志发生变化,导致无法报警。 移动后,报警器正常工作。 软件调试完成,程序运行正常,满足设计要求。 5.3.2 测试结果如图11所示。经过硬件和软件调试,全部功能均实现。 当锁关闭时,LCD显示清晰的屏幕状态。 当输入与密码匹配时,开锁LED正常发光并驱动电磁继电器开锁。 此时液晶屏显示unLock OK!。 第一次输入错误密码后,显示ERROR1,第二次显示ERROR2,第三次显示ERROR3,闪烁10秒,驱动报警电路发出很大声的报警声。 密码验证通过且密码正确后,按重置密码键。 P1.6口输出高电平,表示此时密码正在修改。 调试使用6位密码。 增加密码的位数会使破译变得更加困难。所有秘密
21.秘密在于钥匙。 当破译密码的成本大于文件或信息的价值时,就意味着加密是有效、安全、可靠的。 相应输入46位密码后,返回解锁状态,密码更新成功。 当锁打开时,按“Enter”键后,锁再次关闭,表明锁已关闭,用户可以离开。 并且经过反复测试,测试结果正确,系统可以正确使用。 图11 仿真演示 6 结论 课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要组成部分。 是对学生实际工作能力的具体训练和检验过程。 随着科学技术的飞速发展,单片机已经成为当今计算机应用中空前活跃的领域,可以说在生活中无处不在。因此,掌握单片机的开发技术对于21世纪的大学来说是非常重要的。 。
22,。 回顾这门单片机课程设计,我的感触还是很多的。 确实,从选题到定稿,从理论到实践,整整两周的时间,可以说是苦大于甜,但我能学到很多东西。 很多东西,同时,它不仅可以巩固以前学过的知识,还可以学到很多书本上没有学过的知识。 通过这次课程设计,我了解到理论与实践相结合是非常重要的。 仅有理论知识是远远不够的。 只有将所学的理论知识与实践相结合,从理论中得出结论,才能真正服务于社会,从而提高自己的实践能力和独立思考能力。设计过程中遇到问题可以说是非常困难的。 毕竟这是我第一次做,难免会遇到各种各样的问题。 同时,我在设计过程中也发现了自己的不足。 对之前所学知识的理解还不够深入,掌握得还不够深入。
23.不够坚强。 我对微控制器汇编语言没有很好的掌握。 通过这次课程设计后,我一定会复习之前所学的知识。 本次课程设计最终顺利完成。 我在设计过程中遇到了很多编程问题。 在同学的帮助下,我终于解决了这些问题。 太感谢了! 7 参考文献1 何利民. 单片机高级教程第一版北京:北京航空航天大学出版社,20012 赵小安。 MCS-51单片机原理及应用。 天津:天津大学出版社,2001.33 李明熙. 新型电子密码锁的设计J. 机电产品开发与创新。 2004年第8期:77-794董继成。 一种新型安全单片机密码锁。电子技术。 2004年第3期:55-605 徐慧敏,宁安定 单片机接口原理与应用 第1版 北京:北京邮电大学出版社
24.、19966王维清,邱文。 精选51个单片机应用开发案例。 北京:人民邮电出版社,20077 楼然淼,李光飞. 51系列单片机设计实例。 北京:北航出版社,20038 李光地 单片机基础知识第1版 北京:北航出版社,19999 何利民从Cygnal 80C51F看8位单片机的发展 单片机与嵌入式系统应用,2002年第5期:P58附录程序源码代码 void main() uchar i = 0; uchar IIC_Password10; uchar IS_Valid_User = 0; P0=0xFF; P1=0xFF; P2=0xFF; TMOD=0x02; /
25. T0 设置为 8 位自动重载模式 TH0 = 175; TL0=175; TR0=1; /启动T0延迟MS(10); LCD_Init(); /初始化液晶屏IIC_24C04_Init(); /初始化 24C04 Display_String(Title_Text,0x00 ; P1 = 0xF0; if(P1 != 0xF0) KeyNo = K
26.eys_Scan(); / 扫描键盘获取按键号 KeyNo switch ( KeyNo ) case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: if ( i = 5 ) / 密码限制为 6 个字符 / 如果 i 为 0,则执行屏幕清除 if (i =0) Display_String( ,0x40); 用户密码i = 密钥号 + 0; 用户密码i+1 = 0; DSY_BUFFERi = *; DSY_BUFFERi+1=0; 显示字符串(DSY_B
27. UFFER,0x40); 我+; 休息; case 10: /按A解锁 if (strcmp(UserPassword,IIC_Password) = 0) LED_OPEN = 0; /点亮 LED Clear_Password(); Display_String(解锁成功!,0x40); IS_Valid_User = 1; 否则 LED_OPEN =1; /关闭 LED Clear_Password(); Display_String(错误!,0x40); IS_Valid_User = 0; 我 = 0; 休息; 情况11:/按B键锁定LE
28. D_OPEN =1; 清除密码(); Display_String(标题_文本,0x00); Display_String(,0x40); 我 = 0; IS_Valid_User = 0; 休息; case 12: /按C设置新密码/是否为合法用户提示输入新密码 if ( !IS_Valid_User ) Display_String(No Rights !,0x40); 否则我 = 0; Display_String(新密码: ,0x00); Display_String(,0x40); 休息; 案例13:
29. /按D键保存新密码 if (!IS_Valid_User) Display_String(No Rights!,0x40); 否则 SendString(0xa0, 0, 用户密码, 6); /重读刚刚写的密码 RecString(0xa0, 0, IIC_Password , 6); IIC_密码6 = 0; 我 = 0; Display_String(标题_文本,0x00); Display_String(密码已保存!,0x40); 休息; 情况14:/按E键消除所有输入i=0; 清除密码(); Display_String(,0x40); 嘟(); 延迟MS(100); P1=0xF0; 而(P1!= 0xF0); /如果按键没有释放,则等待while(P1=0xF0); /如果没有再次按下该键,则等待