收藏 分享(赏)

基于51单片机的简易电子密码锁.doc

上传人:hyngb9260 文档编号:6880976 上传时间:2019-04-25 格式:DOC 页数:27 大小:266.50KB
下载 相关 举报
基于51单片机的简易电子密码锁.doc_第1页
第1页 / 共27页
基于51单片机的简易电子密码锁.doc_第2页
第2页 / 共27页
基于51单片机的简易电子密码锁.doc_第3页
第3页 / 共27页
基于51单片机的简易电子密码锁.doc_第4页
第4页 / 共27页
基于51单片机的简易电子密码锁.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、 前言随着电子技术的发展,具有防盗报警等功能的电子密码锁代替密码量少、安全性差的机械式密码锁已是必然趋势。电子密码锁与普通机械锁相比,具有许多独特的优点:保密性好,防盗性强,可以不用钥匙,记住密码即可开锁等。目前使用的电子密码锁大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。下面就是现在主流电子密码锁:目前常见的遥控式电子防盗锁主要有光遥控和无线电遥控两类。键盘式电子密码锁从目前的技术水平和市场认可程度看,使用最为广泛的是键盘式电子密码锁,该产品主要应用于保险箱、保险柜和金库,还有一部分应用于保管箱和运钞车。卡式电子防盗锁使用各种“卡”作为钥匙的电子防盗锁是当前最

2、为活跃的产品,无论卡的种类如何多种多样,按照输入卡的操作方式,都可分为接触式卡和非接 触式卡两大类。生物特征防盗锁人的某些与生俱来的个性特征(如手、眼睛、声音的 特征)几乎不可重复,作为“钥匙”就是唯一的(除非被逼迫或伤害) 。因此,利用生物特征做密码的电子防盗锁,也特别适合金融业注重“验明正身”的行业特点。人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。锁自 古以来就是把守护门的铁将军,人们对它要求甚高,既要安全可靠的防盗,又要使用方便,这也是制锁者长期以来研制的主题。随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。据有关资料介绍,电子密码锁的研究从 20 世

3、纪 30 年代就开始了,在一些特殊场所早就有所应用。这种锁是通过键盘输入一组密码完成开锁过程。研究这种锁的初衷,就是为提高锁的安全性。由于电子锁的密钥量(密码 量)极大,可以与机械锁配合使用,并且可以避免因钥匙被仿制而留下安全隐患。电子锁只需记住一组密码,无需携带金属钥匙,免除了人们携带金属钥匙的烦恼,而被越来越多的人所欣赏。电子锁的种类繁多,例如数码锁,指纹锁,磁卡锁,IC 卡锁,生物锁等。但较实用的还是按键式电子密码锁。20 世纪 80 年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性提高,成本较高,是适合使用在安全性要求较高的场合,且需要有电源提供能量,使用还局限在一定范围

4、,难以普及,所以对它的研究一直没有明显进展。 目前,在西方发达国家,电子密码锁技术相对先进,种类齐全,电子密码锁已被 广泛应用于智能门禁系统中,通过多种更加安全,更加可靠的技术实现大门的管理。在我国电子锁整体水平尚处于国际上 70 年代左右,电子密码锁的成本还很高,市场上仍以按键电子锁为主,按键式和卡片钥匙式电子锁已引进国际先进水平,现国内有几个厂生产供应市场。但国内自行研制开发的电子锁,其市场结构尚未形成,应用还不广泛。国内的不少企业也引进了世界上先进的技术,发展前景非常可观。希望通过不断的努力,使电子密码锁在我国也能得到广泛应用。一、 作品功能:1、设置 6 位密码,密码通过键盘输入,若密

