基于单片机的简易电子密码锁毕业设计课程设计

上传人:B**** 文档编号:51481968 上传时间:2022-01-26 格式:DOCX 页数:30 大小:244.45KB
收藏 版权申诉 举报 下载
基于单片机的简易电子密码锁毕业设计课程设计_第1页
第1页 / 共30页
基于单片机的简易电子密码锁毕业设计课程设计_第2页
第2页 / 共30页
基于单片机的简易电子密码锁毕业设计课程设计_第3页
第3页 / 共30页
资源描述:

《基于单片机的简易电子密码锁毕业设计课程设计》由会员分享,可在线阅读,更多相关《基于单片机的简易电子密码锁毕业设计课程设计(30页珍藏版)》请在装配图网上搜索。

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

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

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

4、,可靠性提高 ,成本较高 ,是适合使用在安全性要求较高地场合 ,且需要有电源提供能量 ,使用还局限在一定范围 ,难以普及 ,所以对它地研究一直没有明显进展 . 目前 ,在西方发达国家 ,电子密码锁技术相对先进 ,种类齐全 ,电子密码锁已被 广泛应用于智能门禁系统中 ,通过多种更加安全 ,更加可靠地技术实现大门地管理 .在我国电子锁整体水平尚处于国际上70 年代左右 ,电子密码锁地成本还很高 ,市场上仍以按键电子锁为主 ,按键式和卡片钥匙式电子锁已引进国际先进水平 , 现国内有几个厂生产供应市场 .但国内自行研制开发地电子锁 ,其市场结构尚未形成 ,应用还不广泛 .国内地不少企业也引进了世界上先

5、进地技术 ,发展前景非常可观 .希望通过不断地努力 ,使电子密码锁在我国也能得到广泛应用 .一、作品功能:1、设置 6 位密码 ,密码通过键盘输入 ,若密码正确 ,则将锁打开 .2、密码可以由用户自己修改设定(只支持6 位密码) ,锁打开后才能修改密码.修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作 .3、报警、锁定键盘功能 .密码输入错误显示器会出现错误提示,若密码输入错误次数超过 3 次 ,蜂鸣器报警并且锁定键盘.4、 AT24C02 保存密码 ,支持复位保存 ,掉电保存功能 .二、按键说明按键定义图如图示:采用 4X4 键盘输入 ,键盘对应名称如下:123A45

6、6B789C*0#D其中 ,【09】为数字键 ,用于输入相应地密码 ,【* 】号键为取消当前操作【#】号键为确认【D】键为修改密码其它键无功能及定义三、操作说明:密码锁初始密码为: 000000.1、开锁:插上电源后 ,程序自动调入初始密码 ,此时依次输入: 000000,然后按【 #】(确认)键 ,此时锁会打开 ,可以看到显示 open,密码锁打开 .2、退出并关锁:按下【 * 】(取消)键 ,此时锁关闭 ,所有输入清除 .3、修改密码:在开锁状态下, 再次输入正确地密码并按下【#】(确认)键 ,此4、5、6、时听到两声提示 ,输入新地六位密码并按【 D】(重设)键 ,再重复输入一次新密码并

7、按【 D】,会听到两声提示音 ,表示重设密码成功 ,内部保存新密码并存储到 AT24C02.(如两次输入地新密码不一样 ,则重设密码失败) .7、报警并锁定键盘:当输入密码错误后,报警并锁定键盘3 秒 ,如 3 秒内又有按键 ,3 秒再启动 .8、当重置新密码时 ,新密码会保存于AT24C02 存储器里 .四、框图及流程图1、系统结构框图键盘输入模块显示模块复位电路AT89S52报警电路密码存储模块开锁电路2、主程序设计流程图初始化开锁密码正确NY开锁N出错报警N修改输入旧密码原密码相同Y设新密码返回3、键功能程序流程图 .键功能程序键值 =09 ?NYY密码输入程序键值 =开锁?NY键值 =

8、设置?NY键值 =确认?N开锁程序设置程序确认程序返回4、开锁程序流程图开锁LCD 初始化按开锁键输入密码确认程序N输入密码正确?报警程序Y返回开锁成功5. 电子密码锁原理图程序( c语言)#include #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;/

