51单片机关于密码锁的毕业设计,论文

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-30
毕业设计我想做基于单片机的密码锁设计

恩,说实话密码锁已经有很多人做过了,已经不是个很新奇的东西了。
当然如果你可以有想法的话可以大胆的扩展一下的,让他多有些功能,什么电子猫眼/语音对话/留言/防盗/防火灾……都加上去吧。
用单片机做密码锁,什么单片机51?PIC?DSP?ARM?

你来取,我发给你
我有更完整的

程序设计内容 

(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++; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(cc<1000) 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {

 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; okflag=1; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if(cc<2000)

 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; okflag=0; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else

 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; errorflag=0; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rightflag=0; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hibitflag=0;

 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmpflag=0; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P0_1=1; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cc=0; &nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oka=0; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; okb=0; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; okflag=0; &nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P0_0=1; &nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }

 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(okflag==1)

 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oka++; &nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(oka==2)

 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oka=0;

 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P0_0=~P0_0;

 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; okb++; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(okb==3)

 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; okb=0; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P0_0=~P0_0; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 

&nbsp;&nbsp;&nbsp; } 

}



电子密码锁
摘要 本文的电子密码锁利用数字逻辑电路,实现对门的电子控制,并且有各种附加电路保证电路能够安
工作,有极高的安全系数。
关键词 电子密码锁 电压比较器 555单稳态电路 计数器 JK触发器 UPS电源。

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

用STC的单片机,里面有EEPROM,把设定的密码写到里面。
正常运行时 输入密码和EEPROM里面的密码比较 正确了就可以进入

新款的单片机都可以设置密码

  • 基于51单片机的密码锁程序
    答:基于51单片机的密码锁程序,三个子程序:4*4的矩阵键盘、I2C芯片、液晶屏最好是用KeiluVision2编写的。。要求是4*4的矩阵键盘,其中10个是数字键,还包括一个确认、一个更改密码、一个... 基于51单片机的密码锁程序,三个子程序:4*4的矩阵键盘、I2C芯片、液晶屏最好是用Keil uVision2编写的。。要求是4*4的...
  • 怎么设计一个由51单片机控制的电子密码锁
    答:include<reg51.h> define uint unsigned int char leab[]={0x7f,0x7f,0x7f,0x7f,0x7f,0x7f};delay(uint z){ uint x;for(;z<0;z--)for(x=0;x<10;x++);//1ms } disp(){ char x,y;for(x=5;x>=0;x--){for(y=0;y<10;y++){P0=0;P2=x;P0=leab[x];delay(10);P0...
  • 求毕业设计,电子密码锁设计,数字密码锁设计
    答:基于AT89C2051单片机的防盗自动报警电子密码锁系统的设计摘要: 随着电子产品向智能化和微型化的不断发展,单片机已成为电子产品研制和开发中首选的控制器。介绍了一种应用AT89C2051单片机设计的防盗自动报警电子密码锁系统。经实验验证该系统具有软硬件设计简单,易于开发,成本较低,安全可靠,操作方便等特点,可作为产品进行开发...
  • 基于51单片机的密码锁的设计都用到哪些知识
    答:做个密码锁可算是比较考验综合应用单片机基础知识的了。1、键盘处理: 按键设计、键值获取、键值处理 2、显示处理:如果有显示,那要看是数码管显示,还是液晶屏显示,还是其他方法显示,显示的内容是什么,什么时候显示什么内容?3、声光处理:密码输入正确时的提示,输入错误后的提示。4、机械驱动:密码...
  • 跪求!单片机密码锁设计
    答:我有两个,均ProteUS仿真调试通过 有偿提供,第一个是帮别的毕业设计做的 第二个没有使用过。; 密码长度自由可设;; 密码设定必须加密存储;; 三次错码输入报警提示,且10分钟内不接受再次输入;; 具有超级密码功能,长度或格式特殊。其二:51单片机,4x4小键盘和1622LCD做一个简易密码锁 悬赏分:0...
  • 51单片机密码锁有什么不足之处和改进的方案
    答:保密性差、矩阵按键输入方式。根据查询51单片机密码锁使用说明得知,51单片机密码锁的不足为保密性差,51单片机保密性与网络信息技术有关,因此如果存在密码泄露或被人为侵入密码锁系统,则密码锁容易被破坏,针对这个不足之处,改进方案可以采用矩阵安全输入或外接电锁增加保密性。电子密码锁是一种通过密码...
  • 基于单片机课程设计密码锁
    答:采用数字密码锁电路的好处就是设计简单。用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,...
  • 求用51单片机控制的简单密码锁原理
    答:mov r0,#50h ;初始密码首地址 mov r1,#08h szmm: mov @r0,#00h ;设置密码 inc r0 djnz r1,szmm mov r2,#03h ;设置输入密码的次数 K:mov ie,#81h ;中断方式设置 mov tcon,#01h k1:mov a,p1 clr p1.2 ;判断开关位置 mov r1,a anl a,#03h jz dmm dec a jz xiansh...
  • 求51单片机C语言编的简易密码锁程序
    答:sbit key1=P0^0;sbit key2=P0^1;sbit key3=P0^2;sbit key4=P0^3;sbit wela=P2^0;//位锁存端 define SMG P1 sbit LED=P3^0;//低电平亮 uchar code table[]={0x8d,0x86};//共阳数码管 P,E uchar chushi_mima[]={2,1,3};uchar shuru_mima[3];uchar index;//控制输入密码的...
  • 单片机毕业设计 电子锁的程序 高分求救
    答:我有 还带Proteus仿真 ORG 0000H AJMP MAIN ORG 0003H JMP KEY_INT ORG 000BH AJMP INTT0 ORG 001BH AJMP INTT1 ORG 0030H ;=== 主程序开始 === MAIN: MOV 30H,#07H ;输入密码为7位 最高只可设15位 MOV 42H,#200 ;设定报警的时间,42H单元里的数*50MS MOV 43H,...