⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 电子密码锁.c

📁 24C02和12864显示的电子密码锁设计
💻 C
字号:
/********************************************************************************

                    电子密码锁主函数,在不断完善中......

*******************************************************************************/

#include<reg51.h>
#include<12864.h>
#include<keypad.h>
#include<24C01.h>

#define uchar unsigned char
#define uint unsigned int
sbit LED1=P1^5;
sbit LED2=P1^6;
sbit INIT=P2^2;
sbit SOUND=P1^7;

uchar idata key[6]={0,0,0,0,0,0};
uchar idata iic[6]={0,1,2,3,4,5};

void press(uchar *s)
{
 	   uchar dat;
//**************************************************
       P3=0xf0;								//保存第一位密码 
	   while(P3==0xf0);
       dat=key_scan();
	   if((dat!=0x0a)&&(dat!=0x0b))
         {   *s=dat;
			 Left();
			 star_12864(star,0x05,16);
	     }
	   s++;	 	 
//**************************************************
	   P3=0xf0;							  //保存第二位密码 
	   while(P3==0xf0);						 
       dat=key_scan(); 
	   if((dat!=0x0a)&&(dat!=0x0b))
         {   *s=dat;
			 Left();
			 star_12864(star,0x05,24);
		  }
	   s++;	
//**************************************************
	   P3=0xf0;							  //保存第三位密码 
	   while(P3==0xf0);						 
       dat=key_scan();
	   if((dat!=0x0a)&&(dat!=0x0b))
         {   *s=dat;
			 Left();
			 star_12864(star,0x05,32);
		  }
	   s++;	
//**************************************************
	   P3=0xf0;							  //保存第四位密码 
	   while(P3==0xf0);						 
	   dat=key_scan();
	   if((dat!=0x0a)&&(dat!=0x0b))
         {   *s=dat;
			 Left();
			 star_12864(star,0x05,40);
		  }
	   s++;	
//**************************************************
	   P3=0xf0;							  //保存第五位密码 
	   while(P3==0xf0);						 
       dat=key_scan();
	   if((dat!=0x0a)&&(dat!=0x0b))
         {   *s=dat;
			 Left();
			 star_12864(star,0x05,48);
		  }
	   s++;	
//**************************************************
	   P3=0xf0;							  //保存第六位密码 
	   while(P3==0xf0);						 
       dat=key_scan();
	   if((dat!=0x0a)&&(dat!=0x0b))
         {   *s=dat;
			 Left();
			 star_12864(star,0x05,56);
		  }
//**************************************************
	   do{P3=0xf0;							//键入Enter键盘继续执行下面语句,否则等待 
	      while(P3==0xf0);						 
          dat=key_scan();
	      }while(dat!=0x0b);
}

void Delay10ms(void)	   //延时10ms 
{
	uint i,j,k;
	for(i=5;i>0;i--)
	for(j=4;j>0;j--)
	for(k=248;k>0;k--);

}

void main()
{
      uchar dat;
      uchar i=0,j=0,k;
      uchar x;
	  LED1=1;
	  LED2=1;
	  SOUND=0;
	  INIT=1;
      if(INIT==0)		   //密码初始化 
      {
	     x=SendB(iic,0x50,6);
		 Delay10ms();
      }  	   //首先从IIC器件中读出密码以供下面输入密码进行比较 
      x=ReadB(iic,0x50,6);
      Init_12864();
	  for(i=0;i<150;i++){Delay10ms();}
//**********************************若密码不正确,循环执行do{}while()********************************************
do{
	     LED1=1;
	     System();		  //显示:"请输入密码"字幕  
	     press(key);
		 if((key[0]==iic[0])&&(key[1]==iic[1])&&(key[2]==iic[2])&&(key[3]==iic[3])&&(key[4]==iic[4])&&(key[5]==iic[5])) //密码比较,若密码正确责进入系统,若密码不正确则显示密码错误,重新输入密码
         {
		    true();
		    do
		    {
		       P3=0xf0;							//键入1或2继续执行下面语句,否则等待 
	           while(P3==0xf0);						 
               dat=key_scan();
	         }while(dat!=0x01&&dat!=0x02);
		    if(dat==1)						       //开锁 
		    {
		        LED1=0;
				unlock();
			    for(i=0;i<100;i++){Delay10ms();}
	            continue;
		     }
		    if(dat==2)							//修改密码 
		   {
		       do{
		              System(); 
			          press(key);
			          again();
			          press(iic);
				      if((key[0]==iic[0])&&(key[1]==iic[1])&&(key[2]==iic[2])&&(key[3]==iic[3])&&(key[4]==iic[4])&&(key[5]==iic[5]))
				      {
				          succeed();				//修改密码成功 
						  for(i=0;i<100;i++){Delay10ms();}
			              Delay10ms();
	                      x=SendB(iic,0x50,6);
			              Delay10ms();	
                          x=ReadB(iic,0x50,6);break;
				       }
				      else 			    //修改密码不成功,重新修改 
					  {
					      repeat();
						  for(i=0;i<100;i++){Delay10ms();}
					   }
				  }while(1);   
		    }
		 
		 }
		else 									  //密码不正确,重新输入密码 
		{
		    j++;
			if(j==3)
			{
			   for(i=0;i<8;i++)
			   {
			      LED2=0;
				  for(k=0;k<5;k++){Delay10ms();}
				  LED2=1;
				  for(k=0;k<5;k++){Delay10ms();}
				}
				j=0;
			 }
			error();
			for(i=0;i<50;i++){Delay10ms();}
		 }
}while(1);  	
      
	  	  
	   
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -