51单片机课设—密码锁

按照老师的要求做了个51课设的密码锁,支持两个用户持有两套密码,且可以进行修改密码,修改密码需要先验证密码再给予修改权限,修改后的密码存入eeprom--24c02里面,相关内容提示用lcd1602屏幕进行显示。

 

主函数代码:

void main()
{
 LCD_Init();     //初始化LCD
 Timer0Init();  //初始化定时器0
 LCD_ShowString(1,1,"Password:");   //显示请输入密码
for( test=3;test>=0;test--)
	{
		pass1_ee *= 10;
		pass1_ee += at24c02_read_one_byte(test);
		pass2_ee *= 10;
		pass2_ee += at24c02_read_one_byte(test+4);
	}
   //LCD_ShowNum(2,1,pass1_ee,4);
	 LCD_ShowNum(2,1,at24c02_read_one_byte(0),1);
  
while(1)
{
	/* if(Dao_Shu==60||flag==1)
	 {
		LCD_ShowString(1,14,"ERR");
		 while(i--)
			{	
				LCD_RW = !LCD_RW;
				delay_1(100);
			}  
	 }
 
	*/
	 
KeyNum=MatrixKey();  //输入捕获
if(KeyNum)
{
   if(KeyNum<=10)    //每次输入一个一位十进制数字
   {
			if(Count<4) 
		 {
			 Password*=10;    
			 Password+=KeyNum%10;  //数据存储
			 Count++; 
		 }
     LCD_ShowNum(2,1,Password,4); 
   }
   if(KeyNum==11)   //按下矩阵键盘的11按键 来确认输入                                
   {
    if((Password==pass1_ee)||(Password==pass2_ee))                             
    {
		 Dao_Shu = 0;
     LCD_ShowString(1,14,"OK "); 
     Password=0;  
     Count=0;  
		 
     LCD_ShowNum(2,1,Password,4); 
    }		
    else    
    {
			flag=1;
     LCD_ShowString(1,14,"ERR"); 
     Password=0;  
     Count=0;  
     LCD_ShowNum(2,1,Password,4); 
    }
   }
   if(KeyNum==12)                           
   {
		 Dao_Shu=0;		 
     Password=0;  
     Count=0;  
     LCD_ShowNum(2,1,Password,4); 
		 //LCD_ShowNum(2,1,pass1_ee,4);
   }
	 if(KeyNum==13)  						// ***********************修改密码*******************************
	 {
		 while(Gai_Flag)
		 {
			 KeyNum=MatrixKey();  //输入捕获
			 if(KeyNum)
			 {
				 if(Count_G<4) 
				 {
					 pass_temp*=10;    
					 pass_temp+=KeyNum%10;  //数据存储
					 LCD_ShowNum(2,1,pass_temp,4);
					 Count_G++;  
				 }
			  }
			 
			 if(KeyNum==13)
		   {  				     // LCD_ShowNum(2,1,pass_temp,4);
			                 // pass_temp=0;
												
											 
				               if((pass_temp==pass1_ee)||(pass_temp==pass2_ee))
											 {
													pass_temp=0;
												 LCD_ShowNum(2,1,pass_temp,4);
												 
													while(Gai_Flag1)
													{
															KeyNum_1=MatrixKey();  //输入捕获
															 if(KeyNum_1)
															 {
																 if(Count_G1<4) 
																 {LCD_ShowString(1,14,"OK ");
																	 pass_temp*=10;    
																	 pass_temp+=KeyNum_1%10;  //数据存储
																	 LCD_ShowNum(2,1,pass_temp,4);
																	 Count_G1++; 																	 
																 }
															 }
																 if(KeyNum_1==13)
																 {  
																	 
																		pass_temp2 = pass_temp;
																	  pass_temp = 0;
																	  LCD_ShowNum(2,1,pass_temp,4);
															//		  
																	  while(Gai_Flag2)
																		{
																			 KeyNum_1=MatrixKey();
																			 if(KeyNum_1)
																			 {
																					if(Count_G2<4)
																					{
																						pass_temp*=10;    
																					  pass_temp+=KeyNum_1%10;  //数据存储
																					  LCD_ShowNum(2,1,pass_temp,4);
																					  Count_G2++; 												
																					} 
																					else
																					{
																						pass_temp3 = pass_temp;
																						Gai_Flag2=0;
																					}
																			 }
																		}
																	  //
																 }
																 if(KeyNum_1==14)   //按下十四  一号密码
																 {
																	 if(pass_temp3==pass_temp2)
																	 { Password_1 = pass_temp2;
																		 Count_G = 0;
																		 Gai_Flag1 = 0;
																		 Gai_Flag = 0;
																		 data1_1 = Password_1 %10;
																		 data1_2 = (Password_1/10) %10;
																		 data1_3 = (Password_1/100) %10;
																		 data1_4 = (Password_1/1000) %10;
																		 at24c02_write_one_byte(EEPROM_ADDRESS,data1_1);
																		 at24c02_write_one_byte(EEPROM_ADDRESS+1,data1_2);
																		 at24c02_write_one_byte(EEPROM_ADDRESS+2,data1_3);
																		 at24c02_write_one_byte(EEPROM_ADDRESS+3,data1_4);
																	 }
																	 else
																	 {
																		 Count_G = 0;
																		 Gai_Flag1 = 0;
																		 Gai_Flag = 0;
																		 LCD_ShowString(1,14,"ERR");
																	 }
																 }
																 if(KeyNum_1==15)   //按下十五  二号密码
																 {
																	 if(pass_temp3==pass_temp2)
																	 {
																		 Password_2 = pass_temp;
																		 Count_G = 0;
																		 Gai_Flag1 = 0;
																		 Gai_Flag = 0;
																		 data1_1 = Password_2 %10;
																		 data1_2 = (Password_2/10) %10;
																		 data1_3 = (Password_2/100) %10;
																		 data1_4 = (Password_2/1000) %10;
																		 at24c02_write_one_byte(EEPROM_ADDRESS+4,data1_1);
																		 at24c02_write_one_byte(EEPROM_ADDRESS+5,data1_2);
																		 at24c02_write_one_byte(EEPROM_ADDRESS+6,data1_3);
																		 at24c02_write_one_byte(EEPROM_ADDRESS+7,data1_4);
																	 }
																	 else
																	 {
																		 Count_G = 0;
																		 Gai_Flag1 = 0;
																		 Gai_Flag = 0;
																		 LCD_ShowString(1,14,"ERR");
																	 }
																 }
													}
											 }//
			        

		 }
		 		 
	 }
	 }									//*****************************************修改密码*****************************
	
	 
}
	       
	
	
}

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值