首页 接线图文章正文

单片机电子密码锁设计

接线图 2023年11月07日 18:44 222 admin

单片机电子密码锁设计,Coded lock

  1.实验任务 根据设定好的密码,采用二个按键实现密码的输入功能,当密码输入正确之后,锁就打开,如果输入的三次的密码不正确,就锁定按键3秒钟,同时发现报警声,直到没有按键按下3种后,才打开按键锁定功能;否则在3秒钟内仍有按键按下,就重新锁定按键3秒时间并报警。 2.电路原理图   单片机电子密码锁设计  第1张     3.系统板上硬件连线 (1).            把“单片机系统”区域中的P0.0/AD0用导线连接到“音频放大模块”区域中的SPK IN端子上; (2).            把“音频放大模块”区域中的SPK OUT端子接喇叭和; (3).            把“单片机系统”区域中的P2.0/A8-P2.7/A15用8芯排线连接到“四路静态数码显示”区域中的任一个ABCDEFGH端子上; (4).            把“单片机系统“区域中的P1.0用导线连接到“八路发光二极管模块”区域中的L1端子上; (5).            把“单片机系统”区域中的P3.6/WR、P3.7/RD用导线连接到“独立式键盘”区域中的SP1和SP2端子上; 4.程序设计内容 (1).            密码的设定,在此程序中密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。 (2).            密码的输入问题: 由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。进入密码的判断比较处理状态并给出相应的处理过程。 (3).            按键禁止功能:初始化时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。 5.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)%256;   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)%256;   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;               }           }     } }  

版权与免责声明

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

标签: 89S51 密码锁电路

发表评论

接线图网Copyright Your WebSite.Some Rights Reserved. 备案号:桂ICP备2022002688号-2 接线图网版权所有 联系作者QQ:360888349