9、24C02 串行数据sbit ALAM = P21;/ 报警sbit KEY = P20;/ 开锁sbit open_led=P22;/ 开锁指示灯bit operation=0;/ 操作标志位bit 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;/

10、控盘扫描控制表unsigned char code start_line = password:;unsigned char code name= =Coded Lock=;/显示名称unsigned char code Correct= correct;/输入正确unsigned char code Error= error;/输入错误 unsignedchar code codepass= pass;unsigned char code LockOpen= open;/OPENunsigned char code SetNew= SetNewWordEnable;unsigned char

11、 code Input= input:;/INPUTunsigned char code ResetOK= ResetPasswordOK ;unsigned char code initword= Init password.;unsigned char code Er_try= error,try again!;unsigned char code again= input again;unsigned char InputData6;/输 入 密 码 暂 存 区 unsignedchar CurrentPassword6=1,3,1,4,2,0;/ 当前密码值unsigned char

12、TempPassword6;unsigned char N=0; / 密码输入位数记数 unsigned char 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)un

13、signed char TempCycA = 5;unsigned int TempCycB;while(TempCycA-)TempCycB=7269;while(TempCycB-);/=24C02=void mDelay(uint t) / 延时uchar i;while(t-)for(i=0;i125;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

14、=1;Nop();Sda=1;Nop();/* 应答位 */void Ack(void)Sda=0;Nop();Scl=1;Nop();Scl=0;/* 反向应答位 */void NoAck(void)Sda=1;Nop();Scl=1;Nop();Scl=0;/* 发送数据子程序,Data 为要求发送地数据*/void Send(uchar Data)uchar BitCounter=8;uchar temp;dotemp=Data;Scl=0;Nop();if(temp&0x80)=0x80)Sda=1;elseSda=0;Scl=1;temp=Data1;Data=temp;BitCou

15、nter-;while(BitCounter);Scl=0;/* 读一字节地数据, 并返回该字节值*/uchar Read(void)uchar temp=0;uchar temp1=0;uchar BitCounter=8;Sda=1;doScl=0;Nop();Scl=1;Nop();if(Sda)temp=temp|0x01;elsetemp=temp&0xfe;if(BitCounter-1)temp1=temp1;temp=temp1;BitCounter-;while(BitCounter);return(temp);void WrToROM(uchar Data,uchar Ad

16、dress,uchar Num)uchar i;uchar *PData;PData=Data;for(i=0;iNum;i+)Start();Send(0xa0);Ack();Send(Address+i);Ack();Send(*(PData+i);Ack();Stop();mDelay(20);void RdFromROM(uchar Data,uchar Address,uchar Num)uchar i;uchar *PData;PData=Data;for(i=0;i0;x-)for(y=110;y0;y-);/-写指令 -write_1602com(uchar com)/*液晶写

17、入指令函数*lcd1602_rs=0;/数据 / 指令选择置为指令lcd1602_rw=0; /读写选择置为写P0=com;/ 送入数据delay(1);lcd1602_en=1;/拉高使能端 , 为制造有效地下降沿做准备delay(1);lcd1602_en=0;/en由高变低, 产生下降沿, 液晶执行命令/-write_1602dat(uchar dat)/*写数据 -液晶写入数据函数*lcd1602_rs=1;/数据 / 指令选择置为数据lcd1602_rw=0; /读写选择置为写P0=dat;/送入数据delay(1);lcd1602_en=1; /en置高电平 , 为制造下降沿做准备

18、delay(1);lcd1602_en=0; /en由高变低 , 产生下降沿 , 液晶执行命令/-void lcd_init(void)初始化 -write_1602com(0x38);/ write_1602com(0x0c);/ write_1602com(0x06);/ write_1602com(0x01);/设置液晶工作模式, 意思:开显示不显示光标整屏不移动 , 光标自动右移清显示16*2 行显示 ,5*7点阵 ,8 位数据/= 将按键值编码为数值=unsigned char coding(unsigned char m)unsigned char k;switch(m)case

19、(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;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 (

20、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(P1&0xf0)!=0xf0)Delay5Ms();Delay5Ms();if(P1&0xf0)!=0xf0)row=P10xf0;/确定行线i=0;P1=ai;/精确定位while(i4)if(P1&0xf0)!=0xf0)col=(P1&0xff);/break;/确定列线已定位后提前退出elsei

21、+;P1=ai;elsereturn 0;while(P1&0xf0)!=0xf0);return (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;/=三声提示音 , 表示错误 =void ThreeAlam(void)ALAM=0;Dela

22、y5Ms();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,LockOpen);write_1602com(e

23、r);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(CorrectCont=1)/DisplayLi

24、stChar(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=InputDatai)/ 将两次输入地新密码作对比i+;else/D

25、isplayListChar(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();/ 操作成功提示WrToROM(TempPassword,0,6);

26、/ 将新密码写入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(void)P1=0

27、x00;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;ReInputEn=0;ErrorCont=0;Corre

28、ctCont=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;)

29、if(CurrentPasswordi=InputDatai)i+;elseErrorCont+;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,L

30、ockOpen);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();/操作成功提示Re

31、InputEn=1;/允许重置密码输入CorrectCont=0;/正确计数器清零可以用else131420对其密码初始化/= 当第一次使用或忘记密码时=if(InputData0=1)&(InputData1=3)&(InputData2=1)&(InputData3= 4)&(InputData4=2)&(InputData5=0)WrToROM(initpassword,0,6);/ 强制将初始密码写入24C02存储/DisplayListChar(0,1,initword);/ 显示初始化密码write_1602com(er);for(j=0;j16;j+)write_1602dat(

32、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/DisplayLis

33、tChar(0,1,Error);write_1602com(er);for(j=0;j16;j+)write_1602dat(Errorj);ThreeAlam();pass=0;/ 错误提示音N=0;/ 将输入数据计数器清零 , 为下一次输入作准备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();/LC

34、D 初始化write_1602com(yi);/日历显示固定符号从第一行第for(i=0;i16;i+)0个位置之后开始显示write_1602dat(namei);/向液晶屏写日历显示地固定符号部分write_1602com(er);/时间显示固定符号写入位置, 从第 2个位置后开始显示for(i=0;i16;i+)write_1602dat(start_linei);/写显示时间固定符号, 两个冒号write_1602com(er+9);write_1602com(0x0f);Delay5Ms(); /延时片刻/ 设置光标位置/ 设置光标为闪烁(可不要)N=0;/ 初始化数据输入位数whi

35、le(1)if(key_disable=1)Alam_KeyUnable();elseALAM=1;/ 关报警KEY=keynum();if(KEY!=0)if(key_disable=1)second=0;elseNUM=coding(KEY);switch(NUM)case (A):;case (B):;case (C):;case (D): ResetPassword();break;break;break;break;/重新设置密码case (*): Cancel();break;/取消当前输入case (#): Ensure();break;/确认键,default:/Display

36、ListChar(0,1,Input);write_1602com(er);for(i=0;i16;i+)write_1602dat(Inputi);operation=0;if(N6)/当输入地密码少于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

37、) interrupt 1TL0=0xB0;TH0=0x3C;/TR0=1;countt0+;if(countt0=20)countt0=0;second+;if(pass=1)if(second=1)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;结论 , 致谢 , 参考文献 , 原理图放在程序前毕业设计是学生即将完成学业地最后一次作业, 它既是对所学知识地全

38、面总结和综合应用 , 又是今后走向社会地实际操作应用铸就了一个良好开端 , 毕业设计是我对所学知识理论地检验与总结 , 此次毕业设计是一次非常难得地理论与实际相结合地机会 , 通过这次比较难完整地毕业设计 , 我摆脱了单纯地理论知识学习状态 , 和实际设计地结合锻炼了我地综合运用所学地专业基础知识, 同时也提高我查阅文献资料、设计手册、设计规范以及电脑制图等其它专业能力水平 , 而且通过对整体地掌控 , 对局部地取舍 , 以及对细节地斟酌处理 , 都使我地能力得到了锻炼 , 经验得到了丰富 , 并且使我地意志和耐力都得到了不同地提升 , 这是我们希望看到地也正是我们进行毕业设计地目地所在 .在此次试验中 , 我通过查阅大量地有关资料 , 与同学交流经验和自学 , 并向老师请教等方式完成地 ,岁月如梭 , 三年地大学时光即将结束 , 这个实验和论文是在电子教研室 105所有老师地知道与鼓励下完成地 ,

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!