基于AT24C02电子密码锁的设计_第1页
基于AT24C02电子密码锁的设计_第2页
基于AT24C02电子密码锁的设计_第3页
基于AT24C02电子密码锁的设计_第4页
基于AT24C02电子密码锁的设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、设计题目:基于AT24C02电子密码锁的设计错误!未定义书签。错误!未定义书签。错误!未定义书签。错误!未定义书签。错误!未定义书签。错误!未定义书签。错误!未定义书签。错误!未定义书签。错误!未定义书签。66错误!未定义书签。7889错误!未定义书签。9错误!未定义书签。错误!未定义书签。1515错误!未定义书签。错误!未定义书签。目录1设计任务2系统总体方案设计2.1各个模块方案论证2.1.1芯片选择2.1.2显示器的选择2.2总体方案设计3硬件电路设计3.1单片机最小系统32AT24C20储存密码电路.3.3矩阵键盘电路3.4液晶显示电路4系统软件设计4.1主程序流程图4.2子程序流程图

2、AT24C20子程序流程图1602子程序流程图.5实物调试5.1实性物能分析6心得体会附录1(1)系统总电路图(2)系统仿真图附录2(1)程序清单1.设计任务基本要求:采用AT24C02与单片机STC89C52相结合设计电子密码锁,然后通过矩阵键盘按键进行密码的输入、清除、更改、开锁等功能。系统总体方案设计2.1各个模块方案讨论2.1.1芯片选择由于设计的是电子密码锁,而单片机AT89C52为8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控

3、制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端P0P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(3239脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信

4、号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。所以我们以此单片机为核心,采用AT24C02作为储存密码芯片,利用单片机进行控制,外加显示电路和键盘电路,即构成一个基本的电子密码锁系统。2.1.2显示器的选择LCD1602具有微功耗、体积小、显示内容丰富、超薄轻巧,对比度可调、内含复位电路、提供各种控制命令等特点,完全满足本次设计的需要,因此,选择LCD1602作为显示器进行使用。2.2总体方案设计密码锁设计的关键问题是实现密码的输入、清除、更改、开锁等功能:1、密码输入功能:插上电源后,第一次使用或忘记密码时可以用111111对其密码初始化,LCD提示

5、输入密码,输入密码时在1602LCD上显示“*”每输入一个数字,LCD上向右移一格,同时“*”加一个。值到输入6个“*”为此,若一次性输入大于6个密码,则只保留前6位密码,按“确定”生效。若按取消键,锁关闭,所有输入清除错误。输入计数达三次时,报警并锁定键盘。2、密码更改功能:密码锁在打开的状态再次输入原密码,会有提示输入新密码,输入新密码后按修改键再次输入新密码后就能成功修改密码(初始密码是6个1)。3、当密码输入成功后,或者密码修改成功后,LCD上有提示成功字符LED灯亮,同时蜂鸣器响两声作为提示。AT24C02电子密码锁总体设计方案如图1所示。图1总体设计方案系统硬件电路设计3.1单片机

6、最小系统单片机是电子时钟系统的主控制器。其最小系统主要由STC89C52单片机、晶振电路及单片机复位电路组成。晶振系统由两个30pf的陶瓷电容和一个12MHz的晶振组成,分别接在XTAL1、XTAL2上,在单片机内部,这两个端口是一个反相放大器的输入端,这个放大器构成了片内振荡器,它决定了单片机的时钟周期。单片机有一个复位引脚RST,高电平有效,只要RST保持高电平,单片机将循环复位,复位期间,ALE、PSEN输出高电平。RST从高电平变为低电平之后,PC指针变为0000H,使单片机从程序存储器地址为0000H的单元开始执行。当单片机执行程序出错或进入死循环时,也可按复位按钮重新启动。单片机最

7、小系统如图2所示。图2AT24C02储存密码电路.为了保存用户设置的密码,本系统使用AT24C02用来保存用户设置的密码,它的SCL、SDA端分别接单片机的TO、T1端,用于与单片机之间读写操作的数据传输;WP接低电平表示单片机可以对器件进行正常的读/写操作;E0、El、E2是器件地址输入端,都接低电平表示只有一个AT24C02被器件寻址。该电路要注意的是SCL、SDA必须加上一上接电阻,阻值为4.7K。用户设置的密码存放在ST24C02中,当需要更改或读取用户密码时,只需对ST24C02里的数据更改或读取。ST24C02储存密码电路如图3所示。U1VSSMODE/WCE2SCLElSDAEO

8、VDDST24C02R24RbSR11RES3.3矩阵键盘电路矩阵键盘电路主要作用就是输入密码,它由行线和列线组成,按键位于行、列的交叉点上,行列分别连接到按键开关的两端。无按键按动作时列线处于高电平状态;有按键按下时,交点的行线和列线相通,列线电平状态将由与此列线相连的行线电平决定。行线电平如果低,则列线电平为低;行线电平如果为高,则列线电平也为高。这是识别矩阵式键盘按键是否被按下的关键所在。由于矩阵键盘中行、列线为多键公用,各按键均影响该键所在的行和列的电平,所以必须将行、列线信号配合起来作适当的处理,才能确定闭合键所在的位置。矩阵式键盘节省了好多的I/O口,适用于按键数量比较多的场合。本

9、设计的4*4键盘即采用矩阵式键盘。矩阵键盘电路图如图4所示TmalEw*IE|TIII|r.|rIIIAQ.图43.4液晶显示电路1602的引脚功能:第1脚:为地电源。第2脚:VCC接5V正电源。第3脚:为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个20K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为

10、低电平时可以写入数据。第6脚:E端为使能端,E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第1516脚:15脚接VCC,16脚接地。1602电路图如图5所示。KZI2-UC_Jlta?Er:口暫亘蔦-UK!r土-1U.SZ令4系统软件设计由于单片机是可编程控制器,故采用c语言对单片机进行程序的编写。主程序主要由矩阵键盘程序、1602液晶屏程序及AT24C02程序组成。4.1主程序流程图图6上图6为主程序流程图。开始先初始化,然后屏幕显示password先扫描按键,确认是否可以按键按出密码,如果没有按键按下,则重新扫描按键,若有键按下则按下修改键并保存密码就

11、会出现新的密码,若不按下修改键则还是原来刚设置的初始密码,按下输入键并输入密码,不按下输入键则重新回到扫描按键步骤,若密码正确则开锁。密码错误则报警显示错误。4.2子程序流程图4.2.1AT24C02子程序流程图图7图7展示了AT24C02的一个工作流程:首先是对AT24C02进行初始化,方便密码的输入,当输入的密码正确,就会解锁,显示屏显示open,否则显示error并重新输入密码。4.2.21602子程序流程图图81602显示器的工作流程图展示了1602的工作流程:启动时,首先对1602进行初始化,然后检测有没有数据写入,当有数据写入时,1602便读出数据并显示,没有数据写入时,1602就

12、一直处于等待中,直至有数据写入。1602子程序流程图如图8所示。5实物调试5.1实物性能分析用KEIL编写程序软件编写程序、经过Proteus仿真软件仿真调试之后,确认了此系统可正常运行,在这样的前提下,我们利用一个单片机最小系统、一块用电路板焊接的模块和一个1602液晶显示屏完成了第一次实物仿真。图9图9界面显示为输入密码,这时我们按下按键输入密码。当我们输入密码时,下图为密码正确的实物图,如图10所示。图10当密码输入正确时,显示屏就会显示OPEN。若密码输入错误,下图为密码输入错误的实物图,如图11所示。图11当我们输入错误的密码时,显示屏就会显示error。下图为密码修改成功的实物图,

13、如图12所示。图12当密码修改成功时,显示屏就会显示RestPasswordOK。=CodedL匚k=esetFassidord0K-6心得体会通过此次课程设计,我重新把单片机及相关知识联系在了一起虽然掌握的知识不是很多,但通过查找资料我还是对单片机有了很好的了解和掌握。在设计中我才发现单片机虽然体积小但是功能很强大,在生活中很多地方都可以用到它。单片机这门学科博大精深,在以后的学习中只有多看书,理论与实践结合才能把这门课掌握好。掌握了LCD的使用方法与编程。同时我也体会到合作的好处。让我懂得了如何合作,对不同看法发表自己的意见。此次设计中最要的一点是,让我知道了,理论联系实践的好处。不管理论

14、学的再怎么好都必须联系实践,只有在实践中我们才会更加懂得如何运用自己的所学,在实践中将自己的知识实物化。理论联系实践是我们获取知识的最佳途径。参考文献谭浩强主编.C程序设计题解与上机指导(第3版)M.北京,清华大学出版社,2005.16-24谢维成杨家国董秀成,单片机原理与应用及C51程序设计(第2版)M,北京,清华大学出版社,2009.7.25-36附录1(1)系统总电路图系统总电路图,如图12所示。nIBIEjj$IfI-LL-+nr-LrJ*.上-mm閒KLktKtmYl!丄7图13(2)系统仿真图系统仿真图,如图13所示。图14PCB板设计使用的PCB如图14所示4o-OAMOCfrm

15、Dsoo0oQRS图15附录2程序清单#include#include#defineLCM_DataP0#defineucharunsignedchar#defineuintunsignedint/#defineBusy0 x80/用于检测LCM状态字中的Busy标识#definew6/定义密码位数sbitlcd1602_rs二P2“5;sbitlcd1602_rw=P2飞;sbitlcd1602_en二P2“7;sbitScl=P34;/24C02串行时钟sbitSda=P35;/24C02串行数据sbitALAM=P2;/报警sbitKEY=P20;/开锁sbitopen_led=P22;

16、/开锁指示灯bitoperation=0;/操作标志位bitpass=0;/密码正确标志/bitResetEn=0;/重设密码充(允)许标志bitReInputEn=0;/重置输入充(允)许标志bits3_keydown=0;/3秒按键标志位bitkey_disable=0;/锁定键盘标志unsignedcharcountt0,second;/t0中断计数器,秒计数器voidDelay5Ms(void);unsignedcharcodea二0 xFE,0 xFD,0 xFB,0 xF7;/控盘扫描控制表unsignedcharcodestart_line=password:;unsignedc

17、harcodename=2=CodedLock=;/显示名称unsignedcharcodeCorrect=correct;/输入正确unsignedcharcodeError=error;/输入错误unsignedcharcodecodepass=pass;unsignedcharcodeLockOpen=open;/OPENunsignedcharcodeSetNew=SetNewWordEnable;unsignedcharcodeInput=input:;/INPUTunsignedcharcodeResetOK=ResetPasswordOK;unsignedcharcodeinit

18、word=Initpassword.;unsignedcharcodeEr_try=error,tryagain!;unsignedcharcodeagain=inputagain;unsignedcharInputData6;/输入密码暂存区unsignedcharCurrentPassword6=1,1,1,1,1,1;/当前密码值unsignedcharTempPassword6;unsignedcharN=0;/密码输入位数记数unsignedcharErrorCont;/错误次数计数unsignedcharCorrectCont;/正确输入计数unsignedcharReInputC

19、ont;/重新输入计数unsignedcharcodeinitpassword6=1,1,1,1,1,1;5ms延时二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二voidDelay5Ms(void)unsignedintTempCyc=5552;while(TempCyc-);/=400ms延时=voidDelay400Ms(void)unsignedcharTempCycA=5;unsignedintTempCycB;while(TempCycA-)TempCycB=7269;while(TempCycB-);/=24C02=voidmDelay(uintt)/延时uchari

20、;while(t-)for(i=0;i125;i+);voidNop(void)/空操作_nop_();_nop_();_nop_();_nop_();/*起始条件*/voidStart(void)Sda=1;Scl=1;Nop();Sda=0;Nop();/*停止条件*/voidStop(void)Sda=0;Scl=1;Nop();Sda=1;Nop();/*应答位*/voidAck(void)Sda=0;Nop();Scl=1;Nop();Scl=0;/*反向应答位*/voidNoAck(void)Sda=1;Nop();Scl=1;Nop();Scl=O;/*发送数据子程序,Data为

21、要求发送的数据*/voidSend(ucharData)ucharBitCounter=8;chartemp;dotemp=Data;Scl=0;Nop();if(temp&0 x80)=0 x80)Sda=1;elseSda=0;Scl=1;temp=Data1;Data=temp;BitCounter-;while(BitCounter);Scl=0;/*读一字节的数据,并返回该字节值*/ucharRead(void)uchartemp=0;uchartemp1=0;ucharBitCounter=8;Sda=1;doScl=0;Nop();Scl=1;Nop();if(Sda)temp=

