找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3919|回复: 0
打印 上一主题 下一主题
收起左侧

单片机电子密码锁的设计思路资料分享给大家学习

[复制链接]
跳转到指定楼层
楼主
ID:946652 发表于 2021-6-29 12:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。电子密码锁的出现给人们带来了极大的方便,有很广阔的市场前景。现在应用较广的电子密码锁是以芯片为核,通过编程来实现的。其性能和安全性已大大超过了机械锁,特点有:保密性好,编码量多。
随机开锁成功率几乎为零。
密码可变。用户可以经常更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。
误码输入保护。当输入密码多次错误时,报警系统自动启动。
操作简单易行,一学即会。

2 总体方案设计
2.1方案的提出与论证
方案一:采用数字电路控制。
数字电路是用数字信号完成对数字量进行算术运算和逻辑运算的电路称为数字电路,或数字系统。由于它具有逻辑运算和逻辑处理功能,所以又称数字逻辑电路。现代的数字电路由半导体工艺制成的若干数字集成器件构造而成。逻辑门是数字逻辑电路的基本单元。存储器是用来存储二值数据的数字电路。
优点:
1.稳定性号。数字电路不像模拟电路那样易受噪声的干扰。
2.可靠性高。数字电路中只需分辨出信号的有与无,故电路的组件参数,可以允许有较大的变化(漂移)范围。
3.能长期存储。数字信息可以利用某种媒介,如磁带、磁盘、光盘等进行长 时期的存储。
4.便于计算机处理。数字信号的输出除了具有直观、准确的优点外,最主要的还是便于利用电子计算机来进行信息的处理。

5.便于高度集成化。由于数字电路中基本单元电路的结构比较简单,而且又允许组件有较大的分散性,这就使我们不仅可把众多的基本单元做在同一块硅片上,同时又能达到大批量生产所需要的良率。

缺点:
1.数字电路实现成本太高。
2.数字电路的灵活性较差。
3.控制的准确性较差。
方案二:以AT89S52为核心的单片机控制方案。
选用单片机AT89S52 作为本设计的核心元件,利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,实现基本的密码锁功能。在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接LCD1602显示器用于显示作用。其原理如下图2.1所示:

图2.1单片机控制密码锁原理图
2.2 方案论证选择
方案一设计简单但控制的准确性和灵活性差。方案二控制灵活准确性好且保密性强还具有扩展功能,根据现实生活的需要此次设计采用此方案二。

3 单元模块设计3.1 各单元模块电路设计
本设计以单片机 AT89C52 为控制核心,采用模块化设计,共分以下几个功能模块: 单片机最小系统、矩阵按键电路、AT24C02 密码存储电路、LCD1602 液晶显示电路、蜂鸣器模块、继电器驱动模块、 LED“模拟锁”电路组成。该密码锁主要有修改密码,存储密码等功能。
3.1.1 最小模块设计
单片机最小系统一般指晶振电路和复位电路,晶振电路一般由晶体振荡器和电容组成。本次设计晶振采用12MHz,电容采用30pF。晶振部分的原理图如图所示。复位电路,单片机的复位操作有上电自动复位和手动按键复位两种方式。手动按键复位是在电源接通的条件下,用按键操作使单片机复位,其工作原理为:复位键按下后电容C3通过按键进行放电,RST引脚变为高电平,单片机RST引脚接收到一段高电平脉冲后,会进行一次复位。松开按键后,电容充电,RST引脚电位降低。本设计中 R=100R,C=1uF。保证高电平脉冲维持2个机器周期以上。最小模块绘制结果如图所示:
图 3.1 最小模块电路
图 3.2晶振电路模块
图 3.3 复位电路模块
3.1.2 矩阵按键电路设计
本设计中采用的4*4矩阵共有16个键位,4根行线连PI口低4位,4根列线连PI口高4位。在按键未被按下时,每条行线与列线的交叉处互不相通,当莫格按键被按下后,该键所在的行线和列线连通。这样PI口的高4位和低4位中各有一位互相连通。通过行列扫描检测出这两位,即可识别出被按下的键。矩阵按键的原理图如图所示:
图 3.4 矩阵按键电路设计
3.1.3 AT24C02密码存储器电路设计
使用AT24C02保存密码,使密码在单片机掉电之后仍能保存。AT24C02只需要串行时钟SCL引脚接P3.4,串行数据哋址SDA引脚接P3.5,即可完成数据和指令的传送,比起并行传输节省I/O 目资源。SCL和SDA各需接一个10K的上拉电阳。写保护WP接地,使AT24C02 可进行正常读写。
系统初始化时,从AT24C02中读出密码信息存储到单片机中,用户修改密码后再将新密码写入AT24C02。这样即便单片机掉电,重启后仍能读取用户密码,从而达到掉电存储的目的

