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

📄 lock.c

📁 keil c 开发平台 51单片机 电子锁
💻 C
字号:
#include <at89x51.h>
unsigned char  number[]={10,10,10,10,10,10,10,11};
unsigned char led[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0x10,0xce,0x9c,
                     0xce,0x9e,0xec,0xde,0x01,0x8c,0x00};
unsigned char scan[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};
unsigned long num=0;
unsigned char i=0,m=0;
unsigned char oc=0,set=0;
unsigned char key[]={0,0,0,0,0,0,0};
unsigned char num2[]={10,10,10,10,10,10,10};
bit s=0;

unsigned long  ten (unsigned char n)
{
   unsigned long tens=1;
   for(n;n>0;n--)
   {
     tens=tens*10;
   }
   return tens;
}

void putnum (unsigned char t)
{
  unsigned char n=t-1;
  unsigned long num1=num;
  number[n]=num1/ten(n);
  for(n;n>0;n--)
  {
    number[n-1]=num1%ten(n)/ten(n-1);
  }
}

void setnum (unsigned char t)
{
  if (i!=7)
  {
     num=num*10+t;   
	 i++;
	 putnum(i);
  }
}

void time0 (void) interrupt 1
{
    TH0=(65536-3000)/256;
    TL0=(65536-3000)%256;  
    P0=led[number[m]];
	P2=scan[m];
	m++;
	if(m==8) m=0;
}

void delay (void)
{
  unsigned char x,y,z;
  for(x=10;x>0;x--)
  for(y=10;y>0;y--)
  for(z=248;z>0;z--);
}

void error (void)
{
  P1_3=1;
  number[0]=17;
  number[1]=17;
  number[2]=19;
  number[3]=18;
  number[4]=0;
  number[5]=18;
  number[6]=18;
  number[7]=14;
  delay();
  delay();
  number[0]=17;
  number[1]=19;
  number[2]=17;
  delay();
  delay();
  number[0]=19;
  number[1]=17;
  number[2]=17;
  delay();
  delay();
  P1_3=0;
}

void main (void)
{
 TMOD=0x01;
 TH0=(65536-3000)/256;
 TL0=(65536-3000)%256;
 ET0=1;
 EA=1;
 TR0=1;
 while(1)
 {
   P3=0xef;
   if(P3!=0xef)
    {
      delay();
	  if(P3!=0xef)
	   {
	     switch (P3)
		  {
	       case 0xee:
                if(oc==0)
				 {
		           setnum(0);
				 }
				 if(oc==1)
				  {
				    if(set==1)
					{
					  setnum(0);
					}
				  }
		        break;//col1
		   case 0xed:
		        if(oc==1)
				{
				  if(set==0)
				  {
				    P1_4=0;
				  }
				}
		        break;//lock open
		   case 0xeb:
		        if(oc==1)
				{
				  if(set==0)
				  {
				    P1_4=1;
				  }
				}
		        break;//lock close
		   case 0xe7:
		        if(oc==1)
				  {
				    set=1;
					number[0]=10;
					number[1]=10;
					number[2]=10;
					number[3]=10;
					number[4]=10;
					number[5]=10;
					number[6]=10;
					number[7]=12;
				  }
		        break;//setting key
		   }
	   }
       while(P3!=0xef);
     }//P3=0xfe row4
   P3=0xdf;
   if(P3!=0xdf)
    {
      delay();
	  if(P3!=0xdf)
	   {
	     switch (P3)
		  {
	       case 0xde:
                if(oc==0)
				 {
		           setnum(7);
				 }
				 if(oc==1)
				  {
				    if(set==1)
					{
					  setnum(7);
					}
				  }		      
		        break;//col1
		   case 0xdd:
                if(oc==0)
				 {
		           setnum(8);
				 }
				 if(oc==1)
				  {
				    if(set==1)
					{
					  setnum(8);
					}
				  }
		        break;
		   case 0xdb:
                if(oc==0)
				 {
		           setnum(9);
				 }
				 if(oc==1)
				  {
				    if(set==1)
					{
					  setnum(9);
					}
				  }
		        break;
		   case 0xd7:
		        if(oc==1)
				{
				  if(set==0)
				  {
				    number[0]=10;
					number[1]=10;
					number[2]=10;
					number[3]=10;
					number[4]=10;
					number[5]=10;
					number[6]=10;
					number[7]=11;
					i=0;
					num=0;
					oc=0;
				  }
				  if(set==1)
				  {
	         	    number[0]=17;
					number[1]=16;
					number[2]=15;
					number[3]=1;
					number[4]=15;
					number[5]=14;
					number[6]=13;
					number[7]=0;
					i=0;
					num=0;
					set=0;
				  }
				}
		        break;//cancel
		   }
	   }
       while(P3!=0xdf);
     }//P3=0xde row3
   P3=0xbf;
   if(P3!=0xbf)
    {
      delay();
	  if(P3!=0xbf)
	   {
	     switch (P3)
		  {
	       case 0xbe:
                if(oc==0)
				 {
		           setnum(4);
				 }
				 if(oc==1)
				  {
				    if(set==1)
					{
					  setnum(4);
					}
				  }
		        break;//col1
		   case 0xbd:
                if(oc==0)
				 {
		           setnum(5);
				 }
				 if(oc==1)
				  {
				    if(set==1)
					{
					  setnum(5);
					}
				  }
		        break;//col2
		   case 0xbb:
                if(oc==0)
				 {
		           setnum(6);
				 }
				 if(oc==1)
				  {
				    if(set==1)
					{
					  setnum(6);
					}
				  }
		        break;//col3
		   case 0xb7:
		        if(oc==0)
                 {
				   	number[0]=10;
					number[1]=10;
					number[2]=10;
					number[3]=10;
					number[4]=10;
					number[5]=10;
					number[6]=10;
					number[7]=11;
					i=0;
					num=0;
				 }
				 if(oc==1)
				 {
				   if(set==1)
				   {
				    number[0]=10;
					number[1]=10;
					number[2]=10;
					number[3]=10;
					number[4]=10;
					number[5]=10;
					number[6]=10;
					number[7]=12;
					i=0;
					num=0;
				   }
				 }
		        break;//col4//clear
		   }
	   }
       while(P3!=0xbf);
     }//P3=0xbe row2
   P3=0x7f;
   if(P3!=0x7f)
    {
      delay();
	  if(P3!=0x7f)
	   {
	     switch (P3)
		  {
	       case 0x7e:
                if(oc==0)
				 {
		           setnum(1);
				 }
				 if(oc==1)
				  {
				    if(set==1)
					{
					  setnum(1);
					}
				  }
		        break;//col1
		   case 0x7d:
                if(oc==0)
				 {
		           setnum(2);
				 }
				 if(oc==1)
				  {
				    if(set==1)
					{
					  setnum(2);
					}
				  }
		        break;//col2
		   case 0x7b:
                if(oc==0)
				 {
		           setnum(3);
				 }
				 if(oc==1)
				  {
				    if(set==1)
					{
					  setnum(3);
					}
				  }
		        break;//col3
		   case 0x77:
		         if(oc==0)
         		 {
				   if((number[0]==key[0])&&(number[1]==key[1])&&(number[2]==key[2])
				   &&(number[3]==key[3])&&(number[4]==key[4])&&(number[5]==key[5])
				   &&(number[6]==key[6]))
				   {
				     oc=1;
	         	    number[0]=17;
					number[1]=16;
					number[2]=15;
					number[3]=1;
					number[4]=15;
					number[5]=14;
					number[6]=13;
					number[7]=0;
				   }
				   else
				   {
				     //dosometing
                      error();
					  number[0]=10;
  					  number[1]=10;
  					  number[2]=10;
 					  number[3]=10;
 					  number[4]=10;
 					  number[5]=10;
					  number[6]=10;
					  number[7]=11;
				   }
					i=0;
					num=0;
				 }
				 if(oc==1)
				   {
				     if(set==1)
					   {
					     if(s==0)
						 {
                            num2[0]=number[0];
							num2[1]=number[1];
							num2[2]=number[2];
							num2[3]=number[3];
							num2[4]=number[4];
							num2[5]=number[5];
							num2[6]=number[6];
							i=0;
							num=0;
							s=1;
					        number[0]=10;
					        number[1]=10;
					        number[2]=10;
							number[3]=10;
							number[4]=10;
							number[5]=10;
							number[6]=10;
							number[7]=12;
						 }
						 else
						 {
						   if((num2[0]==number[0])&&(num2[1]==number[1])&&(num2[2]==number[2])&&(num2[3]==number[3])&&
						   (num2[4]==number[4])&&(num2[5]==number[5])&&(num2[6]==number[6]))
						   {
						     if((num2[0]==10)&&(num2[1]==10)&&(num2[1]==10)&&(num2[2]==10)&&(num2[3]==10)&&(num2[4]==10)&&
							 (num2[5]==10)&&(num2[6]==10))
							 {
							   error();
							   oc=0;
							   set=0;
							   s=0;
							   num=0;
							   i=0;
							   number[0]=10;
					           number[1]=10;
					           number[2]=10;
							   number[3]=10;
							   number[4]=10;
							   number[5]=10;
							   number[6]=10;
							   number[7]=11;
							 }
							 else
							 {
							   key[0]=number[0];
							   key[1]=number[1];
							   key[2]=number[2];
							   key[3]=number[3];
							   key[4]=number[4];
							   key[5]=number[5];
							   key[6]=number[6];
							   oc=0;
							   set=0;
							   s=0;
							   num=0;
							   i=0;
							   number[0]=10;
					           number[1]=10;
					           number[2]=10;
							   number[3]=10;
							   number[4]=10;
							   number[5]=10;
							   number[6]=10;
							   number[7]=11;
							 }

						   }
						   else
						   {
						    error();
							oc=0;
							set=0;
							s=0;
							num=0;
							i=0;
							number[0]=10;
					        number[1]=10;
					        number[2]=10;
							number[3]=10;
						    number[4]=10;
					   	    number[5]=10;
							number[6]=10;
							number[7]=11;
						   }
						 }
					   }
				   }
		        break;//col4//enter
		   }
	   }
       while(P3!=0x7f);
     }//P3=0x7e row1
  }
}

⌨️ 快捷键说明

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