1、DESIGN INTRODUCTION电子密码锁设计 0 基于单片机的电子密码锁第 1 章 绪论1.1 背景随着社会物质财富的日益增长,安全防盗已成为社会问题。而锁自古以来就是把守门户的铁将军,人们对它要求甚高,既要安全可靠地防盗,又要使用方便,这也是制锁者长期以来研制的主题。目前国内,大部分人使用的还是传统的机械锁。然而,眼下假冒伪劣的机械锁泛滥成灾,互开率非常之高。所谓互开率,是各种锁具的一个技术质量标准,也就是1把钥匙能开几把锁的比率。经国家工商局、国家内贸局、中国消协等部门对锁具市场的调查,发现个别产品的互开率居然超标26倍。为何弹子锁的“互开率”会如此之高?据有关专家人士剖析,弹子锁
2、质量好坏主要取决于弹子数量的多少以及弹子的大小,而弹子的多少和大小受一定条件的限制。此外,即使是一把质量过关的机械锁,通过急开锁,甚至可以在不损坏锁的前提下将锁打开。机械锁的这些弊端为一种新型的锁-电子密码锁,提供了发展的空间。1.2 电子锁电子锁是采取电子电路控制,以电磁铁或者卫星电机和锁体作为执行装置的机电一体化锁具,相比传统的机械锁具,电子锁不使用金属钥匙,保密性、精度都有很大提高。 电子锁的发明思路,源自古代发明的自动机械,例如古希腊数学家赫伦的液压自动门,中国古代诸葛亮的木牛流马,它们以重力或蒸汽压力驱动,最广泛的用途乃是用在古代墓道的地下机关。电子工业的诞生,使得以微小电量驱动机械
3、成为可能,于是有了电子锁一日千里的跃进。1.3 电子密码锁的特点电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的电子密码锁是以芯片为核心,通过编程电子密码锁设计 1 来实现的。其性能和安全性已大大超过了机械锁,主要特点如下:1保密性好,编码量多,远远大于弹子锁。随机开锁成功率几乎为零。2密码可变。 用户可以经常更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。3误码输入保护。当输入密码多次错误时,报警系统自动启动,防止试探密码。1.4 电子密
4、码锁的发展趋势从目前的技术水平和市场认可程度看,使用最为广泛的是键盘式电子密码锁,该产品主要应用于保险箱、保险柜和金库,还有一部分应用于保管箱和运钞车。键盘式电子密码在键盘上输入,与打电话差不多,因而易于掌握,其突出优点是“密码”是记在被授权人脑子里的数字和字符,既准确又可靠,不会丢失(除了忘记) ,难以被窃(除非自己泄露) 。但是密码不能太简单,太简单了就容易被他人在键盘上试探出来,或者可能被旁观者窥测出来,造成保密性不足。当然,密码又不能太复杂,太复杂了可能自己都糊涂了,或者输入密码操作成功率低,造成使用不便。因此,为了发扬优点、克服弱点,键盘式电子密码也在不断发展中,如“任意设定密码”技
5、术使得被授权人可以根据自己的需要或喜好设定密码,常用常新;而“自动更改密码”技术使得本次输入的密码将自动更改成下次应输入的密码,更改的规律不为他人所知,因而不怕旁观者窥测;独出心裁的“键盘乱序显示”技术使得键盘上的固定键位每次显示出的字符不固定,并且显示的窄小角度只能由操作者正面看得到,因而即使旁观者看见操作动作也难以窥测出密码;“多重密码设定”技术使得单组密码不一定有效,适合多人分权使用,需要输入两组以上的密码才被认可,大大提高了保密性,如果限定输入这些密码的先后顺序或时间区段,则保密性还可提高。在输入密码的过程中,为了限制试探密码的企图,通常输入错误码若干次或若干时间内输入不正确,即“封锁
6、”键盘,不再接受输入操作。总之,尽管新式电子防盗锁层出不穷,但键盘式电子密码防盗锁不仅在市场上居于主流地位,而且,还经常作为其他类型电子防盗锁的辅助输入手段。电子密码锁设计 2 第 2 章 系统总体设计系统结构P89V51RB2数码管蜂鸣器LED44 键盘复位电路图 212.2 系统组成如图 21 所示系统主要由 P89V51RB2(51 系列)、一位数码管、蜂鸣器、LED、44 矩阵键盘、复位电路等组成。2.3 系统可行性分析系统工作原理分析:使用 P89V51RB2 单片机、44 矩阵键盘、LED、蜂鸣器等。矩阵键盘分别为 0、1、2、3、4、5、6、7、8、9、Enter。共 4 位密码
7、,每位的取值范电源电子密码锁设计 3 围为 09。用户可以自行设定和修改密码。当密码输入正确时,用一个发光二极管和蜂鸣器作为指示。若键入的 4 位密码不完全正确,则蜂鸣器就是想起,进行提示。开锁密码错 3 次就会锁定键盘,锁定时间为一分钟。第 3 章 硬件电路设计3.1 单片机 P89V51RB2 简介P89V51RB2 是一款增强型 80C51 微控制器,包含 16KB 的 Flash 程序存储器和 1024个字节的数据 RAM。P89V51RB2 的典型特性是它的 X2 方式选项。利用该特性,用户可以编写的应用程序以传统的 80C51 时钟频率或 X2 方式的时钟频率运行,选择 X2 方式
8、可在相同时钟频率下获得 2 倍的执行速度,这样还可以极大地降低电磁干扰。Flash 程序存储器支持并行编程和 ISP 编程。并行编程方式提供了高速的分组编程方式,可节省编程成本和上市时间。ISP 编程方式不需要专用烧录器、所需外围电路简单、可靠性强,近年来得到了广泛的应用。目前,许多新型的单片机均具有此功能。P89V51RB2 也可以采用在应用中编程,允许随时对 Flash 程序存储器重新配置,即使是应用程序正在运行也不例外。3.1.1 主要特性 80C51 核心处理单元; 5V 的工作电压,操作频率为 040MHz; 具有 ISP 和 IAP 功能; 通过软件或 ISP 选择支持 12 时钟
9、(默认)或 6 时钟的工作模式; SPI(串行外围接口)和增强型 UART; PCA(可编程技术器陈列),具有 PWM 和捕获/比较功能; 4 个 8 位 I/O 口,含有 3 个高电流 P1 口(每个 I/O 口的电流为 16mA); 3 个 16 位定时器/计数器; 可编程看门狗定时器(WDT); 8 个中断源,4 个中断优先级; 2 个 DPTR 寄存器; 低 EMI 方式(ALE 禁能); 兼容 TTL 和 CMOS 逻辑电平; 掉电检测及低功耗模式;电子密码锁设计 4 3.1.2 功能框图和管脚1. 功能框图电子密码锁设计 5 2. 管脚管脚符号DIP40 TQFP44 PLCC44
10、类型描述P0.0P0.7 3932 3730 4336 I/O P0 口:P0 口是一个 8 位漏级开路双向 I/O 口,写入“1”时 P0 口悬浮,可用作高阻态输入。当访问外部程序数据存储器时,P0 口为低位地址和数据总线。应用中 P0 口利用内部上拉来发送“1”电平,P0 口可在外部主机模式编程过程中接收代码字节可在外不主机模式校验过程中发送代码字节。P0口用作程序校验或通用 I/O 口时用均需连接一个外部上拉电阻。P1.0P1.7 18 4044,13 29 I/O带内部上拉P1 口:P1 口是一个带内部上拉的8 位双向口,写入“1”时 P1 口被内部上拉拉高,可用作输入。用作输入时,由
11、于内部上拉的存在,P1口被外部器件拉低时将吸收电流。此外,P1.5,P1.6,P1.7 还有 16mA 的高电流驱动能力。在外部主机模式编程和校验中,P1 口也可接收低位地址字节。P1.0 1 40 2 I/O T2:定时器/计数器 2 的外部计数输入或时钟输出。P1.1 2 41 3 I T2EX:定时器/计数器 2 捕获/重装触发和方向控制。P1.2 3 42 4 I ECI:外部时钟输入,PCA 的外部时钟输入。P1.3 4 43 5 I/O CEX0:PCA 模块 0 的捕获/比较外部 I/O 口。每个捕获/比较模块连接一个 P1 口用作外部 I/O 口该线不被PCA 占用时仍可作标准
12、 I/O 口。P1.4 5 44 6 I/O /SS:SPI 从机选择输入。CEX1:PCA 模块 1 的捕获/比较外部 I/O 口。电子密码锁设计 6 P1.5 6 1 7 I/O MOS1: SPI 主机输出从机输入端。CEX2:PCA 模块 2 的捕获/比较外部 I/O 口。P1.6 7 2 8 I/O MOS0: SPI 主机输入从机输出端。CEX3:PCA 模块 3 的捕获/比较外部 I/O 口。P1.7 8 3 9 I/O SCK:SPI 主机输出从机输入端。CEX4:PCA 模块 4 的捕获/比较外部 I/O 口。P2.0P2.7 2128 1825 2431 I/O带内部上拉P
13、2 口:P2 口是一个带内部上拉的 8 位双向口。写入1时 P2 口被内部上拉拉高,可用作输入。用作输出时,由于内部上拉的存在,P2 口被外部器件拉低时将吸收电流。在取指外部程序存储器或访问 16 位地址(MOVXDPTR)的外部数据存储器时,P2 口发送高位地址。应用中 P2 口利用强内部上拉来发送1。在外部主机模式编程和校验中,P2 口可接收一些控制信号和部分高地址位。P3.0P3.7 1017 5,713 11,1319 I/O带内部上拉P3 口:P3 口是一个带内部上拉的8 位双向口。写入1时 P3 口被内部上拉拉高,可用作输入。用作输出时,由于内部上拉的存在,P3口被外部器件拉低时将
14、吸收电流。在外部主机模式编程和校验中,P3口可接收一些控制信号和部分高地址位。P3.0 10 5 11 I RxD:串口输入。P3.1 11 7 13 O TxD:串口输出。P3.2 12 8 14 I INT0:外部中断 0 输入。P3.3 13 9 15 I INT1:外部中断 1 输入。P3.4 14 10 16 I T0:定时器/计数器 0 的外部计数输入。电子密码锁设计 7 P3.5 15 11 17 I T1:定时器/计数器 1 的外部计数输入。P3.6 16 12 18 O WR:外部数据存储器写选通信号。P3.7 17 13 19 O RD:外部数据存储器读选通信号。PSEN
15、29 26 32 I/O 程序选通使能:PSEN 是外部程序存储器的读选通信号。PSEN 在执行内部程序存储器的程序时无效(高电平) ,执行外部程序存储器时每个机器周期内两次有效,但当访问外部数据存储器时两个有效PSEN 脉冲将被跳过。当 RST 输入引脚的高电平时间大于 10 个机器周期时,向 PSEN 脚强制输入一个高电平到低电平的跳变将使器件进入外部之际模式编程。RST 9 4 10 I 复位:振荡器工作时,该引脚上 2个机器周期的高电平逻辑状态将使器件复位。当 RST 输入引脚为高电平时,如果 PSEN 脚输入一个高电平到低电平你的跳变,器件将进入外部主机模式。否则进入正常工作模式。E
16、A 31 29 35 I 外部访问使能:若器件要对外部程序存储器取指,EA 就必须与 Vss相连。器件执行内部程序存储器的程序时 EA 就必须与 Vdd 相连。然而,4 个安全锁定电平可将 EA 禁用,使器件只能执行内部程序存储器的程序。EA 脚可承受 12V 的高压。ALE/PROG31 29 35 I 地址锁存使能:ALE 是一个输出信号,在访问外部存储器时将地址低字节锁存。该引脚也用作 Flash 的编程脉冲输入(PROG) 。通常,ALE 在 1/6 的振荡频率时输出,可用作外部定时或外部时钟。每次访问外部数据存储器时都有一个 ALE脉冲被跳过。但是,只要 AO 被置1,ALE 就被禁
17、用。NC - 6,17,28,39 1,12,23,34 I/O 不连电子密码锁设计 8 XTAL1 19 15 21 I 晶振 1:反相振荡放大器的输入和内部时钟发生电路的输入。XTAL2 18 14 20 O 晶振 2:反相振荡放大器的输出。Vdd 40 38 44 I 电源Vss 20 16 22 I 地3.1.3 上电复位后代码的执行过程复位后,P89V51RB2 将尝试自动执行 ISP 引导装载程序或进入 Soft ICE 模式(如果之前已通过 ISP 命令将其使能)。如果该自动执行操作在 400ms 后仍未成功,器件就开始执行用户代码。3.1.4 中断优先级和查询序列P89V51R
18、B2 单片机支持 8 个中断源,4 个中断优先级的中断结构表 1.5 汇总了支持中断的查询序列。表 1.5 中断查询序列描述 中断标志 向量地址 中断使能 中断优先级 服务优先级 掉电唤醒外部中断 0 IE0 0003H EX0 PX0/H 1(最高) 能掉电 - 004BH EB0 PB0/H 2 不能T0 TF0 000BH ET0 PT0/H 3 不能外部中断 1 IE1 0013H EX1 PX1/H 4 能T1 TF1 001BH ET1 PT1/H 5 不能PCA CF/CCFFn 0033H EC PPCH 6 不能UART/SPI TI/RI/SPIF 0023H ES PS/
19、H 7 不能T2 TF2,EXF2 002BH ET2 PT2/H 8 不能3.2 44 矩阵键盘如图所示,本系统采用 44 矩阵键盘,16 个按键分为输入数字键:0、1、2、3、4、5、6、7、8、9;功能键 cel、Enter。矩阵键盘。电子密码锁设计 9 图 323.3 复位电路图 33时钟电路工作后,在 REST 管脚上加两个机器周期的高电平,芯片内部开始进行初始复位(如图 33) 。3.4 振荡电路电子密码锁设计 10 图 34本设计晶振选择频率为 12MHZ,电容选择 30pF 如图(34)。经计算得单片机工作胡机器周期为:12(112M)=1us。3.5 数码管图 35本设计采用
20、一个 1 位 8 段共阴极数码管。电子密码锁设计 11 3.6 电子锁控制电路图 33.7 蜂鸣器图 39由于蜂鸣器使用 P0 口驱动要加上上拉电阻如图 39。电子密码锁设计 12 3.8 完整电路图图 39电子密码锁设计 13 3.10 使用到的元器件列表元器件 规格/型号 数量一位八段共阴数码管 1发光二极管 红色 1三极管 PNP 8三极管 NPN 1电阻 320 8电阻 2k 电阻 1k 3继电器开关 1蜂鸣器 1单片机 P89V51RB2 1按钮 12表 31电子密码锁设计 14 第 4 章 软件程序设计本系统程序部分使用 C 语言编写,C 语言是一种高级程序设计语言,它的优点是简洁
21、明了、可移植性高。4.1 软件设计流程图主程序设计流程图如图4-1所示。NYV N Y图4-1主程序流程图开始初始化密码正确 输入旧密码出错警报响开锁 原密码相同设新密码返回开锁 修改电子密码锁设计 15 4.2 显示功能本系统使用共阴极数码管显示(如图 35)。选用 P0 口输出高电平有效。显示原理如下图及下表:图 4 表 4显示方式分别有静态显示与动态显示两种。静态显示应用在输入密码时数码管的显示进行输入密码操作时,每输入一位密码数码管显示一个“”。本次课程设计,根据设计要求可知,其显示方式为静态显示。如子程序 input_view():void input_view(void) /k 为
22、判断输入第几位的变量switch(k)case 0:P0=0X3F;/显示 “0”case 1:P0=0X06;/显示 “1”case 2:P0=0X5B;/显示 “2”case 3:P0=0X4F;/显示 “3”case 4:P0=0X66;/显示 “4”case 5:P0=0X6D;/显示 “5”case 6:P0=0X7D;/显示 “6”case 7:P0=0X07;/显示 “7”case 8:P0=0X7F;/显示 “8”case 9:P0=0X6F;/显示 “9”1 位数码管上的管脚 单片机输出管脚a 1 P0.0b 2 P0.1c 3 P0.2d 4 P0.3e 5 P0.4f 6
23、 P0.5g 7 P0.6dp 8 P0.7电子密码锁设计 16 4.2.4 键盘扫描如图 3-2,本系统使用 44 矩阵键盘当没有键按下时,行线和列线之间是不相连的,若第 N 行与第 M 列的键被按下,那么第 N 行与第 M 列的线就被接通。根据上述原理,本系统的键盘扫描方法是利用 P0 口的低四位作为行扫描线,P0 口的高四位作为列回扫线。具体实施方法为:先使 P0.0 口输出低电平,P0 口其他口输出高电平,然后对 P0.4、P0.5、P0.6、P0.7 四个口分别作判断。若此四口都为高电平,则没有键按下;若有键按下,P0.4、P0.5、P0.6、P0.7 四个口必定有一个口输入为低电平
24、,再判断 P0.4、P0.5、P0.6、P0.7 哪个口为低电平则可判断按键在哪列上。如P0.4、P0.5、P0.6、P0.7 没有低电平,再使 P0.1 为低电平,其他口为高电平,依次扫描下去,找到按键所在的行,再判断 P0 口的高四位哪一位为低,便可知道键在哪一列上。4.2.5 修改密码本系统设定的修改密码过程为,在输入正确的密码后,按 Enter,此时提示输入旧密码,输入正确的旧密码后,可以输入新密码。此时键入的六位新密码将保存到数组check6中。然后显示器提示再次输入,输入完毕后,第二次输入的密码将保存在check26中,然后将 check6中六位分别与 check26中的六位比对,
25、若两次密码输入一直,即将新的密码,也就是 check26和 check26中的六位赋值到 PASSWORD6中。此时修改密码工作完成,系统将跳翻到开始,即提示输入密码。电子密码锁设计 17 第 5 章 结束语及展望通过这次课程设计,让我复习了很多学过的旧知识,同时锻炼了自己的动手能力和查阅资料,更使我认识到团队合作的重要性。1、 通过这次的设计,我熟悉了使用 Protel 的技巧,学会了制作电路板的一些技巧。2、 在设计中,我学到了如何使用 C 语言对单片机进行编写程序,熟悉了使用KEIL C 软件,并且加深了对单片机的编程技巧。3、 在做这个设计的过程中,我遇到了不少的问题。这锻炼了我筛选、
26、查阅资料,并将理论结合到自己的设计中的能力。一步一步的排除故障原因,找到故障的原因并解决故障。4、 这次的设计使我对模拟电子、数字电子知识加深了了解,尤其是在对电路进行调试的时候,出现了很多这些方面的问题,通过对以往知识的复习巩固,将问题解决。参考文献 18 致 谢在本次设计完成之际,在这里要感谢李老师在设计中对我的指导、帮助。感谢在本次设计中给予我帮助的同学。第 7 章 参考文献1 钟启仁 编著。HT46xx 单片机原理与实践。北京航空航天大学出版社, 2008.92 彭为 黄科 雷道仲 编著。单片机典型系统设计。电子工业出版社,2006.53 江志红 编著。51 单片机技术与应用系统开发。
27、清华大学出版社,2008.124 潘勇雄 编著。新编单片机原理与应用。西安电子科技大学出版社,2007.25 李钟实。实用电子报警器精选百例M。北京:科技技术文献出版社,20026 刘坤 宋戈 等编著。51 单片机 C 语言应用开发技术大全。人民邮电出版社,2008.9附 录 19 附 录电子密码锁源程序:# include typedef unsigned char uchar;typedef unsigned int uint;# define BLANKCHAR 10# define PCHAR 11# define OPENCHAR 12# define ALARMCHAR 13# d
28、efine LINECHAR 14# define BACKKEY 0x0C# define ENTERKEY 0x0A# define LOCKKEY 0x0B# define NO_KEY 20# define KEYPORT P2uchar code KEYCODE= 0x76,0x75,0x73,0x6E,0x6D,0x6B,0x5E,0x5D,0x5B,0x3E,0x3D,0x3B ;uchar KeyPre, PassPosi;uchar KeyUp;#define LEDPORT P0uchar code SEGCODE= 0x3F,0x06,0x5B,0x4F,0x66,0x6
29、D,0x7D,0x07,0x7F,0x6F,0x00,0x73,0x70,0x77,0x40 ;uchar DispBuf6;bit DispNormal;uchar DispCnt;# define SHORT_TIME 10# define LONG_TIME 100# define LONGER_TIME 9000sbit ALARMCON=P33;bit AlarmEnable;uint AlarmTime;sbit LOCKCON=P35;uchar code PassWord=1,2,3,4,5;uchar PassInBuf6;uchar PassPosi;bit TimerBi
30、t;uchar SysMode;uchar ErrorCnt;附 录 20 /123void Fill_Buf(uchar FillChar)uchar i;for(i=0;i1)PassPosi-;Sys_Speaker(SHORT_TIME);break;case ENTERKEY:for (i=0;i=5)Fill_Buf_O();PassPosi=1;LOCKCON=1;ErrorCnt=0;Sys_Speaker(LONG_TIME);SysMode=2;elseErrorCnt+;if(ErrorCnt2)ErrorCnt=0;Fill_Buf_A();PassPosi=1;Sys
31、_Speaker(LONGER_TIME);SysMode=1;elseFill_Buf_P();PassPosi=1;Sys_Speaker(LONG_TIME);附 录 25 break;case LOCKKEY:Fill_Buf_P();PassPosi=1;Sys_Speaker(SHORT_TIME);break;break;case 2:if(Key=LOCKKEY )Fill_Buf_P();PassPosi=0;LOCKCON=0;Sys_Speaker(SHORT_TIME); break;/void Ini_Timer0()TMODTMOD|=0X01;TR0=0;TH0=
32、(65536-20000)/256;TL0=(65536-20000)%256;TR0=1;ET0=1;/ void Timer0() interrupt 1TR0=0;TH0=(65536-20000)/256;TL0=(65536-20000)%256;TR0=1;TimerBit=1;/void Ini_System()附 录 26 PassPosi=1;LOCKCON=0;Ini_Timer0();Fill_Buf_P();EA=1;/void main()uchar KeyTemp;Ini_System();while (1)if (TimerBit=1)Disp_LED();Sys_Alarm();KeyTemp=Scan_Key();Key_Process(KeyTemp);TimerBit=0;