数字密码锁数字式密码锁学院:南昌航空大学科技学院专业:电子信息科学与技术班级:0882081学号:19姓名:刘飞指导老师:2011年6月30日星期四摘要在生活中锁是不可缺少的必备用品,从普通的钥匙锁到银行中的保险柜的密码锁。
它给生活带来极大的方便,但是在生活中小型的机械密码锁能够用于保存一些物品,但是,如果需要保存贵重物品时,大型的机械式密码锁结构复杂,体积比较庞大,不便使用在小型的贵重物品上,于是,小型的电子密码锁就能够为大家解决这些问题,在本文中介绍了由C51单片机为核心的数字电子密码锁,在此密码锁中,通过编写一个程序,在通过液晶显示器实现输入过程,在液晶显示器上,能够完成我们需要完成的一些要求,当输入的密码为设定的密码时,锁就会打开,当输入错误时,则系统就会提醒再次输入,当三次输入的密码全为错时,则系统就会报警,在输入正确的密码后,可通过功能键来修改需要修改的,例如,修改密码,进行推格,清屏等功能,能有效地保护所需要保存的物品。
关键词:电子密码锁,自动报警,密码验证,密码修改,单片机,液晶显示目录1绪论 (2)2设计内容及要求 (3)3系统的设计 (4)3.1系统设计结构图 (4)3.2系统的工作原理说明 (4)4系统硬件设计 (5)4.1复位以及振荡电路 (5)4.2 4×4矩阵键盘 (5)4.3报警电路 (6)4.4液晶显示电路 (6)5电路程序设计 (7)6课程设计心得体会 (14)7参考文献 (14)附录1设计总体电路图 (15)附录2数字密码锁源程序 (16)一绪论在日常的生活和工作中, 人们的住宅与各种部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
由于住宅各单位需要保护的与保存的并不需要那种大型的机械式钥匙式密码锁,若使用机械式钥匙开锁,人们常常需要携带多把钥匙,使用时需要寻找,极不方便,且钥匙容易丢失,钥匙丢失后,安全性即大打折扣。
随着科学技术的发展,人们对日常生活中的安全保险要求越来越高,为了满足人们对锁的要求,且增加其锁的安全性与其方便性,不需要携带钥匙,用密码代替钥匙的密码锁越来越受到人们的喜爱。
数字式密码锁具有成本低,安全系数高,容易操作等优点。
随着生活的发展,人们对锁的要求是能够简单易行,需求成本低,使用灵活性好,使用安全系数高。
数字式密码锁的设计相对合理,能够符合人们的住宅、办公室用锁要求,具有很好的推广价值,且数字式电子密码锁采取电子电路控制,能够通过密码输入来控制电路与及芯片的工作从而完成开锁、闭锁任务。
而且能够改变密码,能够更加安全。
本次设计使用C51 单片机构成最小系统,接以键盘,报警系统,液晶显示构成人性化的方便易用的电子密码锁。
能够实现我们需要的一些功能。
二设计内容及要求①课程设计中,锁体用LED代替(如“绿灯亮”表示锁体被打开,“黄灯亮”表示密码输入错误,锁体为被打开,“红灯亮”表示三次密码输入都不正确,系统报警)。
②其密码为方4位到6位数字组成,由自己设定。
③开锁指令为串行输入码,当开锁密码与所设置的密码一致时,则绿灯亮,锁体将被打开。
当开锁密码与所设置的密码不一致时,则黄灯亮,提示密码错误,可再次输入密码。
若连续三次输入密码错误,未将锁体打开,则会红灯亮,电路则报警并实现自锁。
④根据自己的设定,设置密码输入的时间,且时间可以任意修改,在规定的时间内没有输入密码时,系统会自锁且报警。
○5密码可以更新,可以根据自己的需求,修改密码,实现更安全的保护。
三系统的设计3.1系统设计结构图如下图所示,此为设计原理框图:图3.1 系统设计框图如图3.1所示,此系统主要是由4×4矩阵键盘,复位电路,LED 显示灯,蜂鸣器,以及液晶显示电路组成。
3.2 系统的工作原理说明本系统采用C51单片机为核心的系统,加以4×4矩阵键盘、LED 显示灯、蜂鸣器等组成。
系统通过运行后,通过提示进行输入密码,输入密码后,按确认键,如果输入密码正确时,则会绿灯亮,表示锁体已打开。
如果密码输入不正确时,则会黄灯亮,可再进行输入密码,且为了防止有人恶意尝试,故此可以设置输入密码的次数,假设设置次数为三次,若连续三次密码输入错误,则红灯亮,发出报警声,并且自锁,防止有人盗窃行为。
而且可以设置输入密码的时间,当在设定的时间内输入密码时则有效,反之,未在设定的时间内输入密码时,系统也自动报警,并自锁。
四 系统硬件设计4.1复位以及振荡电路STC89C52 数码管 蜂鸣器 LED 4×4键盘 复位电路电源如下图所示,既为C51单片机系统的复位和振荡电路的结构:图4.1 系统的复位电路图4.1所示,在此电路中,时钟电路进行工作后,在管脚上加两个机器周期的高电平,当芯片内部开始工作,进行初始复位,此次设计中的晶振选择的频率为12MHZ,电容选择33pF。
因此,此单片机工作胡机器周期为:12×(1÷12M)=1us4.2 4×4矩阵键盘如图4.2 所示,本系统中采用的是4×4矩阵式的键盘输入,16个按键分为输入数字键:0、1、2、3、4、5、6、7、8、9;功能键:左移、右移、退格、Enter、AC。
按键的键盘与C51单片机相连接,其连接方式如图4.2所示:图4.2 4×4矩阵键盘电路4.3 报警电路在此次设计中,由于没有轰鸣器,故此用LED显示其结果,当我们输入密码时,当输入的密码为正确的设定密码,则显示绿灯以表示输入正确密码,锁体已被打开,当输入的密码错误时,第一次显示黄灯,表示输入密码错误,请从新输入,当三次输入错误时,则显示红灯,并锁定,此为报警电路。
4.4 液晶显示电路为了能够使得数字式电子密码锁更加人性化,能够让人们看到输入了几位密码,我们可通过LED数码显示管显示,通过显示管来显示我们的输入,能够更加的直观,明朗。
五电路程序设计在本系统中,我们根据硬件电路可得所需要的程序流程,本程序可用C 语言编写,也可用汇编编写此程序,程序主要的功能要实现允许输入三次密码,三次后报警,存放原始的密码,然后进行密码对比。
比较密码的对错,并进行判断,当密码正确时,锁体解开,亮绿灯,密码错误时亮黄灯,三次密码错误后,亮红灯,并报警。
且能够实现修改密码。
如图5.1所示:图5.1 程序框图运用C语言编写的程序如下:#include <AT89X52.H>#include<intrins.h>#include<math.h>unsigned char code ps[] ={1,2,3,4,5};unsigned char code dispcode[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40}; unsigned char pslen=9;unsigned char templen;unsigned char digit;unsigned char funcount;unsigned char digitcount;unsigned char psbuf[9];bit cmpflag;bit hibitflag;bit errorflag;bit rightflag;unsigned int second3;unsigned int aa;unsigned int bb;bit alarmflag;bit exchangeflag;unsigned int cc;unsigned int dd;bit okflag;unsigned char oka;unsigned char okb;void main(void){unsigned char i,j;P1=dispcode[digitcount];TMOD=0x01;TH0=(65536-500)/256;TL0=(65536-500)%256;TR0=1;ET0=1;EA=1;while(1){if(cmpflag==0){if(P3_6==0) //function key{for(i=10;i>0;i--)for(j=248;j>0;j--);if(P3_6==0){if(hibitflag==0){funcount++;if(funcount==pslen+2){funcount=0;cmpflag=1;}P1=dispcode[funcount];}else{second3=0;}}}if(P3_7==0) //digit key{for(i=10;i>0;i--)for(j=248;j>0;j--);if(P3_7==0){if(hibitflag==0){digitcount++;if(digitcount==10){digitcount=0;}P2=dispcode[digitcount ];if(funcount==1){pslen=digitcount;templen=pslen;}else if(funcount>1){psbuf[funcount-2]=di gitcount;}}else{}while(P3_7==0);}}}else{cmpflag=0;for(i=0;i<pslen;i++){if(ps!=psbuf){hibitflag=1;i=pslen;errorflag=1;rightflag=0;cmpflag=0;second3=0;goto a;}}cc=0;errorflag=0;rightflag=1;hibitflag=0;a:cmpflag=0;}}}void t0(void) interrupt 1 using 0{TH0=(65536-500)/256;TL0=(65536-500)%256;if((errorflag==1) && (rightflag==0)){bb++;if(bb==800){bb=0;alarmflag=~alarmflag;}if(alarmflag==1){P0_0=~P0_0;}aa++;if(aa==800){aa=0;P0_1=~P0_1;}second3++;if(second3==6400){second3=0;hibitflag=0;errorflag=0;rightflag=0;cmpflag=0;P0_1=1;alarmflag=0;bb=0;aa=0;}}if((errorflag==0) && (rightflag==1)) {P0_1=0;cc++;if(cc<1000){okflag=1;}else if(cc<2000){okflag=0;}else{errorflag=0;rightflag=0;hibitflag=0;cmpflag=0;P0_1=1;cc=0;oka=0;okb=0;okflag=0;P0_0=1;}if(okflag==1){oka++;if(oka==2){oka=0;P0_0=~P0_0;}}else{okb++;if(okb==3){okb=0;P0_0=~P0_0;}}}六心得体会通过为期两个星期的课设学习,了解了很多关于C51单片机系统的一些知识是,通过简易的CPU芯片,编写一些程序,了解了如何利用它组成一些小系统并实现所要求的功能。