- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar i,j,num,temp,wrong;
- uchar passw[]={1,2,3,4,5,6,7,8};
- uchar passt[]= {0,0,0,0,0,0,0,0};
- uchar code table[]= {
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71,
- 0x76,0x79,0x38,0x3f,0};
- bit lockflag;
- bit editflag;
- bit cmpflag;
- bit pressflag;
- sbit alarm=P1^3;
- sbit rled=P1^0;
- sbit gled=P1^1;
- sbit yled=P1^2;
- uint t0,a;
- uchar right;
- void delay(uint z)
- { uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void lock()
- {
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- ET0=1;
- EA=1;
- TR0=1;
- while(1)
- {
- if(t0<1200)
- {
- alarm=0;
- for(a=2000;a>0;a--)
- {
- }
- rled=~rled;
- delay( 1000);
- }
- else
- {
- alarm=0;
- rled=1;
- TR0=0;
- t0=0;
- break;
- }
- }
- }
- void timer0() interrupt 1
- {
- TH0=(65536- 50000)/256;
- TL0=(65536-50000)%256;
- t0++;
- }
- uchar keyscan()
- {
- P3=0xfe;
- temp=P3;
- temp=P3&0xf0;
- while(temp!=0xf0)
- {
- delay(50);
-
- if(temp!=0xf0)
- {
- temp=P3;
- switch(temp)
- {
- case 0xee: {num=0;pressflag=1;} //1110 1110
- break;
- case 0xde: {num= 1;pressflag=1;} //1101 1110
- break;
- case 0xbe: {num=2;pressflag=1;} //1010 1110
- break;
- case 0x7e: {num=3;pressflag=1;} //0111 1110
- break;
- }
- while(temp!=0xf0)
- {
- temp=P3;
- temp=temp&0xf0;
- }
- }
- }
- P3=0xfd;
- temp=P3;
- temp=P3&0xf0;
- while(temp!=0xf0)
- {
- delay(50);
- if(temp!=0xf0)
- {
- temp=P3;
- switch(temp)
- {
- case 0xed: {num=4;pressflag=1;}
- break;
- case 0xdd: {num=5;pressflag=1;}
- break;
- case 0xbd: {num=6;pressflag=1;}
- break;
- case 0x7d: {num=7;pressflag=1;}
- break;
- }
- while(temp!=0xf0)
- {
- temp=P3;
- temp=temp&0xf0;
- }
- }
- }
- P3=0xfb;
- temp=P3;
- temp=P3&0xf0;
- while(temp!=0xf0)
- {
- delay(50);
- if(temp!=0xf0)
- {
- temp=P3;
- switch(temp)
- {
- case 0xeb: {num=8;pressflag=1;}
- break;
- case 0xdb: {num=9;pressflag=1;}
- break;
- case 0xbb: {num= 10;pressflag=1;}
- break;
- }
- while(temp!=0xf0)
- {
- temp=P3;
- temp=temp&0xf0;
- }
- }
- }
- return num;
- }
- void input()
- {
- while(num!=10)
- {
- keyscan();
- }
- if(num== 10)
- {
- pressflag=0;
- yled=0;
- for(i=0;i<8;i++)
- {
- while(!pressflag)
- {
- keyscan();
- }
- pressflag=0;
- temp=num;
- if(temp!=10)
- {
- if(!editflag)
- passt[i]=temp;
- else
- passw[i]=temp;
- P0=table[num];
- }
- else
- break;
- }
- yled=1;
- cmpflag=~editflag;
- delay(200);
- P0=0;
- num=0;
- }
- }
- main()
- {
- i=0;
- j=0;
- lockflag=0;
- editflag=0;
- pressflag=0;
- P0=0;
- while(1)
- {
- input();
- if(cmpflag)
- {
- cmpflag=0;
- for(j=0;j<8;j++)
- {
- if(passw[j]!=passt[j])
- {
- if(wrong==2)
- {
- wrong=0;
- lock();
- }
- else
- {
- gled=1;
- rled=0;
- alarm=0;
- for(a=5000;a>0;a--)
- {
- }
- delay(500);
- rled=1;
- alarm=1;
- wrong++;
- }
- break;
- }
- else
- {
- if(j==7)
- {
- rled=1;
- gled=0;
- editflag=1;
- input();
- editflag=0;
- gled=1;
- wrong=0;
- }
- }
- }
- }
- }
- }
复制代码 |