/************************1号修改,可以验证密码正确**********************************************
----------------1.开发环境:Keil v4 ----------------
----------------2.使用单片机型号:STC89C52RC ----------------
----------------3.单片机使用晶振:11.0592M ----------------
----------------4.功能:实现密码解锁,和存储记录----------------
----------------5.名称:智能保险柜 ----------------
***********************************************************************/
#include <reg52.h>
#include <intrins.h>
#include <main.h>
#include <chuankou.h>
#include <delay.h>
#include <eeprom.h>
#define uchar unsigned char
#define uint unsigned int
bit I2C_WriteData(uchar ADDR,uchar DAT);
uchar I2C_ReadData(uchar ADDR);
void main()
{ uchar xdata i,z,b,old[25],daihao[6],b1,b2,b3,b4,b5,b6;
init();
// while(1)
// {
// I2C_WriteData(1,a[1]);delay(5);
// I2C_WriteData(2,a[2]);delay(5);
// I2C_WriteData(3,a[3]);delay(5);
// I2C_WriteData(4,a[4]);delay(5);
// if(tr0_ok==1)
// {
// tr0_ok=0;
//
//
// ES=0;
// for(i=1;i<5;i++)
// {
// SBUF=I2C_ReadData(i);
// while(!TI);
// TI=0;
// }
// ES=1;
// }
// if(tr0_ok==1)
// { tr0_ok=0;
// for(i=1;i<5;i++)
// {
// I2C_WriteData(i,a[i]);delay(5);
// }
// }
// }
//}
// for(z=25;z<31;z++)
// {
// daihao[b]=I2C_ReadData(z); //25到31地址读取出的数一次存入代号0到5 ,如果解锁成功需要加一
// b++;
// if(b==6)
// b=0;
// }
while(1)
{
I2C_WriteData(1,0x30);delay(5);
I2C_WriteData(2,0x30);delay(5);//24c02的第110到115地址单元作为密码存储区
I2C_WriteData(3,0x30);delay(5); //必须放到while函数里
I2C_WriteData(4,0x31);delay(5);//一定要加延时,否则会接受不到
I2C_WriteData(5,0x30);delay(5);
I2C_WriteData(6,0x30);delay(5);//24c02的第110到115地址单元作为密码存储区
I2C_WriteData(7,0x30);delay(5); //必须放到while函数里
I2C_WriteData(8,0x32);delay(5);//一定要加延时,否则会接受不到
I2C_WriteData(9,0x30);delay(5);
I2C_WriteData(10,0x30);delay(5);//24c02的第110到115地址单元作为密码存储区
I2C_WriteData(11,0x30);delay(5); //必须放到while函数里
I2C_WriteData(12,0x33);delay(5);//一定要加延时,否则会接受不到
I2C_WriteData(13,0x30);delay(5);
I2C_WriteData(14,0x30);delay(5);//24c02的第110到115地址单元作为密码存储区
I2C_WriteData(15,0x30);delay(5); //必须放到while函数里
I2C_WriteData(16,0x34);delay(5);//一定要加延时,否则会接受不到
I2C_WriteData(17,0x30);delay(5);
I2C_WriteData(18,0x30);delay(5);//24c02的第110到115地址单元作为密码存储区
I2C_WriteData(19,0x30);delay(5); //必须放到while函数里
I2C_WriteData(20,0x35);delay(5);//一定要加延时,否则会接受不到
I2C_WriteData(21,0x30);delay(5);
I2C_WriteData(22,0x30);delay(5);//24c02的第110到115地址单元作为密码存储区
I2C_WriteData(23,0x30);delay(5); //必须放到while函数里
I2C_WriteData(24,0x36);delay(5);//一定要加延时,否则会接受不到
chuankou();
if(tr0_ok==1)
{
tr0_ok=0;
ES=0;
for(i=1;i<25;i++)
{
old[i]=I2C_ReadData(i); //将从地址1开始读取的数依次存入old
delay(5);
}
ES=1;
}
if(a[1]==old[1]&&a[2]==old[2]&&a[3]==old[3]&&a[4]==old[4])
{
P1=0xfe;
}
else
if(a[1]==old[5]&&a[6]==old[2]&&a[3]==old[7]&&a[4]==old[8])
{
P1=0xfc;
}
else
if(a[1]==old[9]&&a[2]==old[10]&&a[3]==old[11]&&a[4]==old[12])
{
P1=0xfb;
}
else
if(a[1]==old[13]&&a[2]==old[14]&&a[3]==old[15]&&a[4]==old[16])
{
P1=0xfa;
}
else
if(a[1]==old[17]&&a[2]==old[18]&&a[3]==old[19]&&a[4]==old[20])
{
P1=0xff;
}
else
if(a[1]==old[21]&&a[2]==old[22]&&a[3]==old[23]&&a[4]==old[24])
{
P1=0xfe;
}
else
P1=0xfd;
}
}