#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include "lcd.h"
#include "key.h"
#include "i2c.h"
#define u16 unsigned int //对数据类型进行声明定义
#define u8 unsigned char
sbit AS=P2^2; //继电器
u8 pw_num=0,Error_Num,PassWord_Length=6; //Error_Num错误次数?PassWord_Length规定密码长度 pw_num实际输入密码长度
u8 PASSWORD[]={1,1,1,1,1,1,0,0,0,0};
u8 INPUT_PW_Tab[10];
u8 key_num,Step,Step5,Load_first_flag=0;
bit result_flag,Input_suc_flag; //Input_suc_flag密码输入完成标志 result_flag密码比对标志
bit List1=0;
void Step_0(); //6种不同功能函数
void Step_1();
void Step_2();
void Step_3();
void Step_4();
void Step_5();
void Step5_0();
void Step5_1();
void Step5_2();
void Step5_3();
void Step5_4();
void Step5_5();
void Step_6();
void CipherComparison(); //密码比对函数
void input_password(bit m); //密码输入函数
void Read_Password(); //密码读取函数?
/*******************************************************************************/
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
// u8 data1,a;
LcdWriteCom(0x01); //清屏
for(data1=0;data1
a=At24c02Read(data1)+0x30; //存储软件读AT24c02的一个地址的一个数据,LCD简介最后字符代码与字符图形对应关系中,高位为0011那一列显示的是0~9数字
LcdWriteData(a); //向LCD写入一个字节数据
delay(1000);
}
delay(1000);
LcdInit(); //初始化LCD屏
delay(1000);
Step=0; //初值
Step5=0;
Error_Num=0x00; //错误次数初值为0
Read_Password();
while(1)
{
key_num=KeyDown(); //读取输入值
switch(Step)
{
case 0:
{Step_0();break;}
case 1:
{Step_1();break;}
case 2:
{Step_2();break;}
case 3:
{Step_3();break;}
case 4:
{Step_4();break;}
case 5:
{Step_5();break;}
case 6:
{Step_6();break;}
}
}
}
void Read_Password()
{
unsigned char j;
Load_first_flag=At24c02Read(0x00); //读取0x00地址的数据
if(Load_first_flag==0) //初次运行(存储数据是从0地址开始按顺序存的)
{
Load_first_flag=1;
At24c02Write(0,0x01); //先地址后数据,在最开始地址处写上1,
delay(100);
At24c02Write(1,0x06); //写默认密码长度6至EEPROM
delay(100);
for(j=0;j
At24c02Write(j+2,1); //写默认密码111111至EEPROM +2是因为第一位写上了第几次运行第二位写上了密码长度
PASSWORD[j]=INPUT_PW_Tab[j]; //读密码 INPUT_PW_Tab[j]
delay(100);
}
}
Load_first_flag=At24c02Read(0x00);
PassWord_Length=At24c02Read(0x01); //读取密码长度
for(j=0;j
PASSWORD[j]=At24c02Read(j+2); //加2同上述写默认密码一样,将实际输入的密码存入24c02内
}
}