图 3.1.5 矩阵按键电路设计
3.1.4 LCD1602液晶显示
LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。本次实验中,因为需要显示较多的内容,所以使用了一个LCD1602液晶,用于显示密码和系统操作提示。
图 3.6 LCD1602液晶显示设计
3.1.5 蜂鸣器模块
蜂鸣器模块部分的电路如图,就是用P2.1口控制一个有源蜂鸣器发声,作为提示音或报警音。程序设定为每当识别到有一位按键被按下时,蜂鸣器发声0.1S;开锁时停顿2S发声2S,发声3次;密码错误时每次停顿0.5S发声IS,错误5 次以内时错N次发N声,错误5次及以上发声10次。
蜂鸣器有两个引脚,其中长脚为正极,短脚为负极。其发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它。由于单片机I/O引脚输出的电流较小,基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路,一般使用三极管来放大电流就可以了。本设计中使用三极管9012,P2.1口高电平时三极管截至,蜂鸣器不发声;P2.1口低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制P2.1脚的电平来使蜂鸣器发出声音和关闭。
图 3.7 蜂鸣器模块设计
3.1.6 继电器驱动模块
开锁控制电路如图,电路的功能就是在输入正确的密码后开锁。系统使用单片机P2.0引脚发出信号,经三极管放大之后,由继电器驱动电磁阀将锁打开。设计中用一个发光二极管模拟表现锁的开关,只有锁打开之后,继电器吸合至常开触电,发光二极管才会亮起;实际应用中用继电器控制开锁电路的开关。
在现代自动控制设备中,都存在电子电路(弱电)与电气电路(强电)的相互连接问题,一方面要使电子电路的控制信号能够控制电气电路的执行元件(如电动机、电磁铁、电灯等),另一方面又要为电子线路的电气电路提供良好的电隔离,以保护电子电路和工作人员的人身的安全。继电器便能完成这一桥梁作用。继电器实际上是用较小的电流去控制较大电流的一种“自动开关”,在电路中起着自动调节、安全保护、转换电路等作用。在大多数情况下,继电器就是一个电磁铁,这个电磁铁的衔铁可以闭合或断开一个、数个触点。当电磁铁的绕组中有电流通过时,衔铁被电磁铁吸引,因而就改变了触点的状态。
继电器也是感性器件,所以不能用单片机的I/O口直接控制,而且必须在三极管等控制器件上加反相保护电路。本设计中单片机通过P2.0引脚连接一只作为电子开关的PNP型三极管9012来驱动继电器,继电器的开、关完全由三极管的基极电平进行控制。当P2.0为高电平时,PNP型三极管截止,继电器不工作反之P2.0为低电平时,三极管导通,继电器得电吸合。
图 3.8 继电器驱动模块设计
3.1.7 LED“模拟锁”电路
本次设计目的是密码锁,使用 LED 的亮灭两种状态代表锁的开关状态,原理图如图:
图 3.9 LED“模拟锁”电路模块设计

