#include<reg51.h>
#include<1602.h>
#include<key.h>
#include<24c01.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED1=P1^5;
sbit LED2=P1^6;
sbit INIT=P2^2;
uchar idata key[8]={0,0,0,0,0,0,0,0}; //初始化
uchar idata iic[8]={0,1,2,3,4,5,6,7};
void Delay5ms(uint t);
//**************************************************
void press(uchar *s)
{
uchar dat;
P3=0xf0; //保存第一位密碼
while(P3==0xf0);
dat=key_scan();
if((dat!=0x0a)&&(dat!=0x0b))
{ *s=dat;
LCD_initial();
LCD_set_position(0x40);
LCD_printc('*'); //輸入密碼顯示*
LED1=0;
Delay5ms(250);
LED1=1;
s++;
}
//**************************************************
P3=0xf0; //保存第二位密碼
while(P3==0xf0);
dat=key_scan();
if((dat!=0x0a)&&(dat!=0x0b))
{
*s=dat;
LCD_printc('*');
LED1=0;
Delay5ms(250);
LED1=1;
s++;
}
//**************************************************
P3=0xf0; //保存第三位密碼
while(P3==0xf0);
dat=key_scan();
if((dat!=0x0a)&&(dat!=0x0b))
{
*s=dat;
LCD_printc('*');
LED1=0;
Delay5ms(250);
LED1=1;
s++;
}
//**************************************************
P3=0xf0; //保存第四位密碼
while(P3==0xf0);
dat=key_scan();
if((dat!=0x0a)&&(dat!=0x0b))
{
*s=dat;
LCD_printc('*');
LED1=0;
Delay5ms(250);
LED1=1;
s++;
}
//**************************************************
P3=0xf0; //保存第五位密碼
while(P3==0xf0);
dat=key_scan();
if((dat!=0x0a)&&(dat!=0x0b))
{
*s=dat;
LCD_printc('*');
LED1=0;
Delay5ms(250);
LED1=1;
s++;
}
//**************************************************
P3=0xf0; //保存第六位密碼
while(P3==0xf0);
dat=key_scan();
if((dat!=0x0a)&&(dat!=0x0b))
{
*s=dat;
LCD_printc('*');
LED1=0;
Delay5ms(250);
LED1=1;
s++;
}
//**********************************************
P3=0xf0; //保存第七位密碼
while(P3==0xf0);
dat=key_scan();
if((dat!=0x0a)&&(dat!=0x0b))
{
*s=dat;
LCD_printc('*');
LED1=0;
Delay5ms(250);
LED1=1;
s++;
}
//************************************************
P3=0xf0; //保存第八位密碼
while(P3==0xf0);
dat=key_scan();
if((dat!=0x0a)&&(dat!=0x0b))
{
*s=dat;
LCD_printc('*');
LED1=0;
Delay5ms(250);
LED1=1;
}
//**************************************************
do{
P3=0xf0; //鍵入Enter鍵盤繼續執行下面語句,否則等待
while(P3==0xf0);
dat=key_scan();
}while(dat!=0x0b);
}
//*****************************************************
void Delay5ms(uint t) //參數25延時5ms
{
uint i,j,k;
for(k=t;k>0;k--)
for(i=25;i>0;i--)
for(j=4;j>0;j--) ;
}
void main()
{
uchar dat;
uchar i=0,j=0,k;
uchar x=0;
LED1=1;
LED2=1;
SOUND=0;
INIT=1;
Designer(); //顯示標題
for(i=0;i<200;i++){Delay5ms(25);}
Pass_init();
for(i=0;i<250;i++)
{
if(INIT==0)
Delay5ms(25);
if(INIT==0)
{
do{
x=SendB(iic,0x50,8);
}while(x!=1) ;
x=0;
break;
}
Delay5ms(25);
}
do{
x=ReadB(iic,0x50,8); //首先從IIC器件中讀出密碼以供下面輸入密碼
}while(x!=1) ;
x=0;
//**********************************若密碼不正確,循環執行do{}while()********************************************
do{
LED1=1;
System(); //顯示:"請輸入密碼"字幕
press(key);
if((key[0]==iic[0])&&(key[1]==iic[1])&&(key[2]==iic[2])&&(key[3]==iic[3])&&(key[4]==iic[4])&&(key[5]==iic[5])&&(key[6]==iic[6])&&(key[7]==iic[7])) //密碼比較,若密碼正確責進入系統,若密碼不正確則顯示密碼錯誤,重新輸入密碼
{
True();
LED1=0;
LED2=0;
for(i=0;i<30;i++)
{
Sound_QQ(200,60);
Delay5ms(100);
}
LED1=1;LED2=1;
do
{
P3=0xf0; //鍵入1或2繼續執行下面語句,否則等待
while(P3==0xf0);
dat=key_scan();
} while(dat!=1&&dat!=2);
if(dat==1) //開鎖
{
LED1=0;
Unlock();
for(i=0;i<200;i++){Delay5ms(25);}
}
if(dat==2) //修改密碼
{
do{
Modify();
press(key);
Again();
press(iic);
if((key[0]==iic[0])&&(key[1]==iic[1])&&(key[2]==iic[2])&&(key[3]==iic[3])&&(key[4]==iic[4])&&(key[5]==iic[5])&&(key[6]==iic[6])&&(key[7]==iic[7]))
{
Succeed(); //修改密碼成功
for(i=0;i<100;i++){Delay5ms(25);}
Delay5ms(25);
x=SendB(iic,0x50,8);
Delay5ms(25);
x=ReadB(iic,0x50,8);break;
}
else //修改密碼不成功,重新修改
{
Repeat();
for(i=0;i<100;i++){Delay5ms(25);}
}
}while(1);
}
}
else //密碼不正確,重新輸入密碼
{
j++;
if(j==3)
{
for(i=0;i<60;i++)
{
Sound_QQ(250,40);
for(k=0;k<3;k++)
{ LED1=~LED1;
LED2=~LED2;
Delay5ms(25);
}
}
j=0;
}
Error();
for(i=0;i<50;i++)
{
Sound_QQ(250,40);
LED2=~LED2;
Delay5ms(25);
}
for(i=0;i<100;i++){Delay5ms(35);}
}
}while(1);
}
歡迎光臨 (http://www.raoushi.com/bbs/) | Powered by Discuz! X3.1 |