电子密码锁控制电路设计-毕业设计_第1页
电子密码锁控制电路设计-毕业设计_第2页
电子密码锁控制电路设计-毕业设计_第3页
电子密码锁控制电路设计-毕业设计_第4页
电子密码锁控制电路设计-毕业设计_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上电子密码锁控制电路设计学生:XXX 指导教师:XXX内容摘要:本设计阐述通过Proteus软件成功仿真的电子密码锁的实现过程,选用AY89C52为核心的系统来实现按键输入、开锁和密码识别。采用具备I2C总线接口的E2PROM芯片来完成密码的存储,通过1602A液晶显示器提示程序运行状态和使用步骤,利用蜂鸣器模拟报警,发光二极管模拟锁的开关。该系统用C语言编写程序,与汇编语言相比具有更好的移植性和可读性,便于修改和增减功能。 关键词:Proteus 密码锁 AT89C52 C语言Design of electronic code lock circuit systemA

2、bstract: The paper introduces the implementation of the electronic code lock which was successfully simulated by Proteus. It uses AT89C52 single-chip microcomputer to achieve key input, the unlocking and identification of the code. It adopts I2C bus based E2PROM chip to complete the code's stora

3、ge, using LCD 1602A to prompt the program's running state and working procedures, adopting buzzer to imitate the alarm and LED to imitate the switch. It is convenient to modify and add functicccon by using C language program, which is more transplantable and reliable compared to assembly languag

4、e.Keywords: Proteus code lock AT89C52 C language 目 录专心-专注-专业电子密码锁控制电路设计前言 现在社会大家都很注重安全,安全问题也成为大家关心的问题之一。从古自今大家就发明了锁来保护自己的财产安全。人们对锁要求甚高,即要求可靠地防盗,又要使用方便。传统的门锁既要备有大量的钥匙,又要担心钥匙丢失后的麻烦。随着单片机的问世,出现了电子密码锁,其保密性高,使用灵活性好,安全系数高,故受到广大用户的青睐。电子密码锁通常使用ARM和AT89C52控制,单片机相对ARM实现较为简单,功能较为完善,因此使用单片机控制较多。用单片机控制的密码锁常使用汇编语

5、言编写程序,数码管做显示器 。但本设计使用移植性及可读性强的C语言编写;同时采用显示清楚、功率消耗小而且寿命长的1602A液晶显示器。从经济实用的角度出发,采用AT89C52单片机设计出一种具有密码设置、报警等功能的电子密码锁。 1 总体方案设计1.1 方案论证与比较方案一:以AT89C52为电子密码锁系统核心,使用4*4矩阵键盘作为数据输入方式,驱动1602A显示器提示程序运行过程和开锁的步骤,利用AT24C02芯片实现掉电存储。图1.1-1为AT89C52控制密码锁的系统原理框图。AT89C52AT24C02存储芯片矩阵键盘控制LCD1602A蜂鸣器提示电路电源模块LED密码校验提示图1.

6、1-1 AT89C52控制密码锁的系统原理框图方案二:以74LS112双JK触发器构成的数字逻辑电路控制方案,如图1.1-2。输入按扭开关组输入锁存电路密码存储电路开锁控制电路机械动作构件5秒定时电路20秒定时电路声光指示电路图1.1-2 数字逻辑控制方案电子密码锁原理框图1.2 方案选择由于利用单片机灵活的编程设计和强大的I/O端口,及其控制的准确性,不但能实现基本的密码锁功能,还可以增添掉电存储、声光提示等功能,故选用方案一。2 单元模块设计2.1 硬件支持使用的元器件有:核心芯片AT89C52、存储芯片AT24C02、液晶显示1602A、4×4矩阵键盘、报警蜂鸣器、发光二极管和

7、三极管。2.2 功能单元模块设计2.2.1 开锁机构通过单片机送给开锁执行机构,电路驱动电磁锁吸合,从而达到开锁的目的。当用户输入的密码正确时,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门的目的。本次设计中,基于节省成本考虑,用发光二极管代替电磁锁,信息通过LCD显示,并利用蜂鸣器和二极管声光指示。其中,绿发光二极管亮,表示开锁;否则,表示密码输入错误并开启报警电路。如图2.2.1-1所示,为密码锁开锁电路原理图。开锁驱动电路STC89C52单片机密码正确超次锁定电磁锁是否图2.2.1-1 密码锁开锁电路原理图2.2.2 矩阵键盘设计电路每一条水平(行线)与垂直线(列线)的

