proteus基于8086的电子密码锁技术报告.docx
《proteus基于8086的电子密码锁技术报告.docx》由会员分享,可在线阅读,更多相关《proteus基于8086的电子密码锁技术报告.docx(5页珍藏版)》请在冰点文库上搜索。
proteus基于8086的电子密码锁技术报告
proteus基于8086的电子密码锁技术报告
目录 第1章实验简介.........................................................................................1课题背景.........................................................................................1研究意义........................................................................................1主要内容................................................................................1第2章硬件电路设计................................................................................1相关芯片简介................................................................................3仿真电路总体设计.......................................................................5第3章软件编程设计................................................................................6系统概述.........................................................................................6程序流程图设计...........................................................................7 按键控制...................................................................................9字符动态显示...........................................................................10第4章系统实现.......................................................................................10第5章结论...............................................................................................11设计总结......................................................................................11收获与体会.................................................................................11缺点与不足.................................................................................11 I 第1章实验简介 课题背景 在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以锁的办法来解决。
这种办法不仅给不法分子带来了可乘之机,而且传统的机械式开锁也给人们的出行带来了不便,最重要的是一旦钥匙丢失后安全性也大打折扣。
随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。
为满足人们对锁的使用需要,增加其安全性,用电子密码锁代替钥匙锁应运而生。
密码锁具有安全性高、成本低、功耗低、易操作等优点。
研究意义 在安全技术防范领域,具有防盗换码功能的电子密码锁逐渐代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差等缺点,使密码锁无论在技术上还是在性能上都大大提高一步。
随着人们对安全的重视和科技的发展,许多电子智能锁。
但是这些产品的特点是针对特定的指纹和有效磁卡的,只能适用于保密要求的箱、柜、门等。
而且指纹识别器若在公共场所使用存在容易机械损坏,IC卡还存在容易丢失、损坏等特点。
加上其成本较高,一定程度上限制了这类产品的普及和推广,鉴于目前的技术水平与市场的接收程度,电子密码锁是这类电子防盗产品的主流。
此外,可以通过编写汇编语言程序以及硬件电路仿真设计来提高我们分析问题、解决问题的能力。
主要内容 介绍电子密码锁的软硬件设计,下面简单介绍成品的功能与操作。
实现的功能:
电子密码锁主要一片8086CPU,一片74LS138译码器,三片74LS373,一片74LS245缓冲器,一片8255A及数码管构成,通过软件编程以及硬件链接可以实现四位密码的设定、更改以及显示,通过判断密码的正确与否来控制锁的开关。
具体操作:
输入密码:
、开始执行时数码管每一位都显示“米”,点输入密码数码管只有 1 第一位显示“米”,点击数字键进行数字选择; 、按下“确认”键后跳到第二个数字,操作同第一步; 、当四个密码选中完毕,按下“确认输入”键,显示输入的密码;、按下“开锁”键,若密码正确,同时显示*YES,密码锁打开;、按下“开锁”键,若密码错误,则显示ERRO,密码锁不能打开,按下“输入密码”键,即可重新输入密码。
更改密码:
、在显示*YES时,按下“更改密码”键后,输入新的四位密码;、按下“确认输入”键,显示新密码,按下“确认”键,即可设定新密码。
错误警报:
若输入错误密码超过5次,警报会自动响起,只有再次输入正确密码后方可解除警报。
第2章硬件电路设计 相关芯片简介 1.8255 第一片8255 定义口都为输出状态,口控制数码管的输入口,对应相应的段码表,来 2 显示。
C口的PC0,PC1经过2-4译码器,来激活数码管1,2,3,4通道,并采用00,01,10,11,循环输出的方式,使数码管通道循环激活,实现动态显示。
第二片8255 定义A,B,C口都为输入状态,对应输入相应的按钮状态,对应相应的程序,实现相应功能。
2.8253 使用0通道,方式3,对输入的始终信号分频,当输入密码次数大于5次时,初始化8253,并发出警报提示声。
3
{ outp(IOC1,cs[i]); outp(IOA1,num1[0]); outp(IOB1,num2[0]); delay
(1); } }} charxianshi(){ chartmp; charresult; tmp=inp(IOB2); if(tmp==0xfffe)//0 { outp(IOA1,num1[0]); outp(IOB1,num2[0]); result=0; } if(tmp==0xfffd)//1 { outp(IOA1,num1[1]); outp(IOB1,num2[1]); result=1; } 19 if(tmp==0xfffb) { outp(IOA1,num1[2]); outp(IOB1,num2[2]); result=2; } if(tmp==0xfff7) { outp(IOA1,num1[3]); outp(IOB1,num2[3]); result=3; } if(tmp==0xffef) { outp(IOA1,num1[4]); outp(IOB1,num2[4]); result=4; } if(tmp==0xffdf) { outp(IOA1,num1[5]); outp(IOB1,num2[5]); result=5; } if(tmp==0xffbf) { outp(IOA1,num1[6]); outp(IOB1,num2[6]); result=6; 20 } if(tmp==0xff7f) { outp(IOA1,num1[7]); outp(IOB1,num2[7]); result=7; } tmp=inp(IOC2); if(tmp==0xfffe) { outp(IOA1,num1[8]); outp(IOB1,num2[8]); result=8; } if(tmp==0xfffd) { outp(IOA1,num1[9]); outp(IOB1,num2[9]); result=9; } returnresult;} //*************************************************************** charchange(intc)//单纯的更改密码的函数{ charresult; chartmp; 21 outp(IOC1,cs[c]); outp(IOA1,yes1[0]); outp(IOB1,yes2[0]); tmp=inp(IOA2); while(tmp!
=0xfff5) { tmp=inp(IOA2);result=xianshi(); }returnresult; //直接传出去改过之后的哪位数字,不管是更改密码还是输入密码,只管输出 } //***************************************************************** chargenggaimima() //更改密码{ intc=0; chari1; i1=change(c); returni1;// 要求更改密码,直接更改第一位,并输出更改之 22 后的第一位密码是多少i=1,可以更改密码 } //********************************************************************* charhuanwei(charc) //换位{ c++; delay(50); returnc;//传出去换位之后的位} //*********************************************** //**********************************************charshurumima()//第一位输入密码输入密码{ intc=0; chars1;//输入的第一位密码 s1=change(c); returns1; //传出去第一位输入的密码} ////////////////////////////////////////////////////////////////////// 23
voidquerengg(charshuru)///显示输入之后的密码ffdf { inti,j,m; for(j=0;j for(i=0;i m=shuru[i]; outp(IOC1,cs[i]); outp(IOA1,num1[m]); outp(IOB1,num2[m]); delay
(1);} } } intpanduan1(charshuru,charmima)//判断开锁I为1,可以更改密码I为0不允许更改密码 { inti; if(shuru[0]==mima[0]&&shuru[1]==mima[1]&&shuru[2]==mima[2]&&shuru[3]==mima[3])//判断输入的密码和更改的密码是否一样 { yes(); i=1;} else 24 { err(); i=0; } returni; } intpanduan2(charshuru,charmima,intt)//判断错误超过6次,警报 t为错误密码次数 { if(shuru[0]==mima[0]&&shuru[1]==mima[1]&&shuru[2]==mima[2]&&shuru[3]==mima[3])//判断输入的密码和更改的密码是否一样 { yes(); t=0; } else { err(); t++; } returnt;} ////////////////////////////// voidmain(void) 25 { inti1=0,i2=1,i3=2,i4=3; ints1=0,s2=1,s3=2,s4=3; intr=1; //变量R非常重要,只有当R=1时,才可以修改密码,初始化密码,在判断密码中,会返回一个R,得知R=1or0.!
!
亮点 intt=0; charmima[100]={0,0,0,0}; //这两个数组是亮点 charshuru[100]={0,0,0,0}; chartmp; intc1=0;//更改密码的led位置!
!
亮点 intc2=0;//输入密码的led位置 fun82551(); fun82552(); while
(1) { tmp=inp(IOA2); if(tmp==0xfffC&&r==1) 0000 { 26 //显示 chushihua(r); mima[0]=0; mima[1]=0; mima[2]=0; mima[3]=0; } if(tmp==0xffbd&&r==1) 密码 r=1时才能更改密码 { mima[i1]=genggaimima(); c1=huanwei(c1); mima[i2]=change(c1); c1=huanwei(c1); mima[i3]=change(c1); c1=huanwei(c1); mima[i4]=change(c1); c1=0; inti,j,m; for(j=0;j for(i=0;i m=mima[i]; outp(IOC1,cs[i]); outp(IOA1,num1[m]); 27 //按更改密码开始改 outp(IOB1,num2[m]); delay
(1); } } } if(tmp==0xffdd)// { querengg(shuru);} if(tmp==0x7d)// { shuru[s1]=shurumima(); c2=huanwei(c2); shuru[s2]=change(c2); c2=huanwei(c2); shuru[s3]=change(c2); c2=huanwei(c2); shuru[s4]=change(c2); c2=0;} 确认输入 重新输入输入密码28
if(tmp==0xfffd)//显示****{ inti; for(i=0;i outp(IOC1,cs[i]); outp(IOA1,yes1[0]); outp(IOB1,yes2[0]); delay
(1); } } if(tmp==0xffed) //开锁 { r=panduan1(shuru,mima);//返回一个R,R=1可以修改密码和初 始化,R!
=1,不能 t=panduan2(shuru,mima,t);//用来知道连续错误了几次 if(t>5){ fun82531();//激活通道0这样就会报警} if(t==0){ 29 fun82532();//让8253激活通道1.这样就不响了}}} }30