5、码正确,则将锁打开。2、密码可以由用户自己修改设定(只支持 6 位密码) ,锁打开后才能修改密码。修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。3、报警、锁定键盘功能。密码输入错误显示器会出现错误提示,若密码输入错误次数超过 3 次,蜂鸣器报警并且锁定键盘。4、AT24C02 保存密码,支持复位保存,掉电保存功能。二、按键说明按键定义图如图示:采用 4X4 键盘输入,键盘对应名称如下:1 2 3 A4 5 6 B7 8 9 C* 0 # D其中, 【09】为数字键,用于输入相应的密码,【*】号键为取消当前操作【#】号键为确认【D】键为修改密码其它键无功能及定义三、操

6、作说明:密码锁初始密码为:000000.1、开锁:插上电源后,程序自动调入初始密码,此时依次输 入:000000,然后按【#】 (确认)键,此时锁会打开,可以看到显示 open,密码锁打开。2、退出并关锁:按下【*】 (取消)键,此时锁关闭,所有输入清除。3、修改密码:在开锁状态下,再次输入正确的密码并按下【#】 (确认)键,此时听到两声提示,输入新的六位密码并按【D】 (重设)键,再重复输入一次新密码并按【D】 ,会听到两声提示音,表示重设密码成功,内部保存新密码并存储到 AT24C02。 (如两次输入的新密码不一样,则重设密码失败) 。4、报警并锁定键盘:当输入密码错误后,报警并锁定键盘

7、3 秒,如 3 秒内又有按键,3 秒再启动。5、当重置新密码时,新密码会保存于 AT24C02 存储器里。四、框图及流程图 1、系统结构框图2、主程序设计流程图NYN N YAT89S52显示模块报警电路开锁电路密码存储模块复位电路键盘输入模块初始化密码正确输入旧密码出错报警开锁 原密码相同开锁 修改3、键功能程序流程图。 YNYNYNYN设新密码返回键功能程序键值=09 ?键值=开锁?键值=确认?键值=设置?返回密码输入程序确认程序设置程序开锁程序4、开锁程序流程图Y开锁LCD 初始化输入密码按开锁键报警程序确认程序输入密码正确?开锁成功返回N5.电子密码锁原理图程序(c语言)#includ

8、e #include#define LCM_Data P0#define uchar unsigned char #define uint unsigned int#define w 6 /定义密码位数sbit lcd1602_rs=P25;sbit lcd1602_rw=P26;sbit lcd1602_en=P27;sbit Scl=P34; /24C02串行时钟sbit Sda=P35; /24C02串行数据sbit ALAM = P21; /报警sbit KEY = P20; /开锁sbit open_led=P22; /开锁指示灯bit operation=0; /操作标志位bit

9、pass=0; /密码正确标志bit ReInputEn=0; /重置输入充许标志bit s3_keydown=0; /3秒按键标志位bit key_disable=0; /锁定键盘标志unsigned char countt0,second; /t0中断计数器,秒计数器void Delay5Ms(void);unsigned char code a=0xFE,0xFD,0xFB,0xF7; /控盘扫描控制表unsigned char code start_line = “password: “;unsigned char code name = “=Coded Lock=“; /显示名称un

10、signed char code Correct = “ correct “; /输入正确 unsigned char code Error = “ error “; /输入错误unsigned char code codepass = “ pass “; unsigned char code LockOpen = “ open “; /OPENunsigned char code SetNew = “SetNewWordEnable“;unsigned char code Input = “input: “; /INPUTunsigned char code ResetOK = “Reset

11、PasswordOK “;unsigned char code initword = “Init password.“;unsigned char code Er_try = “error,try again!“;unsigned char code again = “input again “;unsigned char InputData6; /输入密码暂存区unsigned char CurrentPassword6=1,3,1,4,2,0; /当前密码值unsigned char TempPassword6;unsigned char N=0; /密码输入位数记数unsigned ch