8、交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要M条行线和N条列线,即可组成具有M×N个按键的键盘。由于本设计中要求使用16个按键输入,为减少键盘与单片机接口时所占用的I/O线的数目,故使用矩阵键盘。本设计中,矩阵键盘行线和单片机P1.0-P1.3相连,列线与AT89C52 P1.4-P1.7相连。如图2.2.2-1所示,为矩阵键盘设计电路图。1234567890输入密码确认更改密码*图2.2.2-1 矩阵键盘设计电路图键盘扫描采用行扫描法,即依次置行线中的每一行为低电平,其余均为高电平,扫描列线电平状态,为低电平即表示该键按下。2.2.3 声音提示电路设计声音提示

9、电路采用小蜂鸣器提示。蜂鸣器能够根据脉冲信号,以及信号的频率发出各种不同的声音,这样可以根据系统要求在密码出入正确和密码输入错误时发出不同的声音提示,已达到报警的要求。如图2.2.3-1所示,为蜂鸣器电路。图2.2.3-1 蜂鸣器电路图2.2.4 显示模块设计本设计中,显示电路采用1602A液晶显示器显示。如下所示,图2.2.4-1为1602A液晶显示器的接口示意图,表2.2.4-1为液晶显示器接口说明。图2.2.4-1 液晶显示器借口示意图表2.2.4-1 接口说明管脚序名称电平功能描述1VSS0V接地2VCC5.0V电源输入3V0LCD驱动电压输入4RSH/L寄存器选择:RS=H,选择数据

10、寄存器;RS=L,选择指令寄存器5R/WH/L读写信号线:R/W=H,读操作;R/W=L,写操作6EH,HL使能信号7DB0H/L数据线8DB1H/L数据线9DB2H/L数据线10DB3H/L数据线11DB4H/L数据线12DB5H/L数据线13DB6H/L数据线14DB7H/L数据线15BLA5.0V背光电源正极16BLK0V背光电源负极本设计中液晶串口一共用到11根导线与单片机相连, 具体连接情况如表2.2.4-2显示模块与MCU连接说明所示。表2.2.4-2 显示模块与MCU连接说明序号1602A液晶显示器引脚STC89C52单片机引脚1RS引脚P2.5(A13)2R/W引脚P2.6(A

11、14)3E引脚P2.7(A15)4D0引脚P0.0(AD0)5D1引脚P0.1(AD1)6D2引脚P0.2(AD2)7D3引脚P0.3(AD3)8D4引脚P0.4(AD4)9D5引脚P0.5(AD5)10D6引脚P0.6(AD6)11D7引脚P0.7(AD7)2.2.5 AT24C02掉电存储单元的设计本设计中掉电存储单元采用AT24C02外部存储器,其作用是在系统电源断开的时候,存储当前设定的密码数据。AT24C02是一个2K位串行CMOS E2PROM,内部含有256个8位字节, 含一个16字节页写缓冲器,具有写保护功能。其采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为

12、1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。如下所示,图2.2.5-1为AT24C02管脚示意图,表2.2.5-1为AT24C02管脚说明。A0A1A2GNDSDASCLWPVCC12348765C02 图2.2.5-1 AT24C02管脚示意图表2.2.5-1 AT24C02管脚说明管脚名称功能管脚名称功能A0 A1 A2器件地址选择SDA串行数据/地址SCL串行时钟信号WP写保护VCC1.8V-6.0V工作电压VSS接地本设计中,AT24C02的SCL和SDA引脚接上拉电阻后与单片机的P3.4(T0)和P3.5(T

13、1)脚相连,其电路图如图2.2.5-2所示。图2.2.5-2 AT24C02掉电存储单元设计图3 程序设计与系统仿真3.1 模块介绍与硬件电路相关联,本系统软件包括主程序模块、密码比较判断模块、键盘扫描模块、修改密码模块、1602A液晶显示模块等。系统程序流程如图3.1-1所示。开始系统初始化调用E2PROM密码显示主界面输入密码判断密码确定密码开锁模拟声光锁定键盘YN返回Y判断次数N超过N次未超过N次再次输入密码密码设置完毕N设置新密码Y按键N判断按键值返回主界面NY设置解码次数产生随机密码输入密码N=0x84N=0x82N=0x11图3.1-1 系统程序流程图3.1.1 主程序模块主程序主