4 软件设计
4.1系统主程序
主程序是整个程序运行的中心,单片机始终运行在主程序中,单片机开始运行后,对LCD1602液晶初始化,程序中用的的数据变量进行初始 化,同时读取 AT24C02 中保存的密码及密码标志位,判断是否需要密码初始化等操作。再之后,为主函数的循环部分,这个部分是单片机一致循环运行的程序,主要是矩阵按键的检测和 LCD1602 的显示刷新,关于密码的相关函数,是放在矩阵按键函数内进行处理的,因为只有我们按下按键后,去判断密码才有实际作用,因此暂未体现在主函数中。主程序流图如图4.1所示:
图4.1 主程序流程图
4.1.1 初始化及按键识别
系统的初始化包括堆栈起始地址的设定,两个定时/计数器的设定,液晶显示模式的设定,密码缓冲区的初始化,一些自定义数据空间的初始化,蜂鸣器初始化发声等操作。
如果AT24C02里没有存储密码,或者读取AT24C02失败,则载入系统初始化密码;如果AT24C02里有掉电存储的密码,则会读出该密码。
系统初始化并读取密码完成后,液晶显示"Password:”,提示用户可以输入密码。此时程序即不断测试按键,检査是否有按鍵被按下。如果有,则进行按键识别:行列扫描法识别出的键位与对应BUFF的值。
如果没有按键按下,或者按下的按键没有被识别,BUFF赋值0FFH,并跳转至按键测试。实际程序运行时,绝大部分时间都在测试按键,等待用户输入。
图4.2初始化及按键识别流程图
4.1.2 按键重复位
之所以要进行按键重定位,是因为按键识别子程序的功能只限于确认某个按键被按下,不包括确认按键的意义。识别出的按键排列不符合用户使用习惯,也不利于程序的后续处理,需要重新定位。对BUFF重新赋值,按键左3列仿照手机的9空格按键,便于用户输入密码。根据不同的按键,程序跳转至不同的程序段,进行对应按键处理,具体流程可见图4.3。
程序开始时,先驱动蜂鸣器发声0.1秒,提示用尸程序已经检测到刚才的按键。然后根据BUFF的初始值进行一系列的对比。
如果BUFF的值是0,1,2,4,5,6,8,9,D中的一个,则按鍵是属于数字噩。分别将BUFF重赋值为1,2,3,4,5,6,7,8,9,0。然后程序跳转至保存密码部分,将数字密码保存至密码缓冲区。
图4.3按键重复位流程图
4.1.3 保存密码
该程序段的功能是将密码信息保存至对应的缓冲区。程序设置了一个16字节的密码缓冲区(PS1~PS16)和一个16字节缓冲区存储正确的密码(AT1~AT16)°为便于比较,第一次输入的密码保存至PS1,第二次输入的密码保存至PS2,依此类推。后面没有输入的侧充默认值OFFH。
为保密起见,输入的密码不能在液晶显示器上显示出来,而以“*”号代替。每输入一位密码,增加一位星号,便于用户直观察觉已经输入的密码位数。
图4.4保存密码流程图
4.1.4 改密键处理
如图4.1.6可以看出,改密键的处理流程跟开锁鍵类似,都需检査密码i脚的标志位只有PSW_F被置1才可以进行改密。不同之处在于,如果密码正确,程序会将新密码第一次的标志位PS_NEW1置位,这样在下一次按确认键时,程序可以判别出此次输入的密码是新密码第一次。