12、ar ErrorCont; /错误次数计数unsigned char CorrectCont; /正确输入计数unsigned char ReInputCont; /重新输入计数unsigned char code initpassword6=0,0,0,0,0,0;/=5ms延时=void Delay5Ms(void)unsigned int TempCyc = 5552;while(TempCyc-);/=400ms延时=void Delay400Ms(void)unsigned char TempCycA = 5;unsigned int TempCycB;while(TempCycA-

13、)TempCycB=7269;while(TempCycB-);/=24C02=void mDelay(uint t) /延时 uchar i;while(t-)for(i=0;i0;x-)for(y=110;y0;y-);/-写指令-write_1602com(uchar com)/*液晶写入指令函数*lcd1602_rs=0;/数据/指令选择置为指令lcd1602_rw=0; /读写选择置为写P0=com;/送入数据delay(1);lcd1602_en=1;/拉高使能端,为制造有效的下降沿做准备delay(1);lcd1602_en=0;/en由高变低,产生下降沿,液晶执行命令/-写数据

14、-write_1602dat(uchar dat)/*液晶写入数据函数*lcd1602_rs=1;/数据/指令选择置为数据lcd1602_rw=0; /读写选择置为写P0=dat;/送入数据delay(1);lcd1602_en=1; /en置高电平,为制造下降沿做准备delay(1);lcd1602_en=0; /en由高变低,产生下降沿,液晶执行命令/-初始化-void lcd_init(void)write_1602com(0x38);/设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据write_1602com(0x0c);/开显示不显示光标write_1602com(0x0

15、6);/整屏不移动,光标自动右移write_1602com(0x01);/清显示/=将按键值编码为数值=unsigned char coding(unsigned char m) unsigned char k;switch(m)case (0x18): k=1;break;case (0x28): k=2;break;case (0x48): k=3;break;case (0x88): k=A;break;case (0x14): k=4;break;case (0x24): k=5;break;case (0x44): k=6;break;case (0x84): k=B;break;c

16、ase (0x12): k=7;break;case (0x22): k=8;break;case (0x42): k=9;break;case (0x82): k=C;break;case (0x11): k=*;break;case (0x21): k=0;break;case (0x41): k=#;break;case (0x81): k=D;break;return(k);/=按键检测并返回按键值=unsigned char keynum(void)unsigned char row,col,i;P1=0xf0;if(P1Delay5Ms();if(P1 /确定行线i=0;P1=ai

17、; /精确定位while(i4)if(P1 /确定列线break; /已定位后提前退出 else i+;P1=ai;else return 0;while(P1return (row|col); /行线与列线组合后返回else return 0; /无键按下时返回0/=一声提示音,表示有效输入=void OneAlam(void)ALAM=0;Delay5Ms();ALAM=1;/=二声提示音,表示操作成功=void TwoAlam(void)ALAM=0;Delay5Ms();ALAM=1;Delay5Ms();ALAM=0;Delay5Ms();ALAM=1;/=三声提示音,表示错误=vo

18、id ThreeAlam(void)ALAM=0;Delay5Ms();ALAM=1;Delay5Ms();ALAM=0;Delay5Ms();ALAM=1;Delay5Ms();ALAM=0;Delay5Ms();ALAM=1;/=显示输入的N个数字,用H代替以便隐藏=void DisplayOne(void)/ DisplayOneChar(9+N,1,*);write_1602com(yi+5+N);write_1602dat(*);/=显示提示输入=void DisplayChar(void)unsigned char i;if(pass=1)/DisplayListChar(0,1,

19、LockOpen);write_1602com(er);for(i=0;i16;i+)write_1602dat(LockOpeni);elseif(N=0)/DisplayListChar(0,1,Error);write_1602com(er);for(i=0;i16;i+)write_1602dat(Errori);else/DisplayListChar(0,1,start_line);write_1602com(er);for(i=0;i16;i+)write_1602dat(start_linei);void DisplayInput(void)unsigned char i;if

20、(CorrectCont=1)/DisplayListChar(0,0,Input);write_1602com(er);for(i=0;i16;i+)write_1602dat(Inputi);/=重置密码=/=void ResetPassword(void)unsigned char i;unsigned char j;if(pass=0)pass=0;DisplayChar();ThreeAlam();elseif(ReInputEn=1)if(N=6)ReInputCont+;if(ReInputCont=2)for(i=0;i6;)if(TempPasswordi=InputData

21、i) /将两次输入的新密码作对比i+;else/DisplayListChar(0,1,Error);write_1602com(er);for(j=0;j16;j+)write_1602dat(Errorj);ThreeAlam(); /错误提示pass=0;ReInputEn=0; /关闭重置功能,ReInputCont=0;DisplayChar();break; if(i=6)/DisplayListChar(0,1,ResetOK);write_1602com(er);for(j=0;j16;j+)write_1602dat(ResetOKj);TwoAlam(); /操作成功提示W

22、rToROM(TempPassword,0,6); /将新密码写入24C02存储ReInputEn=0;ReInputCont=0;CorrectCont=0;elseOneAlam();/DisplayListChar(0, 1, again); /显示再次输入一次write_1602com(er);for(j=0;j16;j+)write_1602dat(againj);for(i=0;i6;i+)TempPasswordi=InputDatai; /将第一次输入的数据暂存起来N=0; /输入数据位数计数器清零/=输入密码错误超过三过,报警并锁死键盘=void Alam_KeyUnable

23、(void)P1=0x00;ALAM=ALAM;Delay5Ms();/=取消所有操作=void Cancel(void)unsigned char i;unsigned char j;/DisplayListChar(0, 1, start_line); write_1602com(er);for(j=0;j16;j+)write_1602dat(start_linej);TwoAlam(); /提示音for(i=0;i6;i+)InputDatai=0;KEY=1; /关闭锁ALAM=1; /报警关operation=0; /操作标志位清零pass=0; /密码正确标志清零ReInputE

24、n=0; /重置输入充许标志清零ErrorCont=0; /密码错误输入次数清零CorrectCont=0; /密码正确输入次数清零ReInputCont=0; /重置密码输入次数清零 open_led=1;s3_keydown=0;key_disable=0;N=0; /输入位数计数器清零/=确认键,并通过相应标志位执行相应功能=void Ensure(void)unsigned char i,j;RdFromROM(CurrentPassword,0,6); /从24C02里读出存储密码if(N=6)if(ReInputEn=0) /重置密码功能未开启for(i=0;i6;)if(Curr

25、entPasswordi=InputDatai)i+;else ErrorCont+;if(ErrorCont=3) /错误输入计数达三次时,报警并锁定键盘write_1602com(er);for(i=0;i16;i+)write_1602dat(Errori);doAlam_KeyUnable();while(1);elseTR0=1; /开启定时key_disable=1; /锁定键盘pass=0;break;if(i=6)CorrectCont+;if(CorrectCont=1) /正确输入计数,当只有一次正确输入时,开锁,/DisplayListChar(0,1,LockOpen)

26、;write_1602com(er);for(j=0;j16;j+)write_1602dat(LockOpenj);TwoAlam(); /操作成功提示音KEY=0; /开锁pass=1; /置正确标志位TR0=1; /开启定时open_led=0; /开锁指示灯亮for(j=0;j6;j+) /将输入清除InputDatai=0;else /当两次正确输入时,开启重置密码功能/DisplayListChar(0,1,SetNew);write_1602com(er);for(j=0;j16;j+)write_1602dat(SetNewj);TwoAlam(); /操作成功提示ReInpu

27、tEn=1; /允许重置密码输入CorrectCont=0; /正确计数器清零else /=当第一次使用或忘记密码时可以用131420对其密码初始化=if(InputData0=1) /强制将初始密码写入24C02存储/DisplayListChar(0,1,initword); /显示初始化密码write_1602com(er);for(j=0;j16;j+)write_1602dat(initwordj);TwoAlam();Delay400Ms();TwoAlam();N=0;else/DisplayListChar(0,1,Error);write_1602com(er);for(j=

28、0;j16;j+)write_1602dat(Errorj);ThreeAlam(); /错误提示音pass=0;else /当已经开启重置密码功能时,而按下开锁键,/DisplayListChar(0,1,Er_try);write_1602com(er);for(j=0;j16;j+)write_1602dat(Er_tryj);ThreeAlam();else/DisplayListChar(0,1,Error);write_1602com(er);for(j=0;j16;j+)write_1602dat(Errorj);ThreeAlam(); /错误提示音pass=0;N=0; /将

29、输入数据计数器清零,为下一次输入作准备operation=1;/=主函数=void main(void)unsigned char KEY,NUM;unsigned char i,j;P1=0xFF; TMOD=0x11;TL0=0xB0;TH0=0x3C;EA=1;ET0=1;TR0=0;Delay400Ms(); /启动等待,等LCM讲入工作状态lcd_init(); /LCD初始化write_1602com(yi);/日历显示固定符号从第一行第0个位置之后开始显示for(i=0;i16;i+)write_1602dat(namei);/向液晶屏写日历显示的固定符号部分write_1602

30、com(er);/时间显示固定符号写入位置,从第2个位置后开始显示for(i=0;i16;i+)write_1602dat(start_linei);/写显示时间固定符号,两个冒号write_1602com(er+9); /设置光标位置write_1602com(0x0f); /设置光标为闪烁Delay5Ms(); /延时片刻(可不要)N=0; /初始化数据输入位数while(1)if(key_disable=1)Alam_KeyUnable();elseALAM=1; /关报警KEY=keynum();if(KEY!=0)if(key_disable=1)second=0;elseNUM=c

31、oding(KEY);switch(NUM)case (A): ; break;case (B): ; break;case (C): ; break;case (D): ResetPassword(); break; /重新设置密码case (*): Cancel(); break; /取消当前输入case (#): Ensure(); break; /确认键,default: /DisplayListChar(0,1,Input);write_1602com(er);for(i=0;i16;i+)write_1602dat(Inputi);operation=0;if(N6) /当输入的密

32、码少于6位时,接受输入并保存,大于6位时则无效。 OneAlam(); /按键提示音/DisplayOneChar(6+N,1,*);for(j=0;j=N;j+)write_1602com(er+6+j);write_1602dat(*);InputDataN=NUM;N+;else /输入数据位数大于6后,忽略输入N=6;break; /*中断服务函数*void time0_int(void) interrupt 1 TL0=0xB0;TH0=0x3C;/TR0=1;countt0+;if(countt0=20)countt0=0;second+;if(pass=1)if(second=1

33、)open_led=1; /关指示灯TR0=0; /关定时器TL0=0xB0;TH0=0x3C;second=0;elseif(second=3)TR0=0;second=0;key_disable=0;s3_keydown=0;TL0=0xB0;TH0=0x3C;elseTR0=1;结论,致谢,参考文献,原理图放在程序前毕业设计是学生即将完成学业的最后一次作业,它既是对所学知识的全面总结和综合应用,又是今后走向社会的实际操作应用铸就了一个良好开端,毕业设计是我对所学知识理论的检验与总结,此次毕业设计是一次非常难得的理论与实际相结合的机会,通过这次比较难完整的毕业设计,我摆脱了单纯的理论知识学

34、习状态,和实际设计的结合锻炼了我的综合运用所学的专业基础知识,同时也提高我查阅文献资料、设计手册、设计规范以及电脑制图等其它专业能力水平,而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,经验得到了丰富,并且使我的意志和耐力都得到了不同的提升,这是我们希望看到的也正是我们进行毕业设计的目的所在。在此次试验中,我通过查阅大量的有关资料,与同学交流经验和自学,并向老师请教等方式完成的,岁月如梭,三年的大学时光即将结束,这个实验和论文是在电子教研室105所有老师的知道与鼓励下完成的,老师们渊博的学识、严谨的治学态度、精益求精的工作态度和诲人不倦的高尚师德都深深感染和激励着我。在三年时光里,老师们不仅在学习上照顾我,同时也在思想和生活上给与我无微不至的关怀。在此,谨向105所有老师致以诚挚的感谢。我还要感谢的是09电气数控的所有同学,是他们让我的大学生活变得更加丰富多彩,他们给予了我生活和学习上的帮助。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报