毕业设计电子密码锁(基于AT89C51)
基于AT89C51的电子号码锁方案设计书
学生姓名:2B专业名称:测控技术与仪器指导教师:2B 讲师摘要随着人们的生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统机械锁由于结构简单,被撬事件屡见不鲜;电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的青睐,本课题具有实际应用价值。
本设计以单片机AT89C51作为密码锁监控装置的检测和控制核心,分为主机控制和从机执行机构(本设计重点介绍主机控制),实现钥匙信息在主机上的初步认证注册、密码信息的加密、钥匙丢失报废等功能。
根据51单片机之间的串行通信原理,这便于对密码信息的随机加密和保护。
而且采用键盘输入的电子密码锁具有较高的优势。
采用数字信号编码和二次调制方式,不仅可以实现多路信息的控制,提高信号传输的抗干扰性,减少错误动作,而且功率消耗低;反应速度快、传输效率高、工作稳定可靠等。
软件设计采用自上而下的模块化设计思想,以使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。
测试结果表明,本系统各项功能已达到本设计的所有要求。
经实验证明,该密码锁具有设计方法合理,简单易行,成本低,安全实用等特点,符合住宅、办公室用锁要求,具有推广价值。
关键词: 单片机密码锁单片机设计电子锁AbstractAs people's living standard enhancement, how to realize the family guard against theft has become a particularly prominent, the traditional mechanical lock because of its simple structure, prizing events it is often seen.。
electronic lock high because of their confidentiality, the use of flexibility good, high safety factor, by the favor of the majority of users, this paper has practical value.The design of single-chip AT89C51 as cipher lock monitoring device for the detection and control of the core, the host is divided into control and the slave actuator ( this set focuses on control of the host ), realize the key information in a host of preliminary registration, password information encryption, key loss and function. According to the51 single-chip serial communication between the principle, it is convenient for the password information random encryption and protection. And the use of keyboard input of the electronic code lock has high advantage. Digital signal encoding and the two modulation modes, which can not only realize the multiplexed information control, to improve anti-interference signal transmission, reduce the mistake action, and low power consumption。
基于AT89C51单片机的密码锁设计
基于AT89C51单片机的密码锁设计摘要:前使用的电子密码锁大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。
本系统由AT89C51单片机系统(主要是AT89C51单片机最小系统)、4×4矩阵键盘、LCD1602显示和报警系统等组成,具有设置、修改六位用户密码、超次报警、超次锁定、密码错误报警等功能(本设计由P0口控制LCD显示,密码正确显示password ok!密码错误显示password error!超过三次输入错误自动锁定。
由P1口控制矩阵键盘含有0-9数字键和A-F功能键。
)。
除上述基本的密码锁功能外,依据实际的情况还可以添加遥控功能。
本系统成本低廉,功能实用。
关键词:单片机;密码锁;单片机设计;电子锁Electronic Lock Design with 51 Serires Single Chip ControllerAbstract:At present the use of electronic locks are mostly based on microprocessor, main devices MCU, the encoder and decoder built into software.SCM system from the system(Mainly AT89C51 microcontroller minimum system), 4×4 Matrix keyboard, LCD display and alarm system, With the settings, modify the eight user password, Ultra alarm, Ultra Lock, Password error alarm and other functions(P0 port to control the design of the LCD display, Password correctly display password ok!Password error display password error! For more than three times to enter the error automatically lock. The P1 port control keyboard matrix containing the number keys 0-9 and A-F function keys). The system cost-effective, practical functionkeywords:singlechip;cryptogram lock;singlechip design; electronics lock.目录1 绪论 (1)1.1 背景 (1)1.2 电子锁 (1)1.3 电子密码锁的特点 (1)1.4 电子密码锁的的发展趋势 (1)2 总体方案 (2)2.1 系统结构 (2)2.2 总体方案比较与论证 (3)2.3各方案比较显示方案的选择 (3)3 硬件设计 (5)3.1 单片机AT89C51简介 (5)3.2 输入键盘 (5)3.3 显示部分 (6)3.4 震荡电路 (7)4 软件设计 (7)4.1 软件设计方案 (7)4.2 软件设计总流程图 (8)4.3 具体功能软件实施 (8)4.3.1 键盘扫描 (8)4.3.2 密码修改 (11)5 调试 (12)5.1 调试前的准备 (12)5.2 硬件调试 (12)5.2.1 液晶显示模块的硬件调试 (12)5.2.2 按键测试 (13)5.3 软件调试 (13)5.4 调试心得 (14)总结 (15)参考文献 (16)致谢 (17)附录 (18)附录一、硬件原理图 (18)附录二、源程序 (18)1 绪论1.1 背景随着社会物质财富的日益增长,安全防盗已成为社会问题。
基于89c51电子密码锁设计报告
目录1设计任务 (2)2设计方案 (2)2.1任务分析 (2)2.2方案设计 (2)3系统硬件设计 (4)3.1键盘电路设计 (4)3.2 LCD电路设计 (6)3.3 开锁电路设计 (7)3.4 报警电路设计 (8)4系统软件设计 (8)4.1键盘扫描程序设计 (9)4.2 LCD程序设计 (10)4.3 密码比较和报警程序设计 (12)5调试 (13)5.1 调试效果图 (13)6总结 (15)参考文献 (16)附录1:系统原理图 (18)附录2:程序清单 (20)1 设计任务根据所学课程《单片机微型计算机原理,应用及接口技术》设计一个基于89C51的电子密码锁,程序语言自行选择。
在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。
在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替了传统的机械式密码锁,电子密码锁具有安全性高、成本低、功耗低、易操作等优点。
本次基于89c51设计的电子密码锁,应具有以下基本功能:1,该电子密码锁能实现开锁功能2,该电子密码锁能实现超时报警功能3,该电子密码锁能实现修改用户密码功能2 设计方案2.1任务分析根据设计要求,电子密码锁可以有数字电路控制完成,还可以由采用一种是用以AT89S51为核心的单片机控制方案。
相比之下,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。
2.2方案设计采用一种是用以AT89S51为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制功能。
具体方案如图2.1。
图2.1单片机控制方案本方案采用一种是用以89S51为核心的单片机控制方案。
基于AT89c5单片机控制电子密码锁精品
基于AT89c5单片机控制电子密码锁精品基于AT89c51单片机控制电子密码锁目录第1章绪论 (3)1.1 课题的介绍 (3)1.2 本课题设计的研究现状 (3)第2章密码锁设计方案 (4)第3章硬件设计 (6)3.1单片机简介 (6)3.2内部时钟电路 (10)3.3 手动复位电路 (10)3.4 键盘接口电路方案的确定 (11)3.5数码管数码显示电路方案的确定 (12)3.6 CT7447介绍 (14)3.7 74L138译码器的运用 (15)3.8密码存储电路方案的确定 (17)3.9 电路原理图 (18)第4章电子密码锁软件设计 (19)4.1程序功能 (19)4.2程序框图 (19)4.3系统程序 (24)第5章软、硬件调试 (31)5.1硬件调试 (31)5.2软件调试方法 (31)第6章总结与体会 (32)附录:元器件清单 (33)参考文献 (33)基于单片机控制电子密码锁摘要根据有关资料介绍,电子密码锁的研究从上世纪30年代就开始了,在某些特殊场所就有所应用。
研究这种锁的初衷,是提高锁具的安全性,因为电子密码锁的密匙量极大,可以和机械锁配合,避免因钥匙被仿制而出现的问题。
在安全性极高的前提下,它的另一个特点——无需钥匙。
密码锁还有指纹锁、卡片锁、磁卡锁,生物锁等等。
但能谈得上实用一些或者大众化一些的还是按键式电子密码锁。
这是一种操作方式类似于按键电话机的电子锁,通过键盘上的数码按键一次输入依组密码,如果密码与内部已约定的密码相同,则输出一个信号,以驱动电磁铁或小马达将门打开,完成一个开锁过程。
本论文从电子密码锁系统的功能,硬件电路设计,软件设计分别论述这一系统。
通过使用单片机80C51作为控制核心,连接外部存储器93C46,实现密码断电保存,通过七段数码管显示,制作一种密码锁。
该锁具有开锁、解密、修改、保存密码、用户密码等基本的密码锁功能,还具有调电数码提示等功能。
关键词:单片机;密码;密码锁第1章绪论1.1课题的介绍密码锁是锁的一种,开启时用的是一系列的数字或符号。
基于AT89C51的电子密码锁源程序
uchar key_tran()
{
switch(w)
{
case 0xEE: return(tab[0]);break;
case 0xED: return(tab[1]);break;
case 0xEB: return(tab[2]);break;
LCD_write_string(" error!!!");
ErrFlag=1; // 错误标志判断
w=0xff;
while(w==0xff)
{
key_pro();
void SetCode() //进入系统设置密码
{
bit ErrFlag=1;
uchar i;
while(ErrFlag)
{
num=0;
Sendcom_1602(0x01); //清除LCD的显示内容
Sendcom_1602(0x80);//定在第一行
w=(w1|w2);
while(key!=0xf0);//等待释放按键
}
else
w=0xff;
}
/********************************************************************************************/
w=0xff;
while(w==0xff)
{
key_pro();
}
break;
}
}
}
{
Sendcom_1602(0x01); //清除LCD的显示内容
Sendcom_1602(0x80);//定在第一行
基于AT89c51密码锁设计
基于AT89c51密码锁设计密码锁的整体电路图:程序流程图:源程序:/*课程名称:电子密码锁设计设计任务:根据设定好的密码,采用按键实现6为的输入功能,当用户输入的密码正确并且是在规定的时间(普通用户要求在12s内输入正确的密码)时,锁就打开,如果输入的三次密码不正确,就发出警报声。
如果用户的时间超过40秒,电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作*/#include"reg51.h"#include"intrins.h"#define uint unsigned int#define uchar unsigned char#define ulong unsigned longsbit bj = P3^0; //定义报警sbit led_y = P3^5; //定义黄色灯sbit led_r = P3^6; //定义红色灯sbit led_g = P3^7; //定义绿色灯ulong pwd = 234567; //定义电子锁密码uint gy = 0; //定义管理员/用户(管理员为1)标识uint ss = 0; //定义上锁标识(0时表示已上锁)uint flag = 0; //定义中断函数中所用到的标识uchar sd = 1; //定义键盘锁定(1为未锁)标识uint pcw = 0; //定义密码错误次数uint bjc = 0; //定义报警次数uint jp = 0; //定义键盘扫描值uint cnt = 0; //定义中断次数uint mcnt = 0;uint cs = 0; //定义超时标识uchar key;//uchar j;//定义共阳数码管段选数组uchar code table[11] ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x08};//定义按键uchar code table1[16] = {0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};//定义储存按键值uchar table2[6];//定义短延迟函数void delay(uint n){while(n--);}//定义延迟n s函数void delayns(uint n){unsigned char a,b,c,e;for(e=n;e>0;e--)for(c=167;c>0;c--)for(b=171;b>0;b--)for(a=16;a>0;a--);_nop_(); //if Keil,require use intrins.h}//定义初始化函数void init(){uchar i,k;led_y = 0;led_r = 1;led_g = 1;bj = 1;EA = 1; //打开总中断EX1 = 1; IT1 = 1; //打开外部中断1,并设置触发方式为下降触发方式TMOD = 0X01; //设置定时器0工作方式1TH0 = (65536 - 50000)/256;TL0 = (65536 - 50000)%256; //给定时器0赋值为50msfor(i = 0;i < 6; i++){table2[i] = 10;}for(k = 0;k<8;k++){P0=0x08;P2 = k;}}//定义上锁中断函数void INT_0() interrupt 0{uchar h;ss = 0; //密码锁上锁led_g = 1;for(h = 0;h < 6; h++) //初始化table2[]为10{table2[h] = 10;}}//定义管理员/用户切换中断函数void INT_1() interrupt 2{uchar h;if(flag == 0){gy = 1; //关闭管理员指示灯led_y = 1; //关闭密码错误指示灯flag = 1;for(h = 0;h < 6; h++) //初始化table2[]为10{table2[h] = 10;}}else{gy = 0; //关闭管理员指示灯led_y = 0; //关闭密码错误指示灯flag = 0;for(h = 0;h < 6; h++) //初始化table2[]为10{table2[h] = 10;}}[1] [2] [3] [4] [5]关键字:AT89c51密码锁编辑:什么鱼引用地址:本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。
基于AT89C5的电子密码锁设计设计7806248
基于AT89C5的电子密码锁设计设计7806248基于单片机的电子密码锁设计摘要本次设计使用AT89C51实现一基于单片机的电子密码锁。
本系统由单片机系统、矩阵键盘、LED显示和报警系统组成。
系统能完成开锁、超次锁定、修改用户密码基本的密码锁的功能。
除上述基本的密码锁功能外,还具有温度显示、时间显示等功能,依据实际的情况还可以添加遥控功能。
本系统成本低廉,功能实用。
关键词:单片机AT89C51 LED显示矩阵键盘自动报警目录1引言 (1)2方案的比较与论证 (2)3系统模块电路的设计 (4)3.1系统总框图 (4)3.2系统的模块电路设计 (4)3.2..1单片机的最小系统模块 (4)3.2..2波形产生模块 (5)3.2..3键盘模块 (8)3.2..4显示模块 (9)3.2..5电源模块 (11)3.2..6温度检测模块设计 (13)3.2..7开锁电路和报警电路模块 (14)4系统的软件设计 (15)4.1软件设计思路 (15)4.2系统主流程图 (15)5总结 (16)6致谢 (18)7参考文献 (18)8附录 (19)1引言目前,最常用的锁是20世纪50年代意大利人设计的机械锁,其机构简单、使用方便、价格便宜。
但在使用中暴露了很多缺点:一是机械锁是靠金属制成的钥匙上的不同齿形与锁芯的配合来工作的。
据统计,每4000把锁中就有两把锁的钥匙齿牙相同或类似,故安全性低。
二是钥匙一旦丢失,无论谁捡到都可以将锁打开。
三是机械锁的材料大多为黄铜,质地较软,容易损坏。
四是机械锁钥匙易于复制,不适于诸如宾馆等公共场所使用。
由于人们对锁的安全性,方便性等性能有更高的要求,许多智能锁也相继问世,但这类产品的特点是针对特定指纹或有效卡,但能适用于保密要求高且仅供个别人使用的箱、柜、房间,其成本一般较高,在一定程度上限制了这类产品的普及和推广。
随着人们生活水平的提高,电子密码防盗锁作为防盗卫士的作用日趋重要。
基于at89c51密码锁毕业设计
基于at89c51密码锁毕业设计篇一:基于AT89C51密码锁毕业设计江阴职业技术学院毕业论文课题:电子密码锁的设计与仿真专业电子信息工程学生姓名顾晓涛班级 09电子(1)班学号 09030509指导教师包军卫完成日期 XX年12月16号摘要在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。
随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。
为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。
密码锁具有安全性高、成本低、功耗低、易操作等优点。
在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。
随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的智能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。
随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别、IC卡辨认)已在国内外相继面世。
但是这些产品的特点是针对特定的指纹和有效卡,只能适用于保密要求的箱、柜、门等。
而且指纹识识别器若在公共场所使用存在容易机械损坏,IC卡还存在容易丢失、损坏等特点。
加上其成本较高,一定程度上限制了这类产品的普及和推广。
鉴于目前的技术水平与市场的接收程度,电子密码锁是这类电子防盗产品的主流。
基于以上思路,本次设计使用ATMEL公司的AT89C51实现一基于单片机的电子密码锁的设计,其主要具有如下功能:(1)设置6位密码,密码通过键盘输入,若密码正确,则将锁打开。
(2)密码可以由用户自己修改设定(只支持6位密码),锁打开后才能修改密码。
基于AT89C51的电子密码锁设计_毕业设计1 精品推荐
基于单片机的电子密码锁设计摘要本次设计使用AT89C51实现一基于单片机的电子密码锁。
本系统由单片机系统、矩阵键盘、LED显示和报警系统组成。
系统能完成开锁、超次锁定、修改用户密码基本的密码锁的功能。
除上述基本的密码锁功能外,还具有温度显示、时间显示等功能,依据实际的情况还可以添加遥控功能。
本系统成本低廉,功能实用。
关键词:单片机AT89C51 LED显示矩阵键盘自动报警目录1引言 (1)2方案的比较与论证 (2)3系统模块电路的设计 (4)3.1系统总框图 (4)3.2系统的模块电路设计 (4)3.2..1单片机的最小系统模块 (4)3.2..2波形产生模块 (5)3.2..3键盘模块 (8)3.2..4显示模块 (9)3.2..5电源模块 (11)3.2..6温度检测模块设计 (13)3.2..7开锁电路和报警电路模块 (14)4系统的软件设计 (15)4.1软件设计思路 (15)4.2系统主流程图 (15)5总结 (16)6致谢 (18)7参考文献 (18)8附录 (19)1引言目前,最常用的锁是20世纪50年代意大利人设计的机械锁,其机构简单、使用方便、价格便宜。
但在使用中暴露了很多缺点:一是机械锁是靠金属制成的钥匙上的不同齿形与锁芯的配合来工作的。
据统计,每4000把锁中就有两把锁的钥匙齿牙相同或类似,故安全性低。
二是钥匙一旦丢失,无论谁捡到都可以将锁打开。
三是机械锁的材料大多为黄铜,质地较软,容易损坏。
四是机械锁钥匙易于复制,不适于诸如宾馆等公共场所使用。
由于人们对锁的安全性,方便性等性能有更高的要求,许多智能锁也相继问世,但这类产品的特点是针对特定指纹或有效卡,但能适用于保密要求高且仅供个别人使用的箱、柜、房间,其成本一般较高,在一定程度上限制了这类产品的普及和推广。
随着人们生活水平的提高,电子密码防盗锁作为防盗卫士的作用日趋重要。
电子密码防盗锁用密码代替钥匙,不但省去了佩戴钥匙的烦恼,也从根本上解决了普通门锁保密性差的缺点。
毕业设计-基于AT89C51单片机的电子密码锁的设计
毕业设计(论文)题目:电子密码锁的设计学院:电气与信息工程学院专业:电子信息工程姓名:学号: ********* 指导老师:**完成时间: 2013年5月28日摘要随着经济社会发展,人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出。
传统的机械锁,由于其构造简单,安全性能低,无法满足人们的需要。
随着电子产品向智能化和微型化的不断发展,数字密码锁作为防盗卫士的作用显得尤为重要。
而单片机以其实用,功能强大,价格低廉等功能,已成为电子产品研制和开发中首选的控制器。
本文从经济实用的角度出发,阐述一个基于单片机的液晶显示电子密码锁的设计与实现。
系统采用ATMEL公司的AT89C51单片机作为系统核心,液晶显示器LCD1602作为输出设备显示系统提示信息,4*4矩阵键盘作为输入设备,CMOS串行E2PROM存储器AT24C02作为数据存储器,配合蜂鸣器、继电器等电路构成整个系统硬件;系统软件采用C语言编写。
设计的系统液晶显示,密码修改方便,具有报警、锁定等功能,使用便捷简单,符合住宅、办公用锁需求,具有一定的实用价值。
关键词:单片机,密码锁,AT89C51,LCD1602,AT24C02AbstractWith the development of our society and the i mprovement of people’s living standard, how to ensure the family security is becoming more and more important in particular. Traditional mechanical lock is unable to meet the need of us because of its simple structure and low security. Nowadays, electronic products become smarter and smaller, electronic password anti-theft lock plays a more important role as the security guards. The MCU with its practical, strong function, low price and other functions , has become the preferred controller in electronic product research and development.This article is written from the economic perspective, elaborates the design and implementation of a LCD electronic password anti-theft lock which is based on MCU. This system is composed of AT89C51 which is designed as the core of this system, LCD1602 as the output device to display the message of this system, 4 * 4 matrix keyboard as the input device, a CMOS serial E2PROM AT24C02 as the data storage, and a buzzer, relay circuit.The software of the system is written in C language. The system displays in a LCD, it can change password easily, and has the function of alarming, locking, and so on. This system has some practical value, and it is simple and easy to use, meets the demand of residential and the need of office lock.Key Words: MCU, Password-Lock, AT89C51, LCD1602, AT24C02目录摘要 (I)Abstract ............................................................................................................................. I I 目录 ................................................................................................................................. I II 1引言 . (1)1.1课题的背景和意义 (1)1.2课题的研究现状 (1)1.3课题研究内容 (2)2 数字密码锁总体设计 (3)2.1 系统方案论证 (3)2.1.1 采用数字电路的设计方案 (3)2.1.2 采用以单片机为核心设计方案 (4)2.2 基于单片机的数字密码锁的设计原理 (5)3 系统硬件设计 (6)3.1 主要元器件介绍 (6)3.1.1 主控芯片AT89C51的的介绍 (6)3.1.2 继电器的介绍 (9)3.1.3 存储芯片AT24C02的介绍 (10)3.1.4 LCD1602显示器的介绍 (10)3.1.5 矩阵键盘模块的介绍 (11)3.2 系统硬件部分 (12)3.2.1 系统电源部分 (12)3.2.2 键盘输入部分 (13)3.2.3 密码存储部分 (14)3.2.4 显示部分 (14)3.2.5 报警部分 (15)3.2.6开锁部分 (16)4 系统软件设计 (17)4.1 系统程序流程图 (17)4.1.1主程序流程图 (17)4.1.2 键功能程序流程图 (18)4.1.3 修改密码程序流程图 (19)4.1.4 开锁程序流程图 (20)4.2 子程序举例 (21)4.2.1 按键扫描子程序 (21)4.2.2 显示子程序 (22)4.2.3 开锁子程序 (22)4.3 系统软件调试及结果 (24)4.3.1 Proteus软件介绍 (24)4.3.2 系统软件调试 (25)4.3.3 仿真结果 (25)5 硬件系统制作及调试 (29)5.1焊接注意事项 (29)5.2硬件调试问题及解决办法 (30)5.3硬件调试效果 (31)总结 (34)致谢 (35)参考文献 (36)附录 (37)附录A 电路原理图 (37)附录B 系统总体程序 (38)1引言1.1课题的背景和意义随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤为突出,传统的机械锁由于其构造简单,被撬的事件屡见不鲜。
毕业设计电子密码锁(基于AT89C51)
毕业设计电子密码锁(基于AT89C51)1000字电子密码锁是一种非接触式的密码验证系统,可用于保护门锁、保险柜等的安全。
本文将介绍一个基于AT89C51单片机的电子密码锁的设计和实现。
1. 系统设计本电子密码锁系统由输入模块、验证模块和控制模块组成。
整个系统的工作流程如下:1) 当用户输入密码时,输入模块将密码传递给验证模块;2) 验证模块将密码与预设的密码进行比较验证;3) 如果验证通过,控制模块将开启门锁;4) 如果验证失败,控制模块将不做任何操作。
具体的系统设计如下:1) 输入模块:输入模块使用12个按钮组成一个键盘,用户通过按下不同的按钮来输入数字密码。
按下按钮时,按钮会发送一个电平信号,经过一定处理之后,输入模块将会将该信号转化为数字密码,并传递给验证模块。
2) 验证模块:验证模块将用户输入的数字密码与预设的密码进行比较。
系统中有一个EEPROM芯片,用于保存预设密码。
当用户输入密码后,验证模块将从EEPROM中读取预设密码,然后与用户输入的密码进行比较验证。
如果密码匹配,验证模块会向控制模块发送一个开锁的信号。
3) 控制模块:控制模块用于控制门锁的开关。
当接收到验证模块发来的开锁信号时,控制模块将开启电子密码锁的门锁,否则应保持关闭。
2. 系统实现本系统的具体实现采用基于AT89C51单片机的架构。
下面分别从输入模块、验证模块和控制模块三个方面来介绍系统的实现。
1) 输入模块:输入模块包含一个12个按键的键盘。
在按键按下时,按键输出端的电平将发生变化,因此需要使用中断来处理。
具体的实现方法是:首先将按键输出端连接到单片机的外部中断端口。
当按键按下时,外部中断端口会触发一个中断,中断处理程序会将按下的按键号存储到一个称作“键值缓存”的变量中。
2) 验证模块:验证模块主要涉及EEPROM的读写操作。
具体地,当用户输入密码后,输入模块将用户输入的密码通过验证模块传递给控制模块。
控制模块通过读取EEPROM中的预设密码与用户输入的密码进行比较,判断是否匹配。
基于AT89C51的红外遥控密码锁系统的设计方案
基于AT89C51的红外遥控密码锁系统的设计方案1.引言目前国内外密码锁系统的主要发展方向是:接触式密码锁系统、非接触式密码锁系统、智能识别密码锁系统;但是他们都相应的存在着不同的缺点。
红外遥控密码锁系统的成本与接触式密码锁系统相当,而且可以进行近距离遥控,使用十分方便。
采用数字信号编码和二次调制方式,不仅可以实现多路信息的控制,增加遥控功能,提高信号传输的抗干扰性,减少误动作,而且功率消耗低;红外线不会向室外泄露,不会产生信号串扰;反应速度快、传输效率高、工作稳定可靠等。
工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。
所以红外线遥控是目前使用最广泛的一种通信和遥控手段。
为此本方案设计由红外接收头HS0038(红外接收频率为38khz)和AT89C51控制的接收部分构成;由红外发光二极管和AT89C51控制的发射部分来完成密码的发送过程。
设计中使用电磁继电器来代替所的功能,并且有两个LED灯来对系统的按键和开锁进行指示。
采用单片机进行遥控系统的应用设计,具有编程灵活多样,电路结构清晰。
特别适合家庭、宾馆、仓库、私家车库等场所。
2.密码锁的总体设计方案本系统采用AT89C51单片机作为本设计的核心元件,该系统由发射模块和接收模块两部分构成,遥控器发射模块可以随身携带,只要在接收器附近,即可遥控开锁。
遥控发射器主要由AT89C51单片机、红外发射二极管、矩阵键盘及遥控开关电路组成。
该部分的结构图如图1所示。
红外遥控由发送和接收两部分组成,发送端采用单片机将待发送的二进制信号编码调制为一系列的脉冲信号,通过红外发射管发射红外信号。
红外接收采用性能可靠的配套的一体化红外接收头接收红外信号,它同时对信号进行放大、检波、整形,得到TTL电平的编码信号,再送给单片机,经单片机解码并进行相关操作。
at89c51 数字密码锁
浙江长征职业技术学院毕业设计(论文)论文题目:数字密码锁的设计系别:信息系专业班级: 07电子信息工程技术学生姓名:金沛领指导教师:王芳二○一○年五月三日目录摘要 (1)引言 (2)1 密码锁的由来 (2)1.1 密码锁的定义 (2)1.2 电子密码锁的特点 (2)1.3 本设计所要实现的目标 (2)2 总体设计方案 (3)3 主要元器件介绍 (4)3.1 主控芯片AT89C51 (4)3.2 存储芯片AT24C01 (4)3.3 LED显示器 (5)4 密码锁的系统设计 (5)4.1 设计原理 (5)4.2 密码锁的控制电路 (6)4.3 密码锁的控制原理 (6)4.4 密码锁的控制程序 (7)5 系统软件设计 (11)6 设计总结 (14)参考文献 (16)致谢 (17)数字密码锁的设计【摘要】本文设计的是一种由AT89C51单片机编程控制实现的多功能密码锁。
这种电路设计具有密码输入有效提示、密码错误指示、控制开锁电平、控制报警电路、密码修改等功能,可在意外泄密的情况下及时修改密码。
8位十进制密码共一亿组不重复,保密性强,灵活性高,特别适用于家庭、办公室、学生宿舍及宾馆等场所,具有很强的社会推广价值。
【关键词】A T89S51 A T24C02 电子密码锁矩阵键盘引言锁具是源流千古的社会性用品。
随着科技、经济和社会的发展,当今社会公共安全防范系统对锁具的保密性、牢固性、可靠性、耐用性以及安装使用等提出了新的更高的要求。
日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
若使用传统的机械式钥匙开锁,人们常需携带多把钥匙,使用极不方便, 且钥匙丢失后安全性即大打折扣。
随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。
为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。
电子密码锁具有安全性高、成本低、功耗低、易操作等优点。
基于89c51电子密码锁设计
目录1设计任务 (2)2总体方案设计 (3)2.1硬件组成 (3)2.2 方案论证 (7)2.3 总体方案 (7)3硬件电路设计 (8)3.1晶振电路 (8)3.2复位电路 (9)3.3显示电路 (10)4系统设计 (13)4.1主程序设计 (13)4.2键盘子程序图 (14)4.3 密码设置软件设计 (15)4.4开锁软件设计 (16)5调试 (18)5.1 硬件调试 (18)5.2 软件调试 (18)6总结 (19)参考文献 (19)附录1:系统原理图 (24)附录2:程序清单 (25)1设计任务根据所学课程《单片机微型计算机原理,应用及接口技术》设计一个基于89C51的电子密码锁设计,程序语言自行选择。
电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。
它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。
现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。
其性能和安全性已大大超过了机械锁。
日常生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
目前门锁主要用弹子锁,其钥匙容易丢失;保险箱主要用机械密码锁,其结构较为复杂,制造精度要求高,成本高,且易出现故障,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。
针对这些锁具给人们带来的不便若使用机械式钥匙开锁,为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。
由于电子器件所限,以前开发的电子密码锁,其种类不多,保密性差,最基本的就是只依靠最简单的模拟电子开关来实现的,制作简单但很不安全,在后为多是基于EDA来实现的,其电路结构复杂,电子元件繁多,也有使用早先的20引角的2051系列单片机来实现的,但密码简单,易破解。
随着电子元件的进一步发展,电子密码锁也出现了很多的种类,功能日益强大,使用更加方便,安全保密性更强,由以前的单密码输入发展到现在的,密码加感应元件,实现了真真的电子加密,用户只有密码或电子钥匙中的一样,是打不开锁的,随着电子元件的发展及人们对保密性需求的提高出现了越来越多的电子密码锁。
AT89C51单片机电子密码锁
AT89C51单⽚机电⼦密码锁基于AT89C51单⽚机电⼦密码锁#include "main.h"/******************** LCD PART START *******************************/ //5ms延时void Delay5Ms(void){unsigned int TempCyc = 5552;while(TempCyc--);}//读状态unsigned char ReadStatusLCM(void){LCM_Data = 0xFF;LCM_RS = 0;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;Delay5Ms();while (LCM_Data & Busy); //检测忙信号return(LCM_Data);}//写数据void WriteDataLCM(unsigned char WDLCM){ReadStatusLCM(); //检测忙LCM_Data = WDLCM;LCM_RS = 1;LCM_RW = 0;LCM_E = 0; //若晶振速度太⾼可以在这后加⼩的延时LCM_E = 0; //延时LCM_E = 1;void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测{if (BuysC) ReadStatusLCM(); //根据需要检测忙LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0;LCM_E = 0;LCM_E = 0;LCM_E = 1;}//读数据unsigned char ReadDataLCM(void){LCM_RS = 1;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;return(LCM_Data);}void LCMInit(void) //LCM初始化{LCM_Data = 0;WriteCommandLCM(0x38,0); //三次显⽰模式设置,不检测忙信号Delay5Ms();WriteCommandLCM(0x38,0);Delay5Ms();WriteCommandLCM(0x38,0);Delay5Ms();WriteCommandLCM(0x38,1); //显⽰模式设置,开始要求每次检测忙信号WriteCommandLCM(0x08,1); //关闭显⽰WriteCommandLCM(0x01,1); //显⽰清屏WriteCommandLCM(0x06,1); // 显⽰光标移动设置WriteCommandLCM(0x0C,1); // 显⽰开及光标设置}void LCD_write_char(unsigned char X,unsigned char Y, unsigned char DData){Y &= 0x1;X &= 0xF; //限制X不能⼤于15,Y不能⼤于1if (Y)X |= 0x40; //当要显⽰第⼆⾏时地址码+0x40;X |= 0x80; // 算出指令码WriteCommandLCM(X, 0); //这⾥不检测忙信号,发送地址码WriteDataLCM(DData);}//按指定位置显⽰⼀串字符void LCD_write_string(unsigned char X,unsigned char Y, unsigned char code *DData) {unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; //限制X不能⼤于15,Y不能⼤于1while (*DData) //若到达字串尾则退出'\0'就是0{if (X <= 0xF) //X坐标应⼩于0xF{LCD_write_char(X,Y, *DData); //显⽰单个字符DData++;X++;}}}/************/#include#include#define uchar unsigned char#define uint unsigned int/******************** LCD PART START *******************************/void delay(uint z) //延时uint x,y;for(x=z;x>0;x--)for(y=124;y>0;y--);}sbit e=P2^5;sbit rw=P2^6;sbit sr=P2^7;uchar code name[]="zxs"; uchar code name1[]="zcf"; uchar code name2[]="zx"; void write_com(uchar com) {int rs;rs=0;P0=com;delay(5);e=1;delay(5);e=0;}void write_data(uchar date) {int rs;rs=1;P0=date;delay(5);e=1;delay(5);e=0;}void init(){e=0;rw=0;write_com(0x0c); write_com(0x06);write_com(0x01);write_com(0x80);}void display(){uchar i;for(i=0;i<3;i++){write_data(name[i]);}write_com(0x80+0x40);for(i=0;i<3;i++){write_data(name1[i]);}}void main(){init();display();}#include#define uchar unsigned charuchar starbuf[10];uchar wordbuf[8];uchar pw[8]={1,2,3,4,5,6,7,8};uchar pwbuf[8];uchar count=0; // 初始没有输⼊密码,计数器设为0 uchar inputflag=0; // 先处于密码输⼊状态,⾮密码修改状态bit enterflag=0; // 没有按下确认键bit pwflag=0; // 密码标志先置为0sbit warn=P3^6;#define lcd_data P0sbit rs=P2^7;///////////////////////LCD1602驱动程序///////////////////////void delay_1602(unsigned int i){while(i--);}void enrw(){rs=0;rw=0;e=0;delay_1602(250);e=1;}write_data(uchar c){lcd_data=c;rs=1;rw=0;e=0;delay_1602(250);e=1;}init_lcd(void)//初始化{lcd_data=0x01;//清屏幕enrw();lcd_data=0x38;//数据长度为8位,双⾏显⽰,5*7字符。
基于89C51电子密码锁设计程序
/*==================================================================== =============密码锁控制====================================================================== ============//*连接线图:---------------------------------------------------| LCM-----51 | LCM-----51|LCM------51 || ----------------------------------------------- || DB0-----P0.0 | DB4-----P0.4 | RS-------P2.0 || DB1-----P0.1 | DB5-----P0.5 | RW-------P2.1 || DB2-----P0.2 | DB6-----P0.6 | E--------P2.2 || DB3-----P0.3 | DB7-----P0.7 | VLCD接1K电阻到GND |---------------------------------------------------接口说明:1. P1口: 4x4矩阵键盘2. P2.4 工作指示灯3. P2.5 继电器控制端4. P3.7 蜂鸣器控制端5. P3.3 24c02时钟端SCL6. P3.4 24c02数据端SDA/*接盘按键说明:--------------------------------------------------| 1 | 2 | 3 | A|- - - - - - - - - - - - -| 4 | 5 | 6 | B |- - - - - - - - - - - - -| 7 | 8 | 9 | C |- - - - - - - - - - - - -| * | 0 | # | D |--------------------------------------------------[注:A T89S51使用12M晶振]==========================定义与申明=============================================================*/#include "regx52.h"#include "string.h"#include "intrins.h"#define uchar unsigned char#define uint unsigned int//*********** 引脚定义引脚#define LCM_RS P2_0 // 数据/命令选择信号#define LCM_RW P2_1 // 读/写选择信号#define LCM_E P2_2 // 使能信号#define WLED P2_4 // 工作指示灯#define REL P2_5 // 继电器#define BELL P3_7 // 蜂鸣器#define SCL P3_3 // 模拟I2C串行时钟控制#define SDA P3_4 // 模拟I2C串行数据传输#define LCM_Data P0 // 显示数据端口#define AddWr 0xa0 // "1010 0000B"器件地址选择及写标志#define AddRd 0xa1 // "1010 0001B"器件地址选择及读标志//控制字格式:/*- - - - - - - - - - -1 0 1 0 A2 A1 A0 R/W- - - - - - - - - - - *//*注:1. 前4位为I2C总线特征编码:10102. A2 A1 A0为24c02的地址3. R/W=0:表示写入;R/W=1:表示读出*///*********** 变量定义#define Busy 0x80 // 用于检测LCM状态字中的Busy标识uchar Count,num; // 计数器uint con_30m; // 30min计数器uchar con_20s; // 10s计数器bit flag,mark,sign,mark0;// 常用标志位bit flag1; // Choice_menu()调用标志bit signx; // 循环标志bit markx;//************ 数组定义uchar code O_Password[]={0x30,0x30,0x30,0x30,0x30,0x30};// 原始密码"000000" uchar data N_Password[]={0x00,0x00,0x00,0x00,0x00,0x00};// 新密码uchar data T_Password[]={0x00,0x00,0x00,0x00,0x00,0x00};// 输入密码暂存//*********** 函数声明void Start(void); // 开始总线函数void Stop(void); // 结束总线函数uchar Read(void); // 读一字节数据bit Send(uchar Data);// 发送一字节数据uchar ReadCurrent(uchar Address);// 从指定处读出一字节void WriteCurrent(uchar Data,uchar Address);// 在指定地址处写入一字节void ReadFromROM(uchar Data[],uchar Address,uchar Num);// 从指定地址读出Num个数据void WriteToROM(uchar Data[],uchar Address,uchar Num); // 从指定地址写入Num个数据uchar ReadStatusLCM(void); // 读状态void LCMInit(void); // LCM初始化void WriteDataLCM(uchar WDLCM); // 写数据void WriteCommandLCM(uchar WCLCM,BuysC); // 写指令void DisplayOneChar(uchar X, uchar Y, uchar DData); // 按指定位置显示一个字符void DisplayListChar(uchar X, uchar Y, uchar code *DData); // 按指定位置显示一串字符void PasswordComparison(bit mark);//密码比较void Scan_starnumber(void);void Delay5Ms(void); // 5ms延时void Delay400Ms(void); // 400ms延时void Delay1s(void); // 1s延时void Delay_bell(void); // 蜂鸣器发音延时void DelayMs(uchar ms); // 延时uchar Key_scan(void); // 按键扫描uchar Key_switch(void); // 按键转换函数void Choice_menu(void); // 选择菜单界面void Reset_success(void); // 复位成功提示void Pass_face(void); // 密码输入提示void Password_OK(void); // 密码输入正确提示void Welcome_face(void); // 欢迎界面void Password_ERROR(void); // 密码输入错误提示void Password_importation(void); // 密码输入void NewPassword_face(void); // 输入新密码提示void NewPassword_again(void); // 再次输入新密码提示void NewPassword_set(void); // 新密码输入void NewPassword_set_again(void); // 再次输入新密码void Newpassword_OK(void); // 新密码设置成功提示void Newpassword_ERROR(void); // 新密码设置失败提示void Newpassword_comparison(void); // 新密码设置比较void Beep(void); // 蜂鸣器发音void Led_hint(void); // LED工作指示//========================================== 主函数部分==================================================/*****************************************************函数名:void clearmen(void)功能:系统初始化说明:对系统用的标志位和定时器进行初始化入口参数:无返回值:无*****************************************************/void clearmen(void){flag1= 1; // Choice_menu()调用标志signx= 1; // 循环标志flag = 1; // 调用输入新密码提示标志位mark = 1; // 循环标志位markx= 1;num = 0; // 按键错误计数器WriteToROM(O_Password,0,6);TH0=0x3C;TL0=0xB0; // 50ms定时初值TH1=0x3C;TL1=0xB0; // 50ms定时初值TMOD=0x11;ET0=1;TR0=0;ET1=1;TR1=0;EA=1;}/*****************************************************函数名:main()功能:主函数说明:对按键和显示进行控制入口参数:无返回值:无*****************************************************/void main(void){uchar Key_value;Delay400Ms(); // 启动等待,等LCM讲入工作状态LCMInit(); // LCM初始化Delay400Ms();clearmen(); // 系统初始化while(1){P1=0xf0;if(((P1&0xf0)!=0xf0)&(flag1==1)&(num<3)) // 有键按下{Key_value=Key_switch(); // 按键扫描if(Key_value!=0) // 的确有键按下{Choice_menu(); // 调用选择程序flag1=0; // Choice_menu()调用标志signx=1; // 循环标志}while(signx==1){TR0=0; // 定时器0关,从先开始计时TR0=1; // 定时器0开P1=0xf0; // P1口赋值,从而判断有无按键if((P1&0xf0)!=0xf0){Key_value=Key_switch(); // 按键扫描if(Key_value==65) // 如果按键是"A",则输入密码{markx=1; // 显示密码输入正确或错误提示while(mark==1){Password_importation(); // 密码输入}flag1=1; // Choice_menu()调用标志signx=0; // 循环标志}if(Key_value==66) // 如果按键是"B",则输入新密码{markx=0; // 不显示密码输入正确或错误提示while(mark==1) // 输入前比较秘密,密码正确进入新密码设置{ // 密码错误退出密码设置Password_importation(); // 密码输入}//-------------------------------if(mark0!=0) // mark0=1:密码比较正确可以输入新密码{ // mark0=0:密码比较错误不能输入新密码mark=1; // 进入循环标志while(mark==1){NewPassword_set(); // 新密码设置函数}mark=1; // 进入循环标志while(mark==1){NewPassword_set_again(); // 再次输入密码}}flag1=1; // Choice_menu()调用标志signx=0; // 循环标志mark0=1;flag= 1;}if(Key_value==67) // 如果按键是"C",则密码复位{markx=0; // 不显示密码输入正确或错误提示mark=1; // 进入循环标志while(mark==1){Password_importation();}if(mark0!=0){Reset_success();Delay1s();Delay1s();WriteToROM(O_Password,0,6);sign=0;WriteCurrent((uchar)sign,10); // 存入标志位Reset_success();}}}}}else{Welcome_face(); // 欢迎界面mark = 1; // 循环标志mark0= 0; // 是否输入新密码标志位flag1=1; // Choice_menu()调用标志WriteCommandLCM(0x0C,1); // 关光标显示sign=(bit)ReadCurrent(10); // 密码比较标志位}if(num==3) // 3次输入错误密码,系统锁定30min{ET1=1;TR1=1; // 开定时器T1,定时30分钟}}}//================================================= 24c02部分函数========================================/*****************************************************函数名:void Start(void)功能:开始总线函数说明:启动I2C总线,即发送I2C起始条件入口参数:无返回值:无*****************************************************/void Start(void){SDA = 1; // 发送起始条件的数据信号SCL = 1;_nop_();_nop_();SDA = 0; // 发送起始信号_nop_(); // 起始条件锁定时间大于4us_nop_();_nop_();_nop_();SCL = 0; // 钳住I2C总线准备发送或接受数据}/***************************************************** 函数名:void Stop(void)功能:结束总线函数说明:结束I2C总线,即发送I2C结束条件入口参数:无返回值:无*****************************************************/ void Stop(void){SDA = 0; // 发送结束条件的数据信号_nop_();_nop_();SCL = 1; // 发送I2C总线结束信号_nop_(); // 结束条件锁定时间大于4us_nop_();_nop_();_nop_();SDA = 1;}/***************************************************** 函数名:bit Send(uchar Data)功能:发送一字节数据说明:向24c02中写入数据入口参数:Data返回值:无*****************************************************/ bit Send(uchar Data){uchar i;bit ack_bit;for(i = 0; i < 8; i++) // 循环移入8个位{SDA = (bit)(Data & 0x80);_nop_();SCL = 1;_nop_();_nop_();SCL = 0;Data <<= 1;}SDA = 1; // 读取应答_nop_();_nop_();SCL = 1;_nop_();_nop_();_nop_();_nop_();ack_bit = SDA;SCL = 0;return ack_bit; // 返回A T24Cxx应答位}/*****************************************************函数名:void WriteCurrent(uchar Data,uchar Address)功能:在指定地址Address处一个数据Data说明:在指定地址处写入一字节的数据入口参数:Data,Address返回值:无*****************************************************/ void WriteCurrent(uchar Data,uchar Address){Start();Send(AddWr);Send(Address);Send(Data);Stop();DelayMs(10); // 写入周期}/*****************************************************函数名:void WriteToROM(uchar Data[],uchar Address,uchar Num) 功能:在指定地址Address处写入Num个数据Data[]说明:在指定地址处写入一字节的数据入口参数:Data[],Address,Num返回值:无*****************************************************/ void WriteToROM(uchar Data[],uchar Address,uchar Num){uchar i;uchar *PData;PData=Data;for(i=0;i<Num;i++){Start();Send(AddWr);Send(Address+i);Send(*(PData+i));Stop();DelayMs(10); // 写入周期}}/***************************************************** 函数名:uchar Read(void)功能:读一字节数据说明:从24c02中读出数据入口参数:无返回值:Read_data*****************************************************/ uchar Read(void){unsigned char i,Read_data;Start();Send(AddRd);for(i = 0; i < 8; i++){SCL = 1;Read_data <<= 1;Read_data |= (uchar)SDA;SCL = 0;}Stop();return(Read_data);}/*****************************************************函数名:uchar ReadCurrent(uchar Address)功能:从指定地址读一字节数据说明:从24c02中读出数据入口参数:Address返回值:Read()*****************************************************/uchar ReadCurrent(uchar Address){Start();Send(AddWr);Send(Address);return Read();}/*****************************************************函数名:void ReadFromROM(uchar Data[],uchar Address,uchar Num)功能:从24C02中读出一字节的数据说明:在指定地址读取入口参数:Data[],Address,Num返回值:无*****************************************************/void ReadFromROM(uchar Data[],uchar Address,uchar Num){uchar i;uchar *PData;PData=Data;for(i=0;i<Num;i++){Start();Send(AddWr);Send(Address+i);*(PData+i)=Read();}}//========================================== 密码控制部分==================================================/*****************************************************函数名:void Newpassword_comparison(void)功能:第二次输入密码比较说明:对第一次输入的密码与第二次输入的密码进行比较入口参数:无返回值:无*****************************************************/void Newpassword_comparison(void){uchar Number=0;while((T_Password[Number]==N_Password[Number])&(Number<6))// 密码比较{Number++; // 计数值加1}if(Number>=6) // 密码正确{Newpassword_OK(); // 新密码设置成功提示WriteToROM(T_Password,0,6); // 密码设置成功,则把密码存入24c02中sign =1; // 比较新密码标志WriteCurrent((uchar)sign,10); // 存入标志位Delay400Ms();Beep(); // 正确提示音Delay400Ms();Beep();mark=0;}else // 密码错误,报警{Newpassword_ERROR(); // 新密码设置失败提示num=0;sign =0; // 比较旧密码标志Delay400Ms();Beep();Beep();Beep(); // 错误提示音Delay400Ms();Beep();Beep();Beep();Delay1s(); // 延时1smark=0;}}/*****************************************************函数名:void NewPassword_set_again(void)功能:第二次输入密码说明:第二次输入密码并存入暂存器,再调用比较程序入口参数:无返回值:无*****************************************************/void NewPassword_set_again(void){bit sign1;uchar key_data;P1=0xf0; // 判断是否有键按下if(flag==1){NewPassword_again(); // 显示密码输入界面Delay400Ms();flag=0; // 调用输入新密码提示标志位Count=0; // 按键次数计数器置0Delay400Ms();}if((P1&0xf0)!=0xf0) // 判断是否有键按下{key_data=Key_switch(); // 调用按键转换程序if((key_data!=0)&(key_data!=65)&(key_data!=66)&(key_data!=67)&(key_data!=68)&(key_data! =35)&(key_data!=42)){//按键不能为数字(0~9)以外.A B C D # *Count++; // 按键次数器加1Led_hint(); // 按键指示Beep(); // 按一下键发一音sign1=1; // 有键按下标志位}}if((sign1==1)&(flag==0)) // 有键按下{Scan_starnumber(); // 在密码显示区显示" ****** "sign1=0; // 按键标志位清0T_Password[Count-1]=key_data; // 按键值放入密码暂存器}if(Count==6) // 6次按键则进行密码比较{Count=0; // 计算清0,从先计数flag =1; // 调用输入新密码提示标志位mark =0; // 循环标志位WriteCommandLCM(0x0C,1); // 关光标显示Newpassword_comparison(); // 新密码设置比较}}/*****************************************************函数名:void NewPassword_set(void)功能:新密码设置说明:修改密码入口参数:无返回值:无*****************************************************/void NewPassword_set(void){bit sign1;uchar key_data;P1=0xf0; // 判断是否有键按下if(flag==1){NewPassword_face(); // 显示密码输入界面flag=0; // 调用输入新密码提示标志位Count=0; // 按键次数计数器置0Delay400Ms();}if((P1&0xf0)!=0xf0) // 判断是否有键按下{key_data=Key_switch(); // 调用按键转换程序if((key_data!=0)&(key_data!=65)&(key_data!=66)&(key_data!=67)&(key_data!=68)&(key_data! =35)&(key_data!=42)){//按键不能为数字(0~9)以外.A B C D # *Count++; // 按键次数器加1Led_hint(); // 按键指示Beep(); // 按一下键发一音sign1=1; // 有键按下标志位}}if((sign1==1)&(flag==0)) // 有键按下{Scan_starnumber(); // 在密码显示区显示" ****** "sign1=0; // 按键标志位清0N_Password[Count-1]=key_data; // 按键值放入密码暂存器}if(Count==6) // 6次按键则进行密码比较{Count=0; // 计算清0,从先计数flag =1; // 调用输入新密码提示标志位mark =0; // 循环标志位WriteCommandLCM(0x0C,1); // 关光标显示}}/*****************************************************函数名:void Password_importation(void)功能:密码输入说明:输入密码并调用密码比较函数进行比较入口参数:无返回值:无*****************************************************/void Password_importation(void){bit sign1;uchar key_data;P1=0xf0; // 判断是否有键按下if(((P1&0xf0)!=0xf0)&(flag==1)) // 有键按下,且是第一次{key_data=Key_switch();if(key_data!=0){Pass_face(); // 显示密码输入界面Delay400Ms();flag=0; // 调用密码输入提示标志位Count=0; // 输入密码个数计数器置0Delay400Ms();}}if((P1&0xf0)!=0xf0) // 判断是否有键按下{key_data=Key_switch(); // 调用按键转换程序if((key_data!=0)&(key_data!=65)&(key_data!=66)&(key_data!=67)&(key_data!=68)&(key_data! =35)&(key_data!=42)){//按键不能为数字(0~9)以外.A B C D # *Count++; // 按键次数器加1Led_hint(); // 按键指示Beep(); // 按一下键发一音sign1=1; // 有键按下标志位}}if((sign1==1)&(flag==0)) // 有键按下{Scan_starnumber(); // 在密码显示区显示" ****** "sign1=0; // 按键标准位清0T_Password[Count-1]=key_data; // 按键值放入密码暂存器}if(Count==6) // 6次按键则进行密码比较{Count=0; // 计算清0,从先计数flag =1; // 调用密码输入提示标志位mark =0; // 循环标志位WriteCommandLCM(0x0C,1); // 关光标显示if(sign==0)PasswordComparison(0); // 输入按键与原始密码比较else PasswordComparison(1); // 输入按键与新密码比较}}/*****************************************************函数名:void Scan_starnumber(void)功能:显示密码位为星号说明:在密码显示区显示" ****** "入口参数:无返回值:无*****************************************************/void Scan_starnumber(void){switch(Count) // 在相应的地方显示"*"{case 1:DisplayOneChar(5,1,42);break; //-----*-----------//case 2:DisplayOneChar(6,1,42);break; //------*----------//case 3:DisplayOneChar(7,1,42);break; //-------*---------//case 4:DisplayOneChar(8,1,42);break; //--------*--------//case 5:DisplayOneChar(9,1,42);break; //---------*-------//case 6:DisplayOneChar(10,1,42);break; //----------*------//} //-----*******-----//}/*****************************************************函数名:void PasswordComparison(bit mark)功能:密码比较程序说明:对输入密码进行比较入口参数:mark:当mark=1时,对原始密码进行比较;当mark=0时,对原始密码进行比较返回值:无*****************************************************/void PasswordComparison(bit mark1){uchar Number=0;if(mark1==0) // 输入按键与原始密码比较{while((T_Password[Number]==O_Password[Number])&(Number<6)) // 密码比较{Number++; // 计数值加1}}else // 输入按键与新密码比较{ReadFromROM(N_Password,0,6);while((T_Password[Number]==N_Password[Number])&(Number<6)) // 密码比较{Number++; // 计数值加1}}if(Number>=6) // 密码正确{mark0=1; // 进入新密码设置mark=0; // 退出循环num=0; // 密码错误输入计数器置0if(markx==1){Password_OK(); // 调用密码输入正确提示函数REL=0; // 继电器开启,即密码锁开启Delay400Ms();Beep();Beep(); // 正确提示音Delay400Ms();Beep();Beep();Delay1s(); // 延时2sDelay1s();REL=1; // 继电器关闭,即密码锁开启}else{Delay400Ms();Beep();Beep(); // 正确提示音Delay400Ms();Beep();Beep();Delay1s(); // 延时2sDelay1s();}}else // 密码错误,报警{mark0=0; // 新密码输入控制位Password_ERROR(); // 调用密码输入错误提示函数Delay400Ms();Beep();Beep();Beep();Beep(); // 错误提示音Delay400Ms();Beep();Beep();Beep();Beep();Delay1s(); // 延时1smark=0; // 退出循环num++; // 密码错误输入计数器}}//======================================= 指示函数部分===============================================/*****************************************************函数名:void Led_hint(void)功能:LED工作指示程序说明:对按键及密码的输入结果进行指示入口参数:无返回值:无*****************************************************/void Led_hint(void){WLED=0;Delay400Ms();WLED=1;}/*****************************************************函数名:void Beep(void)功能:蜂鸣器发音程序说明:对密码输入正确与否、按键等的提示入口参数:无返回值:无*****************************************************/void Beep(void){BELL=0; // 灯亮Delay_bell(); // 延时BELL=1; // 灯灭Delay_bell(); // 延时}//======================================= 按键函数部分===============================================/*****************************************************函数名:uchar Key_scan(void)功能:4x4按键,按键扫描说明:对按键进行扫描,从而得到键编码入口参数:无返回值:有键按下返回:键编码=行扫描值+列扫描值;无按键返回0*****************************************************/uchar Key_scan(void){uchar key; // 存放键编码P1=0xf0; // 取高4 位值.即:列扫描值key=P1&0xf0; // 存放键编码的高4位P1=0x0f; // 取低4 位值.即:行扫描值key=(P1&0x0f)|key; // 低4位与高4位进行合并if(key!=0xff){return(key); // 有键按下,返回键编码}return(0); // 无键按下,返回0}/*****************************************************函数名:uchar Key_switch(void)功能:按键转换程序说明:对按键码进行转换入口参数:无返回值:ASCII码*****************************************************/uchar Key_switch(void){uchar key;key=Key_scan();Delay5Ms();switch(key){case 0xee:return(49);break; /* "1"键*/case 0xed:return(50);break; /* "2"键*/case 0xeb:return(51);break; /* "3"键*/case 0xe7:return(65);break; /* "A"键*/case 0xde:return(52);break; /* "4"键*/case 0xdd:return(53);break; /* "5"键*/case 0xdb:return(54);break; /* "6"键*/case 0xd7:return(66);break; /* "B"键*/case 0xbe:return(55);break; /* "7"键*/case 0xbd:return(56);break; /* "8"键*/case 0xbb:return(57);break; /* "9"键*/case 0xb7:return(67);break; /* "C"键*/case 0x7e:return(42);break; /* "*"键*/case 0x7d:return(48);break; /* "0"键*/case 0x7b:return(35);break; /* "#"键*/case 0x77:return(68);break; /* "D"键*/case 0x00:return(00);break; /* "无"键*/}}//======================================= 显示界面函数部分===============================================/*****************************************************函数名:void Reset_success(void)功能:密码复位成功说明:密码复位成功提示入口参数:无返回值:无*****************************************************/void Reset_success(void){DisplayListChar(0,0,"Password Reset");DisplayListChar(0,1,"=== Success ===");}/*****************************************************函数名:void NewPassword_again(void)功能:显示输入新密码界面说明:再次输入密码提示入口参数:无返回值:无*****************************************************/void NewPassword_again(void){DisplayListChar(0,0," New_pass again ");DisplayListChar(0,1," ");WriteCommandLCM(0xc6,1); // 光标显示地址WriteCommandLCM(0x0f,1); // 显示开及光标设置WriteCommandLCM(0x10,1); // 移位控制,光标右移}/***************************************************** 函数名:void Newpassword_ERROR(void)功能:新密码设置失败说明:对新密码设置失败进行提示入口参数:无返回值:无*****************************************************/ void Newpassword_ERROR(void){DisplayListChar(0,0,"_New password_");DisplayListChar(0,1,"__Set failure__");}/***************************************************** 函数名:void Newpassword_OK(void)功能:新密码设置成功说明:对新密码设置成功进行提示入口参数:无返回值:无*****************************************************/ void Newpassword_OK(void){DisplayListChar(0,0,"_New password_");DisplayListChar(0,1,"__Set success__");}/***************************************************** 函数名:void Choice_menu(void)功能:选择菜单说明:对选择功能进行提示入口参数:无返回值:无*****************************************************/ void Choice_menu(void){DisplayListChar(0,0," Please choose ");DisplayListChar(0,1,"A-PW B-CRT C-RT");}/***************************************************** 函数名:Welcome_face()功能:显示欢迎界面说明:开机进入欢迎界面入口参数:无返回值:无*****************************************************/void Welcome_face(void){DisplayListChar(0,0," welcome home ");DisplayListChar(0,1,"please password ");}/*****************************************************函数名:viod Pass_face(void)功能:密码输入界面说明:对密码输入进行提示入口参数:无返回值:无*****************************************************/void Pass_face(void){DisplayListChar(0,0," Input password ");DisplayListChar(0,1," ");WriteCommandLCM(0xc6,1); // 光标显示地址WriteCommandLCM(0x0f,1); // 显示开及光标显示WriteCommandLCM(0x10,1); // 移位控制,光标右移}/*****************************************************函数名:void NewPassword_face(void)功能:显示输入新密码界面说明:对输入新密码提示入口参数:无返回值:无*****************************************************/void NewPassword_face(void){DisplayListChar(0,0," Input New_pass ");DisplayListChar(0,1," ");WriteCommandLCM(0xc6,1); // 光标显示地址WriteCommandLCM(0x0f,1); // 显示开及光标设置WriteCommandLCM(0x10,1); // 移位控制,光标右移}/*****************************************************函数名:void Password_OK(void)功能:显示密码输入正确界面说明:对密码输入正确进行提示入口参数:无返回值:无*****************************************************/void Password_OK(void){DisplayListChar(0,0,"- Password OK! -");DisplayListChar(0,1,"- Welcome you! -");}/*****************************************************函数名:void Password_ERROR(void)功能:显示密码输入错误界面说明:对密码错误输入进行提示入口参数:无返回值:无*****************************************************/void Password_ERROR(void){DisplayListChar(0,0,"==== Sorry! ====");DisplayListChar(0,1,"=Password ERROR=");}//================================ LCM1602控制部分=========================================================/*****************************************************函数名:void WriteDataLCM()功能:向LCM1602中写入数据说明:将形参WDLCM中的数据写入LCM中入口参数:WDLCM返回值:无*****************************************************///写数据void WriteDataLCM(uchar WDLCM){ReadStatusLCM(); // 检测忙LCM_Data = WDLCM; // 写入数据到LCMLCM_RS = 1;LCM_RW = 0;LCM_E = 0; // 若晶振速度太高可以在这后加小的延时LCM_E = 0; // 延时LCM_E = 1;}/*****************************************************函数名:void WriteCommandLCM()功能:向LCM1602中写入指令说明:向LCM中写入指令;如果BuysC=0时,忽略忙检测,如果BuysC=1时,不忽略忙检测入口参数:WCLCM,BuysC返回值:无*****************************************************///写指令void WriteCommandLCM(uchar WCLCM,BuysC) // BuysC为0时忽略忙检测{if (BuysC) ReadStatusLCM(); // 根据需要检测忙LCM_Data = WCLCM; // 写入指令LCM_RS = 0;LCM_RW = 0;LCM_E = 0;LCM_E = 0;LCM_E = 1;}/*****************************************************函数名:uchar ReadStatusLCM()功能:读忙状态说明:判断LCM的工作状态;也可以不用此函数,用一段延时程序代替入口参数:无返回值:LCM_Data*****************************************************///读状态uchar ReadStatusLCM(void){LCM_Data = 0xFF; // LCM数据口先置1LCM_RS = 0;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;while (LCM_Data & Busy); // 检测忙信号.如果忙,则不执行return(LCM_Data); // 不忙返回读取数据}/*****************************************************函数名:void LCMInit()功能:初始化LCM1602说明:LCM在工作前先要对显示屏初始化,否则模块无法正常工作入口参数:无返回值:无*****************************************************///LCM初始化void LCMInit(void){LCM_Data = 0;WriteCommandLCM(0x38,0); // 三次显示模式设置,不检测忙信号Delay5Ms();WriteCommandLCM(0x38,0); // 0x38指令表示:8位数据显示模式,俩行多显示Delay5Ms();WriteCommandLCM(0x38,0);Delay5Ms();WriteCommandLCM(0x38,1); // 显示模式设置,开始要求每次检测忙信号WriteCommandLCM(0x08,1); // 关闭显示WriteCommandLCM(0x01,1); // 显示清屏WriteCommandLCM(0x06,1); // 显示光标移动设置WriteCommandLCM(0x0C,1); // 显示开及光标设置}/*****************************************************函数名:void DisplayOneChar()功能:按指定坐标中写入数据说明:X-横坐标,Y-纵坐标,DData为ASCII值入口参数:X,Y,DData返回值:无*****************************************************///按指定位置显示一个字符void DisplayOneChar(uchar X, uchar Y, uchar DData){Y &= 0x01;X &= 0x0F; // 限制X不能大于15,Y不能大于1if (Y) X |= 0x40; // 当要显示第二行时地址码+0x40;X |= 0x80; // 算出指令码WriteCommandLCM(X, 0); // 这里不检测忙信号,发送地址码WriteDataLCM(DData);}/*****************************************************函数名:void DisplayListChar()功能:向指定坐标中写入字符串说明:X-横坐标,Y-纵坐标入口参数:X,Y,*DData返回值:无*****************************************************///按指定位置显示一串字符***原来的遇到空格0x20就不显示***void DisplayListChar(uchar X, uchar Y, uchar code *DData){uchar ListLength,j;ListLength = strlen(DData); // strlen:读取字符串的长度Y &= 0x1;X &= 0xF; // 限制X不能大于15,Y不能大于1if (X <= 0xF) // X坐标应小于0xF{for(j=0;j<ListLength;j++){DisplayOneChar(X, Y, DData[j]); // 显示单个字符X++; // 横坐标加1,纵坐标不变}}}//======================================= 延时函数部分===============================================/*****************************************************函数名:void DelayMs(uchar number)功能:延时函数说明:完成24c02的延时入口参数:number返回值:无*****************************************************///定时函数void DelayMs(uchar number){uchar i;while(number--){for(i=0;i<120;i++){;}}}/*****************************************************函数名:void Delay5Ms()功能:5ms延时说明:软件消除按键抖动和适当的延时入口参数:无返回值:无*****************************************************/ //5ms延时void Delay5Ms(void){uint TempCyc = 5552; // 放入延时数据while(TempCyc--);}/***************************************************** 函数名:void Delay400Ms()功能:400ms延时说明:对显示进行延时入口参数:无返回值:无*****************************************************/ //400ms延时void Delay400Ms(void){uchar TempCycA = 5;uint TempCycB;while(TempCycA--){TempCycB=7269;while(TempCycB--);};}/***************************************************** 函数名:void Delay1s(void)功能:1s延时说明:用来控制继电器开启时间入口参数:无返回值:无*****************************************************/ void Delay1s(void) // 1s延时子程序{uchar h,i,j,k;for(h=5;h>0;h--)for(i=4;i>0;i--)for(j=116;j>0;j--)for(k=214;k>0;k--);}/*****************************************************函数名:void Delay_bell(void)功能:蜂鸣器延时程序说明:对蜂鸣器发音延时入口参数:无返回值:无*****************************************************/void Delay_bell(void){uint i;for(i=0;i<30000;i++);}//===================================== 定时器中断部分====================================================/*****************************************************函数名:void time_intt0(void) interrupt 1功能:T0中断函数说明:按键时间超过10s时,退出按键输入入口参数:无返回值:无*****************************************************/void time_intt0(void) interrupt 1{EA=0; TR0=0; // 关闭定时器TH0=0x3C; TL0=0xB0; // 定时器1赋初值TR0=1; // 开定时器0con_20s++; // 20s计数器计数if(con_20s==200) // 到20s{con_20s= 0; // 10s计数器值0signx= 0; // 10s没键按下跳出循环flag1= 1; // 从先进入选择菜单flag=1; //TR0 = 0; // 关定时器mark=0; // 跳出循环}EA=1;。
基于AT89C51单片机的矩阵键盘电子密码锁设计
摘要在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。
随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。
为满足人们对锁的使用要求,增加其安全性,用数字密码代替钥匙的单片机控制的电子密码锁应运而生。
在这次毕业设计中我采用AT89C51单片机为核心4*4矩阵键盘作为输入器件,LCD1602字符型液晶作为显示电路来制作基于单片机的电子密码锁。
该密码锁具有可更改密码、密码掉电保护、输入密码错误报警、输入密码错误三次锁定键盘的功能。
该密码锁具有操作人性化、低功耗、高保密性等一系列优点。
本文详细地介绍了系统硬件与软件的设计,以及仿真调试的详细过程。
关键词:4*4矩阵键盘, AT89C51, 1602LCD显示器,密码锁AbstractIn our daily life, the security of house, company department, documents and finance forms, also some personal information always used the lock to protect them. If use the normal keys to lock out the door, we should taken many keys with us . That is so difficult to use. And if we lost the keys with careless, the security looks very easy to break out. As the developing of the technology people ask for high security machines. For satisfy this request, the cipher lock is appeared. The cipher has higher security, lower cost, lower power and easy to use.At the graduation design I AT89C51 microcontroller as the core 4 * 4 matrix as input devices, LCD1602 keyboard type LCD display circuit as a character based on single chip to make the electronic combination lock. This combination lock has may change your password, password off electricity protection, input password mistake alarm, input password mistake three times the function of lock the keypad. This combination lock have operation humanization, low power consumption, high confidentiality and so on a series of advantages. This paper introduced in detail the system hardware and software design, and the detailed process simulation debugging.Keywords: matrix keyboards, AT89C51, 1602LCD, combination lock河南城建学院本科毕业设计(论文)目录目录第1章概论 (1)1.1 设计意义 (1)1.2背景知识介绍 (1)1.3 本文主要工作以及内容安排 (2)第2章系统总体方案设计 (3)2.1 总体方案设计 (3)2.1.1 实现功能: (3)2.1.2 4*4键盘说明 (4)2.2 AT89C51单片机介绍 (4)2.3硬件设计 (6)2.3.1 时钟电路的设计 (6)2.3.2 复位电路的设计 (7)2.3.3 密码存储电路的设计 (8)2.3.4 键盘电路设计 (9)2.3.5 显示电路的设计 (11)2.3.6 报警电路 (14)2.3.7 开锁电路 (15)第3章软件设计 (16)3.1 编程工具介绍 (16)3.2 编程语言介绍 (17)3.3 软件编程 (18)3.3.1软件设计原则 (18)3.3.2 软件设计方案 (18)3.3.3 4*4矩阵键盘的编程方法 (19)3.3.4液晶显示子程序 (21)3.3.5 密码比较和报警程序 (22)3.3.6 密码重置程序设计 (23)第4章软件仿真以及调试 (26)4.1 仿真软件简介 (26)4.2 仿真程序基本工作界面 (27)4.3 仿真过程 (27)总结 (30)参考文献 (31)致谢 (32)附录A:程序主函数 (33)附录B:总电路图 (36)第1章概论1.1 设计意义单片机的应用是具有高度现实意义的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要本次设计使用AT89C51实现一基于单片机的电子密码锁。
本系统由单片机系统、矩阵键盘、LED显示和报警系统组成。
系统能完成开锁、超次锁定、修改用户密码基本的密码锁的功能。
除上述基本的密码锁功能外,还具有温度显示、时间显示等功能,依据实际的情况还可以添加遥控功能。
本系统成本低廉,功能实用。
关键词:单片机AT89C51 LED显示矩阵键盘自动报警目录1引言 (1)2方案的比较与论证 (2)3系统模块电路的设计 (4)3.1系统总框图 (4)3.2系统的模块电路设计 (4)3.2..1单片机的最小系统模块 (4)3.2..2波形产生模块 (5)3.2..3键盘模块 (8)3.2..4显示模块 (9)3.2..5电源模块 (11)3.2..6温度检测模块设计 (13)3.2..7开锁电路和报警电路模块 (14)4系统的软件设计 (15)4.1软件设计思路 (15)4.2系统主流程图 (15)5总结 (16)6致谢 (18)7参考文献 (18)8附录 (19)1引言目前,最常用的锁是20世纪50年代意大利人设计的机械锁,其机构简单、使用方便、价格便宜。
但在使用中暴露了很多缺点:一是机械锁是靠金属制成的钥匙上的不同齿形与锁芯的配合来工作的。
据统计,每4000把锁中就有两把锁的钥匙齿牙相同或类似,故安全性低。
二是钥匙一旦丢失,无论谁捡到都可以将锁打开。
三是机械锁的材料大多为黄铜,质地较软,容易损坏。
四是机械锁钥匙易于复制,不适于诸如宾馆等公共场所使用。
由于人们对锁的安全性,方便性等性能有更高的要求,许多智能锁也相继问世,但这类产品的特点是针对特定指纹或有效卡,但能适用于保密要求高且仅供个别人使用的箱、柜、房间,其成本一般较高,在一定程度上限制了这类产品的普及和推广。
随着人们生活水平的提高,电子密码防盗锁作为防盗卫士的作用日趋重要。
电子密码防盗锁用密码代替钥匙,不但省去了佩戴钥匙的烦恼,也从根本上解决了普通门锁保密性差的缺点。
随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,机械锁的这些弊端为一种新型的锁---电子密码锁,提供了发展的空间。
随着人们对安全的重视和科技的发展,许多电子智能锁已在国内外相继面世。
但是这些产品的特点是针对特定的指纹和有效卡,只能适用于保密要求的箱、柜、门等。
而且指纹识识别器若在公共场所使用存在容易机械损坏,IC卡还存在容易丢失、损坏等特点。
加上其成本较高,一定程度上限制了这类产品的普及和推广。
电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的欢迎。
鉴于目前的技术水平与市场的接收程度,电子密码锁是这类电子防盗产品的主流。
2方案比较与论证方案一:采用数字电路控制。
其原理方框图如图1所示。
图1 数字密码锁电路方案采用数字密码锁电路的好处就是设计简单。
用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有6个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;若电路连续报警三次,电路将锁定键盘10秒,防止他人的非法操作。
电路由两大部分组成:密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。
密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输入次数锁定电路。
方案二:以AT89C51为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加温度显示、时间显示甚至添加遥控控制功能。
通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。
3系统模块电路的设计3.1 系统总框图图2系统框图3.2系统的模块电路设计3.2.1 单片机最小系统模块AT89C51是一种低功耗,高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和系统可编程Flash,使得AT89SC51为众多嵌入式控制应用系统提供高灵活,超有效地解决方案。
AT89C51是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
图3AT89C51管脚图3.2.2时钟电路模块采用专用时钟芯片DS1302,该芯片性能简介如下:DS1302的结构及工作原理:DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
(1)引脚功能及结构图1示出DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc≥2.5V 之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
I/O为串行数据输入输出端(双向),后面有详细说明。
SCLK始终是输入端。
图4 DS1302的管脚图(2) DS1302的控制字节DS1302 的控制字如图2所示。
控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。
图5 DS1302的控制字节(3)数据输入输出(I/O)在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。
同样,在紧跟8位的控制指令字后的下一个SCLK 脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。
(4) DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表1。
图6日历,时间寄存器及其控制字此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。
DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
(5) DS1302与单片机连接如图7所示:3.3VP3.7P3.6P3.11N4007150VC C1I/OSC LKRS TVC C2X1X2GNDDS1302图7 DS1302与单片机连接图3.2.3键盘模块使用矩阵键盘,所以本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样的方法。
其原理如图8所示:图8 矩阵键盘每条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需N条行线和M条列线,即可组成具有N*M个按键的键盘。
在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。
当确认有按键按下后,下一步就要识别哪一个按键按下。
对键的识别通常有两种方法:一种是常用的逐行扫描法;另一种是速度较快的线反转法。
对照图8所示的4*4键盘,说明线反转个工作原理。
首先辨别键盘中有无按键按下,由单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。
方法是:向列线输出全扫描字00H,把全部列线置为低电平,然后将行线的电平状态读入累加器A中。
如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。
判断哪个键被按下:将P1.0~P1.3都置低,检测P1.4~P1.7是否有低的,若有,则证明有键按下,记下低的端口。
然后,将P1.4~P1.7置低,检测P1.0~P1.3是否有低的端口,如有,则证明端口与上次的一个为地的端口交叉位置的键被按下。
3.2.4显示模块电子密码锁系统中,需要现实的信息较少,因此采用七段LED数码显示管作为显示器。
数据传输采用串行方式,有单片机串行数据口P3.0发送,在经过74HC164串行移位器把串行数据转换成8位并行数据,用以驱动七段LED数码显示管。
由于74HC164芯片中,没有数据锁存器,串行数据每到达一位,都会直接送到七段显示管中,造成所有数据都会经过其短线是数码管的每一个LED灯,是数据显示不稳定。
因此在74HC164串行移位寄存器和七段数码显示管之间,加入数据锁存器(74273芯片),以稳定数码显示管的数据显示。
在按下开启按键后,显示器处于开启状态,同理只有按下关闭键后显示器处于关闭状态,当需要对密码锁进行开锁时,按下键盘上的开锁键后利用键盘上的数字键0——9输入密码,每按下一个数字键后在显示器上显示一个“-”,输入六个数有六个“-”出现。