📄 lock.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 + -