图4.5 改密键处理流程图
4.2 系统相关子程序4.2.1 按键识别子程序
按键识别子程序的功能是行列扫描矩阵键盘并识别按键送入BUFF值,如图
4.2.1所示。尽管进入子程序的前提条件是按键检测子程序检测到有按键被按下,但扫描前仍再次调用按键检测子程序:因为人为按键的速度再快也会持续几十毫秒,远远低于程序的处理速度,所以若是用户正常按下按鍵,此处的按键检测子程序仍可检测到。此处调用按键检测子程序可以防止因按键抖动产生的不必要识别。
图4.6 按键识别子程序
4.2.2 液晶显示子程序
液晶显示子程序在每次更新显示内容时都会被调用,其流程如图4-2-2所示。
每次更新显示内容前,需清显示清空LCD原先的显示内容,淸屏指令的指令码为01H,即将P0口赋值01H,然后写入指令寄存器IR。
LCD1602要显示的内容是根据其控制器内置的字符码表,事先列出要显示的ASCII字符串。每次送一个字符的ASCII码入P0口,然后写入数据寄存器DR,最后将字符地址加一,LCD1602会将写入的ASCII码对应的字符依次显示出来。由于显示字符串的长度不尽相同,约定每串字符以00H结尾;程序检测到字符码为00H时,即停止写入,返回。LCD显示的内容在下次更新前会一直保持。
图4.7 液晶显示子程序
4.2.3 AT24C02子程序
AT24C02的子程序包括从AT24C02中读取信息和将信息写入AT24C02,首先介绍AT24C02的读程序。
如图4.2.3所示,单片机作为主器件,发送起始信号和要寻址的从器件的地址:因为此时即随后的发送读取地址操作都是单片机往AT24C02写入控制信息,所以R/W要置0。本设计中只用一个AT24C02,从器件地址为0,对应代码为0A0H。AT24C02接收到信号后,发送应答信号。单片机接收到应答信号后,再发送要读取信息在从器件上的地址:本设计中从0地址开始读,则送00H。再次接收到从器件的应答信号后,单片机重新发送起始信号和读模式信号,将R/W位置1,对应代码为0AIH.正式开始读取信息。本设计中需要连续读取16字节的信息,所以选择连续读方式即是单片机每接收到一字节的信息后,存入正确密码缓冲区(AT1~AT16),然后产生一个应答信号,告知AT24C02要求更多的数据。当单片机不发送应答信号而发送停止信号时表示读取结束。
图4.8 读AT24C02子程序流程图
写入AT24C02的子程序流程如图4-2-3所示。单片机发送起始信号,接着发送从器件AT24C02所在地址(OAOH)。这里与读AT24C02子程序不同的是,从开始到结束都是单片机控制AT24C02写入信息,所以R/W置1无需更改。对应地址上的从器件AT24C02接收到地址信号后发送应答信号。主器件在接收到应答信号后,发送要写入信息欲保存在从器件上的地址,本设计中从0地址开始保存,故地址为00H。单片机再次接收到从器件的应答信号后即可开始写入信息。本设计中采用字节写模式,即AT24C02在每接收一个8位字节之后响应一个应答信号,单片机在接收到应答信号后认为该字节成功写入,便准备下一字节的数据。直到所有数据发送完毕,单片机发送停止信号,结束写操作。
5 系统调试与验证5.1 系统仿真平台及功能
单片机应用系统仿真平台有两个常用的工具软件:Keil uVision4和Proteus 7.8。前者主要用于单片机C语言源程序的编辑、编译、链接以及调试;后者主要用于单片机硬件电路原理的设计以及单片机应用系统的硬、软件联合仿真调试。
1.单片机软件仿真工具Keil C51
与汇编语言相比,C 语言在功能、结构性、可读性、可维护性上都具有明显的优势,因而易学易用。用过汇编语言在使用C语言开发,体会更加深刻。Keil uVision4是美国Keil Software公司推出的51系列兼容单片机C语言软件开发系统,它具有丰富的库函数和功能强大的集成开发调试工具,全Windows界面,可以完成从工程建立和管理、编译、链接、目标代码生成、软件仿真调试等完整的开发流程。 利用Keil uVision4编译后生成的代码,在准确性和效率方面都达到了较高的水平,是单片机C语言软件开发的理想工具。尤其是在开发大型软件时更能体现高级语言的优势。
2.单片机原路图作图工具Altium Designer
Altium Designer是原Protel软件开发商Altium公司推出的一体化的电子产品开发系统,主要运行在Windows操作系统。这套软件通过把原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技术的完美融合,为设计 者提供了全新的设计解决方案,使设计者可以轻松进行设计,熟练使用这一软件使电路 设计的质量和效率大大提高。ltium Designer除了全面继承包括Protel 99SE、Protel DXP 在内的先前一系列版本的功能和优点外,还增加了许多改进和很多高端功能。该平台拓宽了板级设计的传统界面,全面集成了FPGA设计功能和SOPC设计实现功能,从而允许工程设计人员能将系统设计中的FPGA与PCB设计及嵌入式设计集成在一起。由于Altium Designer在继承先前Protel软件功能的基础上,综合了FPGA设计和嵌入式系统软件设计功能,Altium Designer对计算机的系统需求比先前的版本要高一些。
3.单片机硬件仿真工具Proteus 7.8
Proteus 7.8是英国Lab Center Electronics公司推出的用于仿真单片机及其外围设备的EDA工具软件。Proteus和Keil uVision4配合使用,可以在不需要硬件投入的情况下,完成单片机C语言应用系统的仿真开发,从而缩短实际系统的研发周期,降低开发成本。Proteus具有高级原理布图。混合模式仿真(PROSPICE)、PCB设计以及自动布线(ARES)等功能,Proteus的虚拟仿真技术(VSM)第一次真正实现了在物理原型出来之前对单片机应用系统进行设计开发和测试。
5.2 仿真调试
1.开启电路
点击proteus软件下方最左边按钮,使电路开始运行,如图5.3.1所示。图5.3.2为电路运行后状态,LCD1602液晶显示出正确密码(可以程序设计不显示),右上角显示的输入密码数字的个数。同时 LED“锁”没有亮,代表处于上锁状态。
图5.2.1电路运行指示图
图5.2.2 开启电路
2.输入错误密码
通过矩阵按键,输入数据,会显示在LCD液晶上,按C按键可以删除上个输入数字。连续输入6个数后,按“#”系统自动判断密码的对错,如图 5.3.3,输入错误密码后,会提示密码错误,并提示点击任意按键退出,返回输入密码界面,如图 5.3.4,是点击任意按键后,回到了主界面。
图 5.2.3 输入密码错误提示
3.输入正确密码
按键输入123456后,LCD液晶会显示密码正确,同时LED“锁”被打开,LED发光,如图5.3.5所示。
图5.2.5 输入正确密码提示
4.修改密码
在开锁状态下,再次输入正确的密码并按下“#”(确认)键,此时听到两声提示,输入新的六位密码并按“D”(重设)键,再重复输入一次新密码并按“D”,会听到两声提示音,表示重设密码成功,内部保存新密码并存储到AT24C02。(如两次输入的新密码不一样,则重设密码失败)。
图 5.2.6 修改密码界面
图 5.2.7 修改密码成功提示

附录1 设计原理图
附录2 设计仿真图

以上内容的Word格式文档51黑下载地址(和网页上一模一样,不含仿真与程序):
智能化电子系统设计51hei正文.docx (1.05 MB, 下载次数: 18)

评分

参与人数 1黑币 +20 收起 理由
admin + 20 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表