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

📄 电子密码锁.c

📁 肯定是你喜欢的东西了 自己打开看看了 就知道了
💻 C
字号:
#include <reg51.h>
#include <string.h>
#include <intrins.h>
#include <VIIC_C51.h>
#define	uchar	unsigned	char
#define	uint	unsigned	int
#define	KEY	P1
#define	DISP	P0
#define null1   '\0'
//**********************************
sbit	LED=P2^0;	  //密码正确点亮
sbit	LED1=P2^1;	  //密码错误点亮
sbit	P14=P1^4;
sbit	P15=P1^5;
sbit	P16=P1^6;
sbit	P17=P1^7;
sbit    P22=P2^2;
sbit    P23=P2^3;
sbit    P24=P2^4;
uchar   key;
uchar   shuzi;
uchar   statet;
uchar   input_mima[9];
uchar	mima[9]={0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F};
uchar	k;
uchar	kk;
uchar	tab[13]={0x00,0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x39,0x5e};
//***********************************
void	delay(uint	i);
void	delay_right(void);
void	delay_wrong(void);
void	init_main(void);
void	main(void);
void	get_key(void);
void    change_mima(void);
void    calc_disp(uchar array[9],uchar n);
void    clear_arry(uchar *p,uchar n); //
void    sendbyte(void);
void    readbyte(void);
//***********************************
void	delay(uint	i)	   //
{
	while(--i);
}
 //void	delay1(double i)	   //
