• 回答数

    5

  • 浏览数

    345

孑子孓COMIC
首页 > 学术期刊 > 基于单片机的密码锁设计毕业论文

5个回答 默认排序
  • 默认排序
  • 按时间排序

糖小婉爱吃肉

已采纳

这里有 毕业论文 基于单片机的电子密码锁设计AT89S51|矩阵键盘|电子密码锁|毕业设计文件格式:word毕业论文 基于单片机的电子密码锁设计论文正文共49页。共19073个字符数(不计空格)。如需下载,请点击页面最下方“下载地址 点击下载”。基于单片机的电子密码锁设计摘 要随着人们对安全的重视和科技的发展,对日常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求 ,增加其安全性 ,用密码代替钥匙的密码锁应运而生。电子锁由于具有报警功能,保密性高,使用灵活性好,安全系数高,设计方法合理,简单易行,成本低,符合住宅、办公室用锁要求 , 具有推广价值。受到了广大用户的亲睐。这种应用以单片机为核心 ,通过编程来实现整体基本功能和安全性要求设计。系统将能完成开锁、超时报警、超次锁定、管理员解密、修改用户密码基本的密码锁的功能。能用PROTEL99SE绘制电路原理图,并做出调试好基于单片机的电子密码锁的实物。关键词:AT89S51,矩阵键盘,电子密码锁Microcontroller-based design of electronic locksABSTRACTAs people focus on security and technology development, life insurance for the safety devices in increasingly high demand. To meet people’s use of the lock request to increase their safety, replace the key with a password lock came into being. Electronic lock as an alarm, high secrecy, use good flexibility, high safety factor, design reasonable, simple, low cost, consistent with residential, office lock request is worth promoting. By the user pro-gaze. This application to SCM is the core of the overall program to achieve the basic functions and design safety requirements.System will be able to complete the unlock, alarm out, and Ultra lock, decrypt administrator, modify the basic user password lock feature. Can PROTEL99SE circuit schematic drawing and make a good debugging MCU-based electronic code lock of the kind.Key words: AT89S51, matrix keyboards, electronic lock目 录第一章 绪论 11.1 引言 11.2 电子密码锁的研究现状 11.3 课题研究方法 2第二章 开发环境和开发工具 32.1 Protel 99se简介 32.2 keil介绍 42.3 开发工具在系统中的作用 52.4 主要元器件介绍 52.4.1 主控芯片AT89S51 52.4.2 数码管 72.4.3 掉电存储模块AT24c02 8第三章 电子密码锁设计硬件部分 93.1 电子密码锁总原理图 93.2 开锁电路设计 93.3 按键电路设计 93.4 显示电路设计 103.4 掉电存储电路设计 123.5 电源电路设计 12第四章 电子密码锁软件部分 134.1主程序流程图: 134.2键功能流程图: 14第五章 电子密码锁实物制作和调试过程 155.1 电路板制作中的问题和调试结果分析 155.2 制作好的实物的图片 16第六章 总结 20设计总结 20参考文献 21致 谢 22附录一 电子密码锁的电路图 23附录二 电子密码锁3D截图 24附录三 电子密码锁程序清单 24

92 评论

侯总大大

电子密码锁摘要 本文的电子密码锁利用数字逻辑电路,实现对门的电子控制,并且有各种附加电路保证电路能够安工作,有极高的安全系数。关键词 电子密码锁 电压比较器 555单稳态电路 计数器 JK触发器 UPS电源。1 引言随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。设计本课题时构思了两种方案:一种是用以AT89C2051为核心的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。考虑到单片机方案原理复杂,而且调试较为繁琐,所以本文采用后一种方案。

333 评论

热腾腾的鱼粥

电子密码锁的设计论文

导语:日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。以下我为大家介绍电子密码锁的设计论文文章,欢迎大家阅读参考!

一、 课题背景和意义

锁是一种保安措施,是人类为了保护自己私有财产而发明的一种用钥匙才能开启的装置。随着人们生活水平的提高和安全意识的加强,对锁的要求也越来越高,既要安全可靠的防盗,又要使用方便。这就使得传统的锁防盗效果已经满足不了现代社会的防盗需要,而且还存在着随身带钥匙的不便。因此近几年,随着科学技术的不断发展,一种新型的电子密码锁应运而生。电子密码锁运用电子电路控制机械部分,使两者紧密结合,从而避免了因为机械部分被破坏而导致开锁功能失常的问题,而且密码输入错误是还有报警声,大大增加了电子密码锁的防盗功能。同时因为电子密码锁不需要携带钥匙,弥补了钥匙极易丢失和伪造的缺陷,方便了锁具的使用。传统的'锁由于构造简单,所以被撬的事件屡见不鲜,电子密码锁由于具有保密性高、使用灵活性好、安全系数高等优点,受到了广大用户的青睐。

二、国内外研究现状

电子密码锁的种类繁多,例如数码锁、指纹锁、磁卡锁、IC卡锁、生物锁等,但较实用的还是按键式电子密码锁。20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性提高,成本较高,是适合使用在安全性要求较高的场合,而且需要有电源提供能量,使用还局限在一定范围,难以普及,所以对它的研究一直没有明显的进展。

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

三、 设计论文主要内容

1、电子密码锁设计方案的分析与方案选择;

2、设计一典型结构的电子密码锁,分析其电路结构及控制程序;

3、选者合适的电器元件;

4、编写控制程序;

5、将程序输入PC机,并修改进行模拟运行;

四、 设计方案

查阅文献技术资料,分析电子密码锁结构、工作原理和技术要求。以单片机为主控芯片,结合外围电路,通过软件程序组成电子密码锁系统,能够实现:

1. 正确输入密码前提下,开锁提示;

2. 错误输入密码情况下,蜂鸣器报警;

3. 密码可以根据用户需要更改。

五、 工作进度安排

2011.2.22—2011.3.8

2011.3.9—2011.3.19

2011.3.21—2011.4.9

2011.4.10—2011.4.30

2011.5.1—2011.5.10

2011.5.11—2011.5.20 确定毕业设计课题,提交开题报告; 查阅相关论文,调研及收集相关资料; 方案设计、审查和确定,提交中期报告 编写控制程序 整理并撰写论文 完善论文,提交论文

六、 主要参考文献

[1] 石文轩,宋薇.基于单片机MCS-51的智能密码锁设计[M].武汉工程职业技术学院学报,2004,(01);

[2] 祖龙起,刘仁杰.一种新型可编程密码锁[J].大连轻工业学院学报,2002,(01);

[3] 叶启明.单片机制作的新型安全密码锁[J].家庭电子,2005,(10);

[4] 李明喜.新型电子密码锁的设计[J].机电产品开发与创新,2004,(03);

[5] 董继成.一种新型安全的单片机密码锁[J].电子技术,2004,(03);

[6] 杨茂涛.一种电子密码锁的实现[J].福建电脑,2004,(08);

[7] 瞿贵荣.实用电子密码锁[J].家庭电子,2000,(07);

[8] 王千.实用电子电路大全[M],电子工业出版社,2001,p101;

[9] 何立民.单片机应用技术选编[M],北京:北京航空大学出版社,1998;

[10] ATmega.ATmega8L-8AC,2006,(01);

356 评论

Incana1992

程序设计内容

(1). 密码的设定,在此程序中密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。

(2). 密码的输入问题:  由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。进入密码的判断比较处理状态并给出相应的处理过程。

(3).按键禁止功能:初始化时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。

C语言源程序

#include unsigned char code ps[]={1,2,3,4,5};

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,                               

0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};

unsigned char pslen=9; unsigned char templen;

unsigned char digit; unsigned char funcount;

unsigned char digitcount;

unsigned char psbuf[9];

bit cmpflag;

bit hibitflag;

bit errorflag;

bit rightflag;

unsigned int second3;

unsigned int aa;

unsigned int bb;

bit alarmflag;

bit exchangeflag;

unsigned int cc;

unsigned int dd;

bit okflag;

unsigned char oka;

unsigned char okb;

void main(void)

