0011基于单片机电子密码锁控制系统设计

资料下载地址

2.1 设计分析

一个电子密码锁,应该能实现以下功能:

(1)能够从键盘中输入密码,并相应地在显示器上显示‘*’;

(2)能够判断密码是否正确,正确则开锁,错误则输出相应信息;

(3)能够实现密码的修改;

(4)断电或者单片机复位后能够保存之前的操作,比如密码的修改;

(5)在操作错误达到一定次数后能够报警。

根据以上分析,本次电子密码锁设计的主要重点是以下几个部分:4x4矩阵键盘设计、LCD信息显示、密码的掉电存储和密码的比较和处理。当然,除了这几个部分外还有LED指示和报警等功能模块。

本设计应该按以下步骤去实现:

第一步:选择材料和器件。

第二步:根据单片机原理和模拟电子技术基础等理论知识在PROTEUS

中画出仿真图。

第三步:检查仿真图,确保其能够实现所有功能。

第四步:根据需要实现的功能逻辑画出程序流程图。

第五步:根据程序流程图和PROTEUS仿真图,使用KEIL软件进行程序的编写和调试。

第六步:将KEIL和PROTEUS联合仿真、调试,查看是否实现所有功能。

基于实际情况,在设计中,用发光二极管代替电磁锁,二极管亮则代表锁开,二极管不亮则代表锁关。

 

 while(1)
		{
		   KeyDown();	 按键扫描

		  ///===========正常输入密码操作======================
		   if (KeyValue<=9 && !set_flg && !LOCK_flg) //有按键按下
		   {
		     input_Value[i]=KeyValue;			 			 
			 if (Right_flg0)
			 {  clear_window();
			 	Right_flg0=0;
			 }

			 LcdWriteCom(0x80+i);  //显示当前按键的值
			 LcdWriteData('*');

			 i++;
		   	 if(i>=4)  //判断
			 {
			 	Right_flg0=0;
			    for (j=0;j<4;j++)
				{
				    if (input_Value[j]!=saved_Value[j])
					   Right_flg0=1;				
				}
				clear_window();
				if(!Right_flg0) 		 密码输入正确
				{ 
				  BUZZER=0;	 //声音报警
				  delay_ddll = 1;
				  LcdWriteCom(0x80+i+2);
				  LcdWriteData('O');
				  LcdWriteData('K');
				  At24c02Write(6,0);	清除错误输入次数 
				}
				else
				{ 
				  BUZZER=1;
				  LcdWriteCom(0x80+i+2);
				  LcdWriteData('E');
				  LcdWriteData('R');

				  temp00=At24c02Read(6);  存储输入错误次数
				  if (temp00>=2)	      //连续输入错误超过3次
				  {	  
				    LOCK_flg=1;
					RELAY=0;  /指示灯起来
					LcdWriteCom(0x80+i+2);
				    LcdWriteData('L');
				    LcdWriteData('K');				  	  
				  }
				  At24c02Write(6,temp00+1);		 				  	 
				}

				i=0;		    
			 }
		   }
		///===========正常输入密码操作 end======================


		 ///===========修改密码操作======================
		   if (KeyValue<=9 && set_flg && !LOCK_flg) //有按键按下 KeyValue!=66
		   {
			 input_Value[k]=KeyValue;
			 
			 LcdWriteCom(0x80+k);  //显示当前按键的值
			 LcdWriteData('*');

			  k++;
			  if(k>=4)  //判断
			  {
				  if (set_flg==2)
				  {					
				        for (j=0;j<4;j++)
						{
						  saved_Value[j]=input_Value[j];
						  At24c02Write(j+1,saved_Value[j]);						  						  						 						   				    
						}
						clear_window();

				  		set_flg=0;
						LED = 0;  //设置状态指示灯亮起来
						delay_ddll =1;
//				  		LcdWriteCom(0x80+k+2);
//						LcdWriteData('O');
//						LcdWriteData('K');
				  }

			 	  if (set_flg==1)
				  {///============================================					  							
						Right_flg=0;
					    for (j=0;j<4;j++)
						{
						  if(input_Value[j]!=saved_Value[j])
						    Right_flg=1;				    
						}
						clear_window();
						if(!Right_flg) 		 ///旧密码输入正确
						{ 
						  set_flg=2;         ///可以进行下一步操作						  
						  LcdWriteCom(0x80+0x40);  //
						  LcdWriteData('N');
						  LcdWriteData('E');
						  LcdWriteData('W');	 
						}
						else
						{ 
						  LcdWriteCom(0x80+k+2);
						  LcdWriteData('E');
						  LcdWriteData('R');
						  
						  temp00=At24c02Read(6);  存储输入错误次数
						  if (temp00>=2)	
						  {	  
						    LOCK_flg=1;
							RELAY=0;  /指示灯起来
							LcdWriteCom(0x80+i+2);
						    LcdWriteData('L');
						    LcdWriteData('K');				  	  
						  }
						  At24c02Write(6,temp00+1);			 
						}
				  }	  ///============================================
					  				

				k=0;		    
			 }
		   }
	  ///===========修改密码操作 end======================

		   if (KeyValue==0x0A && !LOCK_flg)  //有按键按下	 
		   {
			   clear_window();
			   set_flg=1;
			   LcdWriteCom(0x80+0x40);  //
			   LcdWriteData('O');
			   LcdWriteData('L');
			   LcdWriteData('D');

		 	   k=0;  //=================		    			 
		   }
	 =============############================================
		   else if (KeyValue==0x0B && !LOCK_flg)  //有按键按下,关上锁,清除窗口!LCK
		   {	
			  BUZZER=1;
			  clear_window();		    			 
		   }
		  
		  if (delay_ddll)
		  {
		  	   delay_ddll++;
			   if (delay_ddll>2000)
			   {
			   	   LED = 1;
				   BUZZER = 1;
				   delay_ddll = 0;
			   }
		  }
	   =============================================
		 Lcd1602_Delay1ms(1);

		}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈晨电子工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值