22、temp|0 x01;elsetemp=temp&0 xfe;if(BitCounter-1)temp1=temp1;temp=temp1;BitCounter-;while(BitCounter);return(temp);voidWrToROM(ucharData,ucharAddress,ucharNum)uchari;uchar*PData;PData=Data;for(i=0;iNum;i+)Start();Send(0 xa0);Ack();Send(Address+i);Ack();Send(*(PData+i);Ack();Stop();mDelay(20);voidRdFro

23、mROM(ucharData,ucharAddress,ucharNum)uchari;uchar*PData;PData=Data;for(i=0;i0;x-)for(y=110;y0;y-);/写指令voidwrite_1602com(ucharcom)/*液晶写入指令函数*lcd1602_rs=0;/数据/指令选择置为指令lcd1602_rw=0;/读写选择置为写P0=com;/送入数据delay(1);lcd1602_en=1;/拉高使能端,为制造有效的下降沿做准备delay(1);lcdl602_en=0;/en由高变低,产生下降沿,液晶执行命令return;/写数据lcd1602_

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

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

26、eak;case(0 x22):k=8;break;case(0 x42):k=9;break;case(0 x82):k=C;break;case(0 x11):k=*;break;case(0 x21):k=0;break;case(0 x41):k=#;break;case(0 x81):k=D;break;return(k);/=按键检测并返回按键值=unsignedcharkeynum(void)unsignedcharrow,col,i;P1=0 xf0;if(P1&0 xf0)!=0 xf0)Delay5Ms();Delay5Ms();if(P1&0 xf0)!=0 xf0)ro

27、w二POxfO;/确定行线i=0;P1=ai;/精确定位while(i4)if(P1&0 xf0)!=0 xf0)col=(P1&0 xff);/确定列线break;/已定位后提前退出elsei+;P1=ai;elsereturn0;while(P1&0 xf0)!=0 xf0);return(row|col);/行线与列线组合后返回elsereturn0;/无键按下时返回0声提示音,表示有效输入voidOneAlam(void)ALAM=0;Delay5Ms();ALAM=1;/=二声提示音,表示操作成功=voidTwoAlam(void)ALAM=0;Delay5Ms();ALAM=1;D

28、elay5Ms();ALAM=0;Delay5Ms();ALAM=1;/=三声提示音,表示错误=voidThreeAlam(void)ALAM=0;Delay5Ms();ALAM=1;Delay5Ms();ALAM=0;Delay5Ms();ALAM=1;Delay5Ms();ALAM=0;Delay5Ms();ALAM=1;/=显示输入的N个数字,用*代替以便隐藏=voidDisplayOne(void)/DisplayOneChar(9+N,1,*);write_1602com(yi+5+N);write_1602dat(*);/=显示提示输入=voidDisplayChar(void)u

29、nsignedchari;if(pass=1)/DisplayListChar(0,1,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_1602dat(Errorj);write_1602com(er);for(i=0;i16;i+)wr

30、ite_1602dat(start_linei);voidDisplayInput(void)unsignedchari;if(CorrectCont=1)/DisplayListChar(0,0,Input);write_1602com(er);for(i=0;i16;i+)write_1602dat(Inputi);/=重置密码=voidResetPassword(void)unsignedchari;unsignedcharj;/ResetEn=1;/开启重置功能if(pass=0)pass=0;DisplayChar();/写屏函数ThreeAlam();elseif(ReInputE

31、n=1)/打开重置功能if(N=6)ReInputCont+;if(ReInputCont=2)for(i=0;i6;)if(TempPasswordi=InputDatai)/将两次输入的新密码作对比i+;else/DisplayListChar(0,1,Error);write_1602com(er);for(j=0;j16;j+)ThreeAlam();pass=0;ReInputEn=0;ReInputCont=0;DisplayChar();break;if(i=6)/错误提示/关闭重置功能,/输入次数清零/写屏函数/DisplayListChar(0,1,ResetOK);writ

32、e_1602com(er);for(j=0;j16;j+)write_1602dat(ResetOKj);TwoAlam();/操作成功提示WrToR0M(TempPassword,0,6);/将新密码写入24C02存储ReInputEn=0;/关闭重置功能?ReInputCont=0;/输入次数清零/ResetEn=0;CorrectCont=0;elseOneAlam();/DisplayListChar(0,1,again);/显示再次输入一次write_1602com(er);for(j=0;j16;j+)write_1602dat(againj);for(i=0;i6;i+)Temp

33、Passwordi=InputDatai;/将第一次输入的数据暂存起来N=0;/输入数据位数计数器清零/=输入密码错误超过三过,报警并锁死键盘=voidAlam_KeyUnable(void)P1=0 x00;ALAM=ALAM;Delay5Ms();/=取消所有操作=voidCancel(void)unsignedchari;unsignedcharj;/DisplayListChar(0,1,start_line);write_1602com(er);for(j=0;j16;j+)write_1602dat(start_linej);TwoAlam();/提示音for(i=0;i6;i+)

34、InputDatai=0;KEY=1;/关闭锁ALAM=1;/报警关锁operation=0;/操作标志位清零pass=0;/密码正确标志清零/ResetEn=0;/重设密码充许标志清零ReInputEn=0;/重置输入充许标志清零ErrorCont=0;/密码错误输入次数清零CorrectCont=0;/密码正确输入次数清零ReInputCont=0;/重置密码输入次数清零open_led=1;s3_keydown=0;key_disable=0;N=0;/输入位数计数器清零/确认键,并通过相应标志位执行相应功能=voidEnsure(void)unsignedchari,j;RdFromR

35、OM(CurrentPassword,0,6);/从24C02里读出存储密码if(N=6)if(ReInputEn=0)/重置密码功能未开启for(i=0;i6;)if(CurrentPasswordi=InputDatai)i+;elseErrorCont+;if(ErrorCont二=3)/错误输入计数达三次时,报警并锁定键盘TOC o 1-5 h zwrite_1602com(er);for(i=0;i16;i+)write_1602dat(Errori);doAlam_KeyUnable();while(1);elseTR0=1;/开启定时key_disable=1;/锁定键盘pass

36、=0;break;if(i=6)CorrectCont+;if(CorrectCont二二1)/正确输入计数,当只有一次正确输入时,开锁,/DisplayListChar(0,1,LockOpen);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(

37、0,1,SetNew);write_1602com(er);for(j=0;j16;j+)write_1602dat(SetNewj);TwoAlam();/操作成功提示ReInputEn=1;/允许重置密码输入CorrectCont=0;/正确计数器清零else/=当第一次使用或忘记密码时可以用111111对其密码初始化=if(InputData0=1)&(InputData1=1)&(InputData2=1)&(InputData3=1)&(InputData4=1)&(InputData5=1)WrToROM(initpassword,0,6);/强制将初始密码写入24C02存储/Di

38、splayListChar(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=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;/将输入数据计数器清零,为下一次输入作准备operation=1;/=主函数=voidmain(void)unsignedcharKEY,NUM;unsignedcha

温馨提示

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

评论

0/150

提交评论