/*******************AT89C51&&LCD1602应用电路*********************************/
/********密码锁***********/
#include<reg51.h>
#include<lcd1602.c>
#include<string.h>
sbit LED=P3^0;
unsigned char mima[6]={2,6,3,7,1,9}; //定义初始密码
unsigned char num[6];
unsigned int j=0,k=0,n=6,m=0,key;
void display(unsigned int input);
void delay1();
void main()
{ LED=0;
LCD_Initial();
GotoXY(0,0);
Print("Input");
/****************键盘扫描程序***********************/
while(1)
{ P1=0xff;
P1=0x70;
key=P1;
key=key&0xf0;
delay(10);
if(key!=0x70)
{
if(key==0x30)
{ P1=0xff;
P1=0x0f;
key=P1;
key=key&0x0f;
delay(10);
switch(key)
{
case 0x0e:num[j]='*'; break;
case 0x0d:num[j]=7;break;
case 0x0b:num[j]=4;break;
case 0x07:num[j]=1; break;
default:break;
}
}
if(P1==0x50)
{ P1=0xff;
P1=0x0f;
key=P1;
key=key&0x0f;
delay(10);
switch(key)
{
case 0x0e:num[j]=0; break;
case 0x0d:num[j]=8;break;
case 0x0b:num[j]=5;break;
case 0x07:num[j]=2; break;
default:break;
}
}
if(P1==0x60)
{ P1=0xff;
P1=0x0f;
key=P1;
key=key&0x0f;
delay(10);
switch(key)
{
case 0x0e:num[j]='#'; break;
case 0x0d:num[j]=9;break;
case 0x0b:num[j]=6;break;
case 0x07:num[j]=3; break;
default:break;
}
}
display(num[j]);
}
}
}
/***************显示程序******************/
/***************密码判断程序******************/
void display(unsigned int input)
{
if(n<12)
{ GotoXY(n,0);
Print("*");
GotoXY(n,1);
LCD_Write(1,input+0x30);
delay(20000);
delay(20000);}
n++;j++;
if(n==12)
{
if(strcmp(num,mima)==0) //判断输入的密码是否正确
{
LCD_Initial();
GotoXY(0,0);
Print("O K"); //输入正确屏幕显示OK
}
else
{
LCD_Initial();
GotoXY(0,0);
Print("Fault"); //输入错误请重新输入
delay(20000);
delay(20000);
delay(20000);
delay(20000);
delay(20000);
n=6;j=0;
LCD_Initial();
GotoXY(0,0);
Print("Input");k++;
}
if(k==3) //输入三次错误等待5s重新输入
{
GotoXY(0,0);
Print("Please wite 5s");
delay1();
n=6;j=0;m++;k=0;
LCD_Initial();
GotoXY(0,0);
Print("Input");
}
if(m==2) //总计输入错误6次屏幕回到初始化,LED灯闪烁报警。
{ LCD_Initial();
while(1)
{LED=1;
delay(2000);LED=0;delay(2000);}}
}
}
void delay1()
{
int t,h,s;
for(s=0;s<=5;s++)
{for(t=0;t<155;t++)
for(h=0;h<1000;h++);}
}
评论0