{  

unsigned char i,j;  

P2=dispcode[digitcount];  

TMOD=0x01;  

TH0=(65536-500)/256;  

TL0=(65536-500)%6;  

TR0=1;  

ET0=1;  

EA=1;  

while(1)   

  {      

if(cmpflag==0)        

{          

if(P3_6==0) //function key           

  {              

for(i=10;i>0;i--)              

for(j=248;j>0;j--);      

         if(P3_6==0)                

{                

   if(hibitflag==0)       

              {     

                  funcount++;  

                     if(funcount==pslen+2)

                        {  

                         funcount=0;

                          cmpflag=1;

                         }

                       P1=dispcode[funcount];

                    }

                    else

                      {

                         second3=0;

                      }  

                 while(P3_6==0);

                }

            }

          if(P3_7==0) //digit key

            {

              for(i=10;i>0;i--)

              for(j=248;j>0;j--);

              if(P3_7==0)

                {

                  if(hibitflag==0)

                    {

                      digitcount++; 

                  if(digitcount==10)

                        {

                          digitcount=0;

                        }

                      P2=dispcode[digitcount];

                      if(funcount==1)

                        {

                          pslen=digitcount;                          

templen=pslen;

                        }

                        else if(funcount>1)

                          {  

                           psbuf[funcount-2]=digitcount;

                          }

                    }

                    else

                      {

                        second3=0;

                      }

                  while(P3_7==0);

                }

            }

        }  

       else

          {

            cmpflag=0;

            for(i=0;i

              {  

               if(ps[i]!=psbuf[i])

                  {

                    hibitflag=1;

                    i=pslen;

                    errorflag=1;

                    rightflag=0;

                    cmpflag=0;

                    second3=0;

                    goto a;  

                 }

              }   

          cc=0;  

           errorflag=0;  

           rightflag=1;

            hibitflag=0;

a:   cmpflag=0;

          }

}

}

void t0(void)

interrupt 1 using 0 {   TH0=(65536-500)/256;  

TL0=(65536-500)%6;  

if((errorflag==1) && (rightflag==0))  

{

      bb++;

      if(bb==800)

        {

          bb=0;

          alarmflag=~alarmflag;

        }

      if(alarmflag==1)

        {

          P0_0=~P0_0;

        }

      aa++;

      if(aa==800)

        {

          aa=0;

          P0_1=~P0_1;

        }

      second3++;

      if(second3==6400)

        {

          second3=0;

          hibitflag=0;

          errorflag=0;

          rightflag=0;

          cmpflag=0;

          P0_1=1;  

         alarmflag=0;

          bb=0;  

         aa=0;  

       }

    }

  if((errorflag==0) && (rightflag==1))

    {

      P0_1=0;

      cc++;

      if(cc<1000)

        {

          okflag=1;

        }

        else if(cc<2000)

          {

            okflag=0;

          }

          else

            {

              errorflag=0;

              rightflag=0;

              hibitflag=0;

              cmpflag=0;

              P0_1=1;

              cc=0;  

             oka=0;

              okb=0;

              okflag=0;  

             P0_0=1;  

           }

      if(okflag==1)

        {  

         oka++;  

         if(oka==2)

            {

              oka=0;

              P0_0=~P0_0;

            }

        }

        else

          {

            okb++;

            if(okb==3)

              {

                okb=0;

                P0_0=~P0_0;

              }  

         }

    }

}

186 评论

雯浩天使

功能键S6---S15 数字键0-9S16---更改密码 S17---更改密码完毕后确认S18---重试密码、重新设定 S19---关闭密码锁初始密码:000000 密码位数:6位注意:掉电后,所设密码会丢失,重新上点时,密码恢复为原始的000000与P1相连的8位发光LED点亮代表锁被打开;熄灭代表锁被锁上程序功能: 本程序结合了24C02存储器的存储功能,可以掉电保存密码。第一次运行时,若输入000000原始密码后无反应,可以试验着将主程序中前面的一小段被注释线屏蔽的程序前的注释线删掉,然后重新编译下载(可以将密码还原为000000)。此后,再将这小段程序屏蔽掉,再编译下载。方可正常使用。 1、开锁: 下载程序后,直接按六次S7(即代表数字1),8位LED亮,锁被打开,输入密码时, 六位数码管依次显示小横杠。 2、更改密码: 只有当开锁(LED亮)后,该功能方可使用。 首先按下更改密码键S16,然后设置相应密码,此时六位数码管会显示设置密码对应 的数字。最后设置完六位后,按下S17确认密码更改,此后新密码即生效。 3、重试密码: 当输入密码时,密码输错后按下键S18,可重新输入六位密码。 当设置密码时,设置中途想更改密码,也可按下此键重新设置。 4、关闭密码锁: 按下S19即可将打开的密码锁关闭。推荐初级演示步骤:输入原始密码000000---按下更改密码按键S16---按0到9设置密码---按S17确认密码更改---按S18关闭密码锁---输入新的密码打开密码锁*******************************************************************************/#include#include #define uint unsigned int#define uchar unsigned charuchar old1,old2,old3,old4,old5,old6; //原始密码000000uchar new1,new2,new3,new4,new5,new6; //每次MCU采集到的密码输入uchar a=16,b=16,c=16,d=16,e=16,f=16; //送入数码管显示的变量uchar wei,key,temp;bit allow,genggai,ok,wanbi,retry,close; //各个状态位sbit dula=P2^6;sbit wela=P2^7;sbit beep=P2^3;sbit sda=P2^0; //IO口定义sbit scl=P2^1;unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};/*****************IIC芯片24C02存储器驱动程序************************************/void nop(){_nop_();_nop_();}/////////24C02读写驱动程序////////////////////void delay1(unsigned int m){ unsigned int n; for(n=0;n0;j--) for(k=125;k>0;k--);}void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f){ dula=0; P0=table[a]; dula=1; dula=0; wela=0; P0=0xfe; wela=1; wela=0; delay(5); P0=table[b]; dula=1; dula=0; P0=0xfd; wela=1; wela=0; delay(5); P0=table[c]; dula=1; dula=0; P0=0xfb; wela=1; wela=0; delay(5); P0=table[d]; dula=1; dula=0; P0=0xf7; wela=1; wela=0; delay(5); P0=table[e]; dula=1; dula=0; P0=0xef; wela=1; wela=0; delay(5); P0=table[f]; dula=1; dula=0; P0=0xdf; wela=1; wela=0; delay(5);}void keyscan(){ { P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(10); if(temp!=0xf0) { temp=P3; switch(temp) { case 0xee: key=0; wei++; break; case 0xde: key=1; wei++; break; case 0xbe: key=2; wei++; break; case 0x7e: key=3; wei++; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; beep=0; } beep=1; } } P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(10); if(temp!=0xf0) { temp=P3; switch(temp) { case 0xed: key=4; wei++; break; case 0xdd: key=5; wei++; break; case 0xbd: key=6; wei++; break; case 0x7d: key=7; wei++; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; beep=0; } beep=1; } } P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(10); if(temp!=0xf0) { temp=P3; switch(temp) { case 0xeb: key=8; wei++; break; case 0xdb: key=9; wei++; break; case 0xbb: genggai=1; wei=0; break; case 0x7b: if(allow) ok=1; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; beep=0; } beep=1; } } P3=0xf7; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(10); if(temp!=0xf0) { temp=P3; switch(temp) { case 0xe7: retry=1; break; case 0xd7: close=1; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; beep=0; } beep=1; } }}}void shumima() //对按键采集来的数据进行分配{if(!wanbi){switch(wei){case 1:new1=key; if(!allow) a=17; else a=key; break;case 2:new2=key;if(a==17) b=17;else b=key; break;case 3:new3=key; if(a==17) c=17;else c=key; break;case 4:new4=key;if(a==17) d=17;else d=key; break;case 5:new5=key; if(a==17) e=17;else e=key; break;case 6:new6=key; if(a==17) f=17;else f=key;wanbi=1; break;}}}void yanzheng() //验证密码是否正确{if(wanbi) //只有当六位密码均输入完毕后方进行验证{if((new1==old1)&(new2==old2)&(new3==old3)&(new4==old4)&(new5==old5)&(new6==old6))allow=1; //当输入的密码正确,会得到allowe置一}}void main(){init(); //初始化24C02/*********下面的一小段程序的功能为格式化密码存储区。******************当24c02中这些存储区由于其他程序的运行而导致**********************所存数据发生了变化,或者密码遗忘时, **************************可以删掉其前面的注释线,然后重新编译下载。**********************而将密码还原为000000后,请将下面的程序用************************注释屏蔽掉,重新编译、下载,方可正常使用****************/// write24c02(110,0x00);// write24c02(111,0x00);//24c02的第110到115地址单元作为密码存储区// write24c02(112,0x00);// write24c02(113,0x00);// write24c02(114,0x00);// write24c02(115,0x00);/*******************************************************************/old1=read24c02(110); old2=read24c02(111);old3=read24c02(112);old4=read24c02(113);old5=read24c02(114);old6=read24c02(115);while(1){keyscan();shumima();yanzheng();if(allow) //验证完后,若allow为1,则开锁{P1=0x00;if(!genggai)wanbi=0;}if(genggai) //当S16更改密码键被按下,genggai会被置一{if(allow) //若已经把锁打开,才有更改密码的权限{while(!wanbi) //当新的六位密码没有设定完,则一直在这里循环{ keyscan();shumima();if(retry|close) //而当探测到重试键S18或者关闭密码锁键S19被按下时,则跳出{ wanbi=1;break;}display(a,b,c,d,e,f);}}}if(ok) //更改密码时,当所有六位新密码均被按下时,可以按下此键,结束密码更改{ //其他时间按下此键无效ok=0; wei=0;genggai=0;old1=new1;old2=new2;old3=new3; //此时,旧的密码将被代替old4=new4;old5=new5;old6=new6;//新密码写入存储区。write24c02(110,old1);write24c02(111,old2);write24c02(112,old3);write24c02(113,old4);write24c02(114,old5);write24c02(115,old6);a=16;b=16;c=16;d=16;e=16;f=16;}if(retry) //当重试按键S18被按下,retry会被置位{retry=0; wei=0;wanbi=0;a=16;b=16;c=16;d=16;e=16;f=16;new1=0;new2=0;new3=0;new4=0;new5=0;new6=0;}if(close) //当关闭密码锁按键被按下,close会被置位{close=0;genggai=0;//所有变量均被清零。wei=0; wanbi=0;allow=0;P1=0xff;a=16;b=16;c=16;d=16;e=16;f=16;new1=0;new2=0;new3=0;new4=0;new5=0;new6=0;}display(a,b,c,d,e,f); //实时显示}}对着代码自己做吧,,要是还做不出来,,那我就不说什么了,,

254 评论

相关问答

  • 基于单片机的万年历设计毕业论文

    PLC控制步进电机的软硬件设计与应用

    大能苗* 5人参与回答 2023-12-09
  • 基于单片机设计的毕业论文

    不知道楼主解决了问题没,我这有一些这方面的论文,给你参考一下吧..单片机应用系统中掉电保护电路的设计研究中文摘要:本文介绍了单片机应用系统中掉电保护的基本原理与

    小豌豆尔 2人参与回答 2023-12-05
  • 基于单片机流水灯的设计毕业论文

    如果是毕业设计,这也太简单了。如果是送女朋友,也意义不大,不如做个摇摇棒。嘿嘿。供参考。

    cestlavie88 6人参与回答 2023-12-05
  • 基于单片机的毕业设计论文题目

    1、高压软开关充电电源硬件设计2、自动售货机控制系统的设计3、PLC控制电磁阀耐久试验系统设计4、永磁同步电动机矢量控制系统的仿真研究5、PLC在热交换控制系统

    哈密赖赖 2人参与回答 2023-12-08
  • 基于单片机数字钟设计毕业论文

    做本科毕业论文还是很简单的。只要稍微努努力就可以做出来了。 当然楼主没有头绪可以借鉴一下前人的工作。 我手底偶然得到一篇不错的10000字的本科论文。 跟楼主的

    旷野和风 2人参与回答 2023-12-10