密码锁设计报告.docx
《密码锁设计报告.docx》由会员分享,可在线阅读,更多相关《密码锁设计报告.docx(46页珍藏版)》请在冰豆网上搜索。
密码锁设计报告
计算机控制技术(单片机)
课程设计报告
学院:
工程学院
专业班级:
电气0701
姓名:
刘炜业
学号:
220070222
指导教师:
李桂君
起止日期:
2010年6月21日~2010年7月2日
目录
1.引言..................................................................1
2.总体设计方案..........................................................1
2.1设计方案的确定..................................................1
2.2设计思路........................................................2
2.3总体设计框图....................................................2
3.设计组成及原理分析....................................................2
3.1主控电路........................................................3
3.1.1振荡电路..................................................3
3.1.2复位电路..................................................3
3.1.3LED指示电路...............................................3
3.2报警电路及原理.................................................3
3.3矩阵键盘电路分析................................................4
3.4数码管显示电路原理..............................................4
3.5掉电存储电路分析................................................5
4.系统软件设计..........................................................6
4.1系统软件设计流程图..............................................6
4.2主程序设计......................................................7
4.3键盘扫描程序设计................................................7
4.4掉电存储程序设计................................................8
5.总结与体会...........................................................8
参考文献...............................................................8
附录1.................................................................8
附录2.................................................................8
附录3.................................................................8
摘要:
本设计的电子密码锁利用51单片机控制电路,实现对门的电子控制,并且有各种附加电路保证电路能够安工作,能够自己设置密码,有二级密码保护,有极高的安全系数。
本系统由单片机系统、矩阵键盘、LED显示和报警系统组成。
系统能完成开锁、超时报警、超次锁定、管理员解密、修改用户密码基本的密码锁的功能。
除上述基本的密码锁功能外,还具有调电存储、声光提示等功能,依据实际的情况还可以添加遥控功能。
本系统成本低廉,功能实用。
关键词:
电子密码锁;AT89S51单片机;AT24C02;掉电存;I2C总线
1.引言
在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
若使用传统的机械式钥匙开锁,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。
随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。
为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。
密码锁具有安全性高、成本低、功耗低、易操作等优点。
在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。
随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的智能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。
随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别、IC卡辨认)已在国内外相继面世。
但是这些产品的特点是针对特定的指纹和有效卡,只能适用于保密要求的箱、柜、门等。
而且指纹识识别器若在公共场所使用存在容易机械损坏,IC卡还存在容易丢失、损坏等特点。
加上其成本较高,一定程度上限制了这类产品的普及和推广。
鉴于目前的技术水平与市场的接收程度,电子密码锁是这类电子防盗产品的主流。
基于以上思路,本次设计使用ATMEL公司的AT89C52实现一基于单片机的电子密码锁的设计,其主要具有如下功能:
(1)设置16位密码可变,密码通过键盘输入,若密码正确,则将锁打开。
(2)密码可以由用户自己修改设定,锁打开后才能修改密码。
修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。
(3)带有掉电存储功能,掉电后密码不丢失,符合实际应用要求。
(4)报警、锁定键盘功能。
密码输入错误数码显示器会出现错误提示,若密码输入错误次数超过3次,蜂鸣器报警并且锁定键盘,需要用管理员密码解锁。
2.总体设计方案
2.1设计方案的确定
根据系统功能要求,系统总体设计方案如下:
1、单片机可采用AT89C51、AT89C52、AT89S52、fosc=12MHz。
2、时钟电路,复位电路的设计。
3、电源打开后,显示器显示“OFF”,密码有AT24C02读取“2010”为内定密码,只要输入此密码便可开门。
这样可预防万一停电后再送电时无密码可用。
4、按“取消”,清除显示器为“OFF”。
5、欲更改密码时,先按输入原密码打开门,再按修改密码键,两次输入新密码分别按下“确认”,即可建立新密码。
6、输入新密码,再按“确认”开门键。
若号码与密码相符,则门会打开,否则显示器会清除为“OFF”。
根据总体要求分析,选择质优价廉的AT89C51,而且不需要外接程序存储器和数据存储器及其它扩展部件。
P1口连接13个密码按键,开锁脉冲由P2.8输出,报警有P2.7输出、提示音由P2.2输出。
用绿灯代替电磁锁的开锁动作。
2.2设计思路
电子密码锁的设计主要由四部分组成:
4×4矩阵键盘接口电路、密码锁的控制电路、输出八段显示电路、掉电存储电路。
另外系统还有LED提示灯,报警蜂鸣器等。
密码锁设计的关键问题是实现密码的输入、清楚、更改、开锁等功能:
(1)密码输入功能:
按下一个数字键,一个“-”就显示在最右边的数码管上,同时将上一个输入的“-”关闭。
(2)密码清除功能:
当按下清除键时,清除前面输入的所有值,并清除所有显示。
(3)密码更改功能:
将输入的值作为新的密码。
(4)开锁功能:
当按下开锁键,系统将输入与密码进行检查核对,如果正确锁打开,否则不打开。
(5)掉电存储功能:
当碰到意外停电,再次运行时密码不变,仍然是自己设置的原密码。
2.3总体设计框图
图1系统框图
3.设计原理分析
本设计电路分为五部分组成:
主控电路,矩阵键盘,数码显示电路,报警电路,掉电存储电路。
3.1主控电路
主控电路主要有AT89C51控制处理芯片,复位电路、振荡电路、LED指示电路组成。
3.1.1振荡电路
振荡电路:
如图2所示振荡电路采用的是12MHz石英晶体,为单片机提供工作节拍,提供振荡周期,是单片机工作的基本条件。
3.1.2复位电路
复位时单片机必不可少的组成部分。
其中晶振电路采用12MHz石英晶振器实现,
图2主控电路
振荡信号经过一定的信号处理后送向单片机作为单片机工作周期的标准信号。
而复位电路是在单片机出现故障而无法正常工作,用来使单片机初始化的电路。
其电路原理图如图2所示。
3.1.3LED指示电路
在单片机P2.6与P2.7管脚分别接了一红一绿两个发光二极管。
绿色发光二级管是用来指示开锁成功,当输入密码正确,绿色发光管会亮,表示开锁成功,代替了向电磁锁发送信号。
红色发光二极管是用来报警指示的,在密码输入错误三次时(超时算错误一次)红色发光管会亮,5秒后本系统会自动锁住。
3.2报警电路
报警机构有蜂鸣器及其驱动电路组成。
此蜂鸣器只需通入直流电就可以蜂鸣报警。
因此当密码锁电路需要发出报警信号时,单片机输出低电平,使PNP管子导通,蜂鸣器即可通电发出蜂鸣的声音,从而实现报警功能,其电路的总体原理如图3所示。
图3报警电路
3.3矩阵键盘电路
键盘是人机交换的前向通道,是本设计的很重要的一部分,由于设计要求使用键盘的按键数目较多,所以本设计采用行列式矩阵键盘,同时也能减少键盘与单片机接口时占用的I/O口德数目,在按键比较多的时候,通常采用这样的方法。
其原理如图4所示。
由于只使用到13个按键所以对4×4矩阵键盘进行优化裁去三个按键,依然能够实现功能。
对于矩阵键盘很多资料上介绍都需要上拉电阻,笔者认为很多资料上针对的是比较老的单片机芯片,对于新一代的单片机芯片,能内部已经带有上拉电阻,所以外部不需要接上拉电阻,依然能够正常工作,本电路笔者已经试验过,完全没有问题,可以正常使用,所以本设计矩阵键盘不带上拉电阻。
图4矩阵键盘电路
在这种行列矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。
当确认有按键按下后,下一步就要识别哪一个按键按下。
对建的识别通常用逐行扫描查询法。
首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。
方法是:
向行线输出全扫描字F0H,把全部行线置为低电平,然后将列线的电平状态读入累加器A中。
如果有按键按下,总会有一根列线电平被拉至低电平,从而使列线不全为1。
判断键盘中哪一个键被按下使通过将行线逐列置低电平后,检查行输入状态来实现的。
方法是:
依次给行线送低电平,然后查所以列线状态,如果全为1,则所按下的键不在此行;如果不全为1,则所按下的键必在此行,而且是在与零电平行线相交的交点上的那个键。
3.4数码管显示电路
显示电路是人及交换的后向通道,是为了给使用者以提示而设置的。
根据设计要求,要求有三位数码管显示,由于考虑到单层布线的特点,采用独立式数码管单层布线难以布通,所以本设计采用三位一体的,七段三位数码管。
考虑到系统的稳定性,本系统不采用串行显示,采用传统的并行显示,经计算限流电阻应采用300到1k之间,所以采用常用阻值电阻470Ω或510Ω。
用单片机的P3口作为段选输出端口,P2.3、P2.4、P2.5为位选输出端口,采用的是共阳数码管,位选为低电平有效。
段选采用PNP三级管电路如图5,也是低电平有效。
由于采用三位数码管并行显示,所以分为静态显示,和动态显示,当三位数码管需要显示一样的内容时采用静态显示,当三位数码管需要显示不一样的内容时就需要软件进行动态扫描显示。
图5数码管显示电路
3.5掉电存储电路
掉电存储采用AT24C02存储芯片实现。
掉电存储电路的作用是在电源断开时存储当前密码值,以便下次开机时有回到初始密码值。
AT24C02是ATMEL公司生产的2KBEEROM(电可擦除)存储芯片,AT24C02支持I2C总线数据传送协议I2C总线协议规定任何将数据传送到总线的器件作为发送器任何从总线接收数据的器件为接收器数据传送是由产生串行时钟和所有起始停止信号的主器件控制的主器件和从器件都可以作为发送器或接收器但由主器件控制传送数据发送或接收的模式通过器件地址输入端A0A1和A2可以实现将最多8个AT24C02器件连接到总线上。
电压最低可以到2.5V,额定电流为1mA,静态电流10uA(5.5V),芯片内的资料可以在断电的情况下保存40年以上而且采用8脚的DIP封装,使用方便。
图6中R16、R17是上拉电阻,其作用是减少AT24C02的静态功耗,由于AT24C02的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(数据线)和SDA(数据线)与单片机传送数据。
由于每次开锁验证密码都要读取AT24C02内部保存的密码,第一次使用时AT24C02的内部没有保存密码,所以本设计分为两部分,第一部分先把密码写到AT24C02的内部,以供校验密码时使用。
第二部分是密码锁的主控程序,在每一次修改密码时,都要调用存储程序,将新密码保存到芯片内部芯片内部当系统需要进行密码识别时,通过程序读取存储器中的密码值存入缓冲区,与所输入的密码进行比较,完成密码锁的开锁控制。
图6掉电存储电路
4.系统软件设计
4.1系统软件设计流程图
图7软件设计流程图
4.2主程序设计
由于本设计逻辑性比较强,程序较为复杂,又由于汇编语言逻辑性较差,数据运算较为复杂,故采用灵活性较强的C语言来编写。
主程序主要完成各函数的逻辑组合,调用各子程序协调工作。
4.3键盘扫描程序
键盘采用查询方式,逐个进行扫描方式工作的,当没按键按下的时候CPU一直扫描键盘,一旦检测到按键按下,就返回相应的值,执行相应的操作。
4.4掉电存储程序
当比较密码的时候,需要读AT24C02程序,将存储在芯片的数据读到RAM中,然后和输入的密码相比较。
当修改密码的时候,需要把输入的密码保存到AT24C02中,其程序流程如图7。
5.设计总结
以上为课程设计期间所设计的电子密码锁电路,它经过多次修改和整理,已是一个比较完善的设计,可以满足客户的基本要求,但因为水平有限,此电路中也存在一定的问题,譬如说电路的密码不能遗忘,一旦遗忘,就很难打开,必须经过刷机才能解锁。
电路密码只有1到16位可供修改,但由于他人不知道密码的位数,而且还要求在规定的时间内按一定的顺序开锁,所以他人开锁的几率很小;本设计已经相当完善,完全可以投入生产使用。
通过这两周的学习,我感觉有很大的收获:
首先,通过学习使自己对课本上的知识可以应用于实际,理论与实际的到了很好的结合,加深自己对课本知识的理解,同时实习也段练了我个人的动手能力:
能够充分利用网络、图书馆去查阅资料,补充了许多课本以外的知识。
能对一些软件熟练操作,增强了我的画图制板能力,同时也大大提高了我的软件编程能力,能达到学以致用。
对我们学生来说,理论与实际同样重要,这是我们以后在工作中说明自己能力的一个重要标准。
参考文献
[1]康华光.电子技术基础(第四版).北京:
高等教育出版社,1998
[2]李朝青.单片机原理及接口技术(第三版).北京:
北京航空航天大学出版社,2005
[3]何立民.单片机应用技术选编(11).北京:
北京航空航天大学出版社,2006
[4]胡汉才.单片机原理及其接口技术(第2版).北京:
清华大学出版社,2004
附录1
密码锁设计原理图
附录3程序清单
1写如24C02原始密码程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitsda=P2^3;
sbitscl=P2^2;
ucharb=6,d=0;
uchara,c,n=10,m,o,p,m1,m2;
uchartemp[16]={1,0,0,8,6,1},temp1[16]
temp2[16]={1,9,8,7,0,6,2,9};
voiddelay()
{;;}
voidstart()//开始信号
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
voidstop()//停止
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
voidrespons()//应答
{
uchari;
scl=1;
delay();
while((sda==1)&&(i<250))i++;
scl=0;
delay();
}
voidinit()
{
sda=1;
delay();
scl=1;
delay();
}
voidwrite_byte(uchardate)
{
uchari,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
//scl=0;
//delay();
}
scl=0;
delay();
sda=1;
delay();
}
ucharread_byte()
{
uchari,k;
scl=0;
delay();
sda=1;
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
k=(k<<1)|sda;
scl=0;
delay();
}
returnk;
}
voiddelay1(ucharx)
{
uchara,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
voidwrite_add(ucharaddress,uchardate)
{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
ucharread_add(ucharaddress)
{
uchardate;
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);
respons();
date=read_byte();
stop();
returndate;
}
voidmain()
{
init();
write_add(100,6);
delay1(100);
write_add(2,8);
delay1(100);
for(m1=10;m1<16;m1++)
{
write_add(m1,temp[m1-10]);
delay1(100);
}
for(m2=30;m2<38;m2++)
{
write_add(m2,temp2[m2-30]);
delay1(100);
}
for(n=10;n<10+b;n++)
{
temp1[n-10]=read_add(n);
delay1(100);
}
while
(1);
}
2密码锁正常工作程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodedtable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0x86,0x88,0x8e,0xf0,0x8b,0x87};
ucharcodeytemp[3]={0xf7,0xef,0xdf};
ucharinput[16],mima[16],xmima_1[16]={0,0,0,0,0,0,0,0}
xmima_2[16]={0,0,0,0,0,0,0,0};
uchartemp,i,num,ztemp,stemp,xtemp,wtemp,k,j,h,s,timer,
right,error,lock,zs,m1,m2,b1,b2=0,t1=0,j=0,l=0,t3=0;
sbitp2_2=P2^2;
sbitp2_3=P2^3;
sbitp2_4=P2^4;
sbitp2_5=P2^5;
sbitp2_6=P2^6;
sbitp2_7=P2^7;
sbitp3_0=P3^0;
sbitp3_1=P3^1;
sbitp3_2=P3^2;
sbitp3_3=P3^3;
sbitp3_4=P3^4;
sbitp3_5=P3^5;
sbitp3_6=P3^6;
sbitp3_7=P3^7;
sbitscl=P2^1;
sbitsda=P2^0;
key_deal(ucharnum);
key_judge(ucharnum);
read_key();
voidtimer_judge();
voiderror_show();
voiderror_deal();
voidright_show();
voidoff_show();
voidinit();
voidlong_delay(uchark);
voidshor_delay(uchark);
voiddelay1(uintz);
ucharread_add(ucharaddress);
voidwrite_add(ucharaddress,uchardate);
/*主函数*/
voidmain()
{
loop1:
init();
off_show();
while
(1)
{
num=read_key();
key_judge(num);
timer_judge();
error_deal();
if(lock==1)
{
while
(1)
{
if(timer>=600)
{
for(zs=0;