14、要用于定义全局变量,给全局变量赋初值,初始化EPROM,启动定时器以及从AT24C02中读取密码,为整个程序提供数据;检测按键;调用显示等功能。3.1.2 密码比较判断模块该模块的功能是将键盘输入的密码利用if语句与设定的密码进行逐个比较,若密码完全正确则开锁;若不正确,则开启报警电路,复位后重新输入密码。其密码输入和比较判决流程图如图3.1.2-1所示。输入密码核对键盘锁定,开启报警电路开锁,灯亮,可密码修改NY复位图3.1.2-1 密码输入和比较判决流程图3.1.3 键盘扫描模块键盘使用矩阵式键盘,由行和列组成,CPU对所有键盘进行监视,从而实现逐列扫描键盘确定被按键的具体位置、判断键盘上

15、有无键按下、消除去抖动、判断闭合的键是否释放等功能。如图3.1.3-1所示,为键盘扫描流程图。开始延时去抖动计算输入键值键值送入单片机有按键输入?有按键输入?有按键输入?返回NNYY图3.1.3-1 键盘扫描流程图3.1.4 修改密码模块在密码输入正确情况下,可以按下“重置密码”对密码进行重新设置,每设定一位就将密码送给AT24C02存储起来,当设置6位密码完毕后,系统将自动跳到程序开始,调用新设置的密码。图3.1.4-1为修改密码流程图。开始输入原密码密码比较比较正确?输入新密码再次输入新密码调用AT24C02中密码比较正确修改成功返回菜单键盘锁定,启动报警电路复位YN图3.1.4-1 修改

16、密码流程图3.2 Proteus仿真电路图3.2-1 电子密码锁仿真图4 系统功能本设计中系统可实现功能如下:通过切换,对输入的4位密码进行显示或隐藏;通过发光二极管和蜂鸣器,对解密正确或者错误进行声光报警;4位密码修改;在密码遗失情况下,通过初始密码进行密码再设置;采用AT24C02外部存储器,完成断电密码保护功能;具有1-9次的解锁次数任意设定功能;模拟密码箱随机产生密码,并进行解码。5 结束语从基本方案的制定,到硬件电路的选择,再到电路的焊接,最后进行程序调试在此期间我们遇到很多困难,但经过团队的不懈努力,终于击破了各个难点,达到的所需要的效果。在这次设计中,我们深刻认识到自身的不足缺少

17、实战经验。与此同时,也因为这次设计,我们得到一定的锻炼,体会到理论与实践相结合的重要意义。由于本次设计时间有限,一些设想没有完全实现,比如说:电子密码锁的网络通信扩展,人机界面智能化等。期待以后有机会对以上设想进行进一步研究实践。这次设计之所以能成功,必须要感谢那些帮助过我的人朋友同学,还有耐心教导过我的老师们。感谢我们的系主任,他很关心我们这个系的学生的学习情况,努力为我们提供最好的教学环境,还有我们的XX老师,他细心的帮助我们检查毕业设计,教我们如何才能更好的完成设计。是在你们的无私奉献下,我才能把这么多不懂的东西慢慢学会,并且把这次的设计做出来,谢谢你们。附录1:器件清单器件名称规格型号

18、编号数量单价(元)总价(元)备注MCUSTC89C52U1177外部存储器AT24C02U210.430.43LCD1602ALCD112020发光二极管3mmD110.050.05绿光普亮3mmD210.050.05红光普亮三极管8550Q110.20.2晶振12MHzX110.50.5电阻4.7k40.020.0810k20.020.0410K排阻RP110.50.5电容22PC1C220.050.110FC310.050.5IC座8脚IC座10.350.3540脚IC座10.30.3单排插座10.50.5蜂鸣器LS110.650.65电池盒5V电池盒144焊锡212导线111电路板9&#

19、215;15cm万用板11.51.5附录2:PCB图附录3:源程序#include <REG51.h>#include<intrins.h>#include <stdio.h>#include<stdlib.h>#define LCM_Data P0#define uchar unsigned char #define uint unsigned int#define w 4sbit key = P20;sbit alam = P21;sbit open_led=P22;sbit lcd1602_rs=P25;sbit lcd1602_rw=P2

20、6;sbit lcd1602_en=P27;sbit Scl=P34;sbit Sda=P35;sbit xianshi = P37;bit operation=0;bit pass=0;bit mmsd=0;void Delay5Ms(void)unsigned int TempCyc = 5552;while(TempCyc-);void Delay400Ms(void) unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA-) TempCycB=7269; while(TempCycB-); bit ReInp

21、utEn=0;bit s3_keydown=0;bit key_disable=0;unsigned char countt0,second;void Delay5Ms(void);static unsigned char tmp2=80;unsigned char m,d,sjmbz=0;unsigned char code a=0xFE,0xFD,0xFB,0xF7; unsigned char code name = " Tong Xin 08 "unsigned char code Correct = " right " unsigned cha

22、r code Error = " wrong " unsigned char code suijishu= "Rand Number: "unsigned char code set= "setting: "unsigned char code sjp = " keypad locked "unsigned char code start_line= "password: "unsigned char code codepass= " success " unsigned c

23、har code LockOpen= " open "unsigned char code SetNew = " Set New Word "unsigned char code Input = "input: "unsigned char code ResetOK = " Reset OK "unsigned char code Er_try= " try again! "unsigned char code again= " input again "unsigned c

24、har code initword= " chushihua "unsigned char InputData4;unsigned char CurrentPassword4=1,3,1,4; unsigned char TempPassword4;unsigned char N=0;unsigned char cun1;unsigned char C=3;unsigned char ErrorCont;unsigned char CorrectCont;unsigned char ReInputCont; unsigned char code initpassword4=

25、0,0,0,0;void mDelay(uint t) uchar i; while(t-) for(i=0;i<125;i+) ; void Nop(void) _nop_(); _nop_(); _nop_(); _nop_();void Start(void) Sda=1; Scl=1; Nop(); Sda=0; Nop();void Stop(void) Sda=0; Scl=1; Nop(); Sda=1; Nop();void Ack(void)Sda=0;Nop();Scl=1;Nop();Scl=0;void NoAck(void) Sda=1; Nop(); Scl=

26、1; Nop(); Scl=0;void Send(uchar Data) uchar BitCounter=8; uchar temp; do temp=Data; Scl=0; Nop(); if(temp&0x80)=0x80) Sda=1; else Sda=0; Scl=1; temp=Data<<1; Data=temp; BitCounter-; while(BitCounter); Scl=0;uchar Read(void) uchar temp=0;uchar temp1=0;uchar BitCounter=8;Sda=1;doScl=0;Nop();

27、Scl=1;Nop();if(Sda)temp=temp|0x01;elsetemp=temp&0xfe;if(BitCounter-1)temp1=temp<<1;temp=temp1;BitCounter-;while(BitCounter);return(temp);void WrToROM(uchar Data,uchar Address,uchar Num) uchar i; uchar *PData; PData=Data; for(i=0;i<Num;i+) Start(); Send(0xa0); Ack(); Send(Address+i); Ack

28、(); Send(*(PData+i); Ack(); Stop(); mDelay(20); void RdFromROM(uchar Data,uchar Address,uchar Num) uchar i; uchar *PData; PData=Data; for(i=0;i<Num;i+) Start(); Send(0xa0); Ack(); Send(Address+i); Ack(); Start(); Send(0xa1); Ack(); *(PData+i)=Read(); Scl=0; NoAck(); Stop(); #define yi 0x80 #defin

29、e er 0x80+0x40 void delay(uint xms)uint x,y;for(x=xms;x>0;x-) for(y=110;y>0;y-);write_1602com(uchar com)lcd1602_rs=0;lcd1602_rw=0; P0=com;delay(1);lcd1602_en=1;delay(1);lcd1602_en=0; write_1602dat(uchar dat)lcd1602_rs=1;lcd1602_rw=0; P0=dat;delay(1);lcd1602_en=1; delay(1);lcd1602_en=0;void lcd

30、_init(void)write_1602com(0x38);write_1602com(0x0c);write_1602com(0x06);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

31、;case (0x44): k=6;break;case (0x84): k='B'break;case (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

32、keynum(void) unsigned char row,col,i; P1=0xf0; if(P1&0xf0)!=0xf0) Delay5Ms(); Delay5Ms(); if(P1&0xf0)!=0xf0) row=P10xf0; i=0;P1=ai; while(i<4) if(P1&0xf0)!=0xf0) col=(P1&0xff); break; else i+; P1=ai; else return 0;while(P1&0xf0)!=0xf0);return (row|col); else return 0; void Res

33、etPassword(void)unsigned char i;unsigned char j;if(pass=0)pass=0;DisplayChar();Alam(4);else if(ReInputEn=1)if(N=4)ReInputCont+;if(ReInputCont=2)for(i=0;i<4;)if(TempPasswordi=InputDatai)i+;elsewrite_1602com(er);for(j=0;j<16;j+)write_1602dat(Errorj);Alam(4);pass=0;ReInputEn=0;ReInputCont=0;Displ

34、ayChar(); break; if(i=4)write_1602com(er);for(j=0;j<16;j+)write_1602dat(ResetOKj);Alam(2); WrToROM(TempPassword,0,4);ReInputEn=0;ReInputCont=0;CorrectCont=0;elseAlam(1);write_1602com(er);for(j=0;j<16;j+)write_1602dat(againj);for(i=0;i<4;i+)TempPasswordi=InputDatai;N=0; void Cancel(void)unsi

35、gned char i;unsigned char j;write_1602com(yi);for(j=0;j<16;j+)write_1602dat(namej); write_1602com(er);for(j=0;j<16;j+)write_1602dat(start_linej);Alam(2);for(i=0;i<4;i+)InputDatai=0;KEY=1;ALAM=1;operation=0;pass=0;ReInputEn=0;ErrorCont=0;CorrectCont=0;ReInputCont=0;open_led=1;sjmbz=0; s3_key

36、down=0;key_disable=0;mmsd=0;N=0; unsigned char szzh(unsigned char d) unsigned char j,k; j=d;switch(j)case (0): k=0x30;break;case (1): k=0x31;break;case (2): k=0x32;break;case (3): k=0x33;break;case (4): k=0x34;break;case (5): k=0x35;break;case (6): k=0x36;break;case (7): k=0x37;break;case (8): k=0x3

37、8;break;case (9): k=0x39;break; return(k); void Ensure(void)unsigned char i,j;RdFromROM(CurrentPassword,0,4); RdFromROM(cun,16,1); if(N=4) if(ReInputEn=0&&mmsd=0)for(i=0;i<4;) if(CurrentPasswordi=InputDatai)i+;else ErrorCont+;if(ErrorCont=C)key_disable=1;pass=0; break; else write_1602com(

38、er);for(j=0;j<16;j+)write_1602dat(Errorj); Alam(2);pass=0;break;if(i=4)CorrectCont+;if(CorrectCont=1) write_1602com(er);for(j=0;j<16;j+)write_1602dat(LockOpenj);Alam(2);KEY=0;pass=1;TR0=1; open_led=0;for(j=0;j<6;j+)InputDatai=0;elsewrite_1602com(er);for(j=0;j<16;j+)write_1602dat(SetNewj)

39、;Alam(2); ReInputEn=1;CorrectCont=0; elseif(InputData0=0)&&(InputData1=8)&&(InputData2=0)&&(InputData3=6) WrToROM(initpassword,0,4); write_1602com(er);for(j=0;j<16;j+)write_1602dat(initwordj);/Alam(2);N=0;elseif(ErrorCont=C) write_1602com(er); for(i=0;i<16;i+) write_160

40、2dat(sjpi); else if(ReInputEn=1&&mmsd=0)write_1602com(er);for(j=0;j<16;j+)write_1602dat(Er_tryj);Alam(4); else if(mmsd=1|sjmbz=1) if(sjmbz=1) WrToROM(TempPassword,0,4); else if(mmsd=1) WrToROM(cun,16,1); else ; mmsd=0; sjmbz=0;write_1602com(yi);for(j=0;j<16;j+)write_1602dat(namej);writ

41、e_1602com(er);for(j=0;j<16;j+)write_1602dat(codepassj);Alam(4); elsewrite_1602com(er);for(j=0;j<16;j+)write_1602dat(Errorj); Alam(4); pass=0; N=0;operation=1; void suiji(void) if(pass=1) unsigned int i,j,k;unsigned int suijima4; write_1602com(yi);for(j=0;j<16;j+)write_1602dat(namej); write_

42、1602com(er);for(j=0;j<16;j+)write_1602dat(suijishuj); srand(tmp2+)*TL0);for(i=0;i<4;i+)j=(int)(10.0*rand()/(56494.0);suijimai=j; k=szzh(j); TempPasswordi=suijimai;write_1602com(er+i+12);write_1602dat(k);sjmbz=1; Alam(2); else unsigned int j;write_1602com(er);for(j=0;j<16;j+)write_1602dat(Errorj); Alam(4);unsigned char xgmm(void)unsigned char KE,i,j,a=1;unsigned char G,k;if(pass=1)write_1602com(yi);for(i=0;i<16;i+)write_1602dat(namej);write_1602com(er);for(j=0;j<16;j+)write_1602

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论