//{
//	while(kk=0)
//	{i--; if(kk=1) continue;   }
//}
//***********************************
void	init_main(void)		// 初始化子程序
{
	DISP=0;
	LED=0;
	LED1=0;
//	key_value=0;
    k=0;
    clear_arry(input_mima,9);
//	clear_arry(mima,9);
}
//***********************************
void sendbyte(void)
{
  if((ISendStr(0x00,0x00,input_mima,8))!=1) statet=3;
}
//***********************************
void readbyte(void)
{
 if((IRcvStr(0x01,0x00,mima,8))!=1) statet=3;
    
} 
//***********************************
void	main(void)
{uchar lock=0; 
 init_main();
 statet=0;
 //readbyte();    
  while(1)
  {	
	get_key();
	//delay1(1200000);
	while(kk==1)
	{
		kk=0;
	  if (statet==0)
	    {
	    if(key!=0x00 && key!=0x39 && key!=0x5e)
        { 
	      input_mima[k]=key;
		  if(k<8) k++;
		  else
		  k=0;
		   }			  
	  if(key==0x5e)
	    { 
	     if(strcmp(input_mima,mima)==0)
	      {statet=1;
		   delay_right();	       
	       init_main();		   
	      }
	    else 
	     {delay_wrong();
		  lock++;
		  if(lock<3)
		  statet=0;
		  else statet=2;
	      init_main();
	     }
		 }continue;
       }
	     
       if(statet==1)
	    { 
		  if(key==0x39)	   	   
	      {
		   delay_right();
		   change_mima();
		  }continue;
		 }
		 }calc_disp(input_mima,8); 	 	
  }
}
//***********************************
void   change_mima(void)
 { //uchar   xin_mima[9];
   uchar   new_mima[9];
   uchar   confirm_mima[9];
   uchar   xianshi[9];
   uint state1=0, state2=0, state3=0;
   uint l=0,m=0,n=0,i;
   for(i=0;i<=8;i++) xianshi[i]=null1;
   while(statet)
   { 
	get_key();
    while(kk==1)
	 {kk=0;
	  if (state1==0 && state2==0 && state3==0)
	  {  if(key!=0x00 && key!=0x39 && key!=0x5e)
         {   input_mima[l]=key;
		     xianshi[l]=key;
	    	 if(l<8) l++;
	     }
        if(key==0x5e)
	       {delay_right();state1=1;for(i=0;i<=8;i++) xianshi[i]=null1;
		   }continue;
	  }
	  if (state1==1 && state2==0 && state3==0)
	  {	
	    if(key!=0x00 && key!=0x39 && key!=0x5e)
         {   new_mima[m]=key;
		     xianshi[m]=key;
			 if(m<8) m++;
	     }
        if(key==0x5e)
	     { delay_right();state1=1; state2=1; for(i=0;i<=8;i++) xianshi[i]=null1; 
		 }continue;
	  } 
	  if (state1==1 && state2==1 && state3==0)
	  {	
	    if(key!=0x00 && key!=0x39 && key!=0x5e)
         { confirm_mima[n]=key;
		   xianshi[n]=key;
		   if(n<8) n++;    	
	     }
        if(key==0x5e)
	     { state1=1;state2=1;state3=1; }continue;
	  }
	  }
	 
      while(state1==1 && state2==1 && state3==1)
	  {
	    if(strcmp(input_mima,mima)==0 && strcmp(new_mima,confirm_mima)==0)
		  {for(i=0;i<8;i++)
           input_mima[i]=new_mima[i];
		  // sendbyte();
		  // done1();
		   state1=1;state2=0;state3=1;statet=0;
		   delay_right();
		   }
		else { state1=1;state2=0;state3=1;statet=0;for(i=0;i<=9;i++) input_mima[i]=null1;delay_wrong();}
		continue;
	  }//continue;
	 
	  calc_disp(xianshi,8); 
 }
}
//***********************************
void	delay_right(void)
{	uchar m;
	 for(m=10;m>0;m--)
	{
		LED=1;
		delay(2000);
		delay(2000);
		LED=0;
		delay(2000);
		delay(2000);
	}
}
//***********************************
void	delay_wrong(void)
{  uchar m;
	for(m=10;m>0;m--)
	{
		LED1=1;
		delay(2000);
    	delay(2000);
		LED1=0;
		delay(2000);
		delay(2000);
	}
}
//***********************************
void	get_key(void)
{   
	KEY=0xfe;		  // p1=1111 1110
	if(!P14)
	{
		delay(200);
		if(!P14)
		{
			while(!P14);
			key=tab[8];
//			key_value=7;
			kk=1;
		}	
	}	
		
	if(!P15)
	{
		delay(200);
		if(!P15)
		{
			while(!P15);
			key=tab[9];
//			key_value=8;
			kk=1;
		}	
	}
	if(!P16)
	{
		delay(200);
		if(!P16)
		{
			while(!P16);
			key=tab[10];
//			key_value=9;
			kk=1;
		}	
	}	KEY=0xfd;		 //p1 1111 1101
	if(!P14)
	{
		delay(200);
		if(!P14)
		{
			while(!P14);
			key=tab[5];
//			key_value=4;
			kk=1;
		}	
	}	
		
	if(!P15)
	{
		delay(200);
		if(!P15)
		{
			while(!P15);
			key=tab[6];
//			key_value=5;
			kk=1;
		}	
	}
	if(!P16)
	{
		delay(200);
		if(!P16)
		{
			while(!P16);
			key=tab[7];
//			key_value=6;
			kk=1;
		}	
	}
	KEY=0xfb;		   //p1 1111 1011
	if(!P14)
	{
		delay(200);
		if(!P14)
		{
			while(!P14);
			key=tab[2];
//			key_value=1;
			kk=1;
		}	
	}	
		
	if(!P15)
	{
		delay(200);
		if(!P15)
		{
			while(!P15);
			key=tab[3];
//			key_value=2;
			kk=1;
		}	
	}
	if(!P16)
	{
		delay(200);
		if(!P16)
		{
			while(!P16);
			key=tab[4];
//			key_value=3;
			kk=1;
		}	
	}/*	if(!P17)
	{
		delay(200);
		if(!P17)
		{
			while(!P17);
			init_main();
		}	
	}
	*/
	KEY=0xf7;
       if(!P14)
	{
		delay(200);
		if(!P14)
		{
			while(!P14);
			//statet=0;
  			init_main();

		//	kk=1;
		}	
	}
		if(!P15)
	{
		delay(200);
		if(!P15)
		{
			while(!P15);
			key=tab[1];
//			key_value=0;
			kk=1;
		}	
	}
		if(!P16)
	{
		delay(200);
		if(!P16)
		{
			while(!P16);
			key=tab[12];
			kk=1;
		}	
	}
		if(!P17)
	{
		delay(200);
		if(!P17)
		{
			while(!P17);
			key=tab[11];
			kk=1;
		}	
	}		
}
//***********************************
void   clear_arry(uchar *p,uchar n)
{ uchar j; 
    for(j=0;j<=n;j++,p++)
		 *p=null1;
}

//***********************************
void calc_disp(uchar array[9],uchar n)
{
 uchar leddisp[9];
  uchar i;

for(i=0;i<n;i++)
   leddisp[i]=array[i];
  i=0;
  for(i=0;i<8;i++)
  {switch(i)
   {case 0:{P22=0;P23=0;P24=0;}break;
    case 1:{P22=1;P23=0;P24=0;}break;
	case 2:{P22=0;P23=1;P24=0;}break;
	case 3:{P22=1;P23=1;P24=0;}break;
	case 4:{P22=0;P23=0;P24=1;}break;
	case 5:{P22=1;P23=0;P24=1;}break;
	case 6:{P22=0;P23=1;P24=1;}break;
	case 7:{P22=1;P23=1;P24=1;}break;
	default :  break;
   }
   P0=leddisp[i];
   delay(50);
 }
}

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

⌨️ 快捷键说明

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