按照老师的要求做了个51课设的密码锁,支持两个用户持有两套密码,且可以进行修改密码,修改密码需要先验证密码再给予修改权限,修改后的密码存入eeprom--24c02里面,相关内容提示用lcd1602屏幕进行显示。
主函数代码:
void main()
{
LCD_Init(); //初始化LCD
Timer0Init(); //初始化定时器0
LCD_ShowString(1,1,"Password:"); //显示请输入密码
for( test=3;test>=0;test--)
{
pass1_ee *= 10;
pass1_ee += at24c02_read_one_byte(test);
pass2_ee *= 10;
pass2_ee += at24c02_read_one_byte(test+4);
}
//LCD_ShowNum(2,1,pass1_ee,4);
LCD_ShowNum(2,1,at24c02_read_one_byte(0),1);
while(1)
{
/* if(Dao_Shu==60||flag==1)
{
LCD_ShowString(1,14,"ERR");
while(i--)
{
LCD_RW = !LCD_RW;
delay_1(100);
}
}
*/
KeyNum=MatrixKey(); //输入捕获
if(KeyNum)
{
if(KeyNum<=10) //每次输入一个一位十进制数字
{
if(Count<4)
{
Password*=10;
Password+=KeyNum%10; //数据存储
Count++;
}
LCD_ShowNum(2,1,Password,4);
}
if(KeyNum==11) //按下矩阵键盘的11按键 来确认输入
{
if((Password==pass1_ee)||(Password==pass2_ee))
{
Dao_Shu = 0;
LCD_ShowString(1,14,"OK ");
Password=0;
Count=0;
LCD_ShowNum(2,1,Password,4);
}
else
{
flag=1;
LCD_ShowString(1,14,"ERR");
Password=0;
Count=0;
LCD_ShowNum(2,1,Password,4);
}
}
if(KeyNum==12)
{
Dao_Shu=0;
Password=0;
Count=0;
LCD_ShowNum(2,1,Password,4);
//LCD_ShowNum(2,1,pass1_ee,4);
}
if(KeyNum==13) // ***********************修改密码*******************************
{
while(Gai_Flag)
{
KeyNum=MatrixKey(); //输入捕获
if(KeyNum)
{
if(Count_G<4)
{
pass_temp*=10;
pass_temp+=KeyNum%10; //数据存储
LCD_ShowNum(2,1,pass_temp,4);
Count_G++;
}
}
if(KeyNum==13)
{ // LCD_ShowNum(2,1,pass_temp,4);
// pass_temp=0;
if((pass_temp==pass1_ee)||(pass_temp==pass2_ee))
{
pass_temp=0;
LCD_ShowNum(2,1,pass_temp,4);
while(Gai_Flag1)
{
KeyNum_1=MatrixKey(); //输入捕获
if(KeyNum_1)
{
if(Count_G1<4)
{LCD_ShowString(1,14,"OK ");
pass_temp*=10;
pass_temp+=KeyNum_1%10; //数据存储
LCD_ShowNum(2,1,pass_temp,4);
Count_G1++;
}
}
if(KeyNum_1==13)
{
pass_temp2 = pass_temp;
pass_temp = 0;
LCD_ShowNum(2,1,pass_temp,4);
//
while(Gai_Flag2)
{
KeyNum_1=MatrixKey();
if(KeyNum_1)
{
if(Count_G2<4)
{
pass_temp*=10;
pass_temp+=KeyNum_1%10; //数据存储
LCD_ShowNum(2,1,pass_temp,4);
Count_G2++;
}
else
{
pass_temp3 = pass_temp;
Gai_Flag2=0;
}
}
}
//
}
if(KeyNum_1==14) //按下十四 一号密码
{
if(pass_temp3==pass_temp2)
{ Password_1 = pass_temp2;
Count_G = 0;
Gai_Flag1 = 0;
Gai_Flag = 0;
data1_1 = Password_1 %10;
data1_2 = (Password_1/10) %10;
data1_3 = (Password_1/100) %10;
data1_4 = (Password_1/1000) %10;
at24c02_write_one_byte(EEPROM_ADDRESS,data1_1);
at24c02_write_one_byte(EEPROM_ADDRESS+1,data1_2);
at24c02_write_one_byte(EEPROM_ADDRESS+2,data1_3);
at24c02_write_one_byte(EEPROM_ADDRESS+3,data1_4);
}
else
{
Count_G = 0;
Gai_Flag1 = 0;
Gai_Flag = 0;
LCD_ShowString(1,14,"ERR");
}
}
if(KeyNum_1==15) //按下十五 二号密码
{
if(pass_temp3==pass_temp2)
{
Password_2 = pass_temp;
Count_G = 0;
Gai_Flag1 = 0;
Gai_Flag = 0;
data1_1 = Password_2 %10;
data1_2 = (Password_2/10) %10;
data1_3 = (Password_2/100) %10;
data1_4 = (Password_2/1000) %10;
at24c02_write_one_byte(EEPROM_ADDRESS+4,data1_1);
at24c02_write_one_byte(EEPROM_ADDRESS+5,data1_2);
at24c02_write_one_byte(EEPROM_ADDRESS+6,data1_3);
at24c02_write_one_byte(EEPROM_ADDRESS+7,data1_4);
}
else
{
Count_G = 0;
Gai_Flag1 = 0;
Gai_Flag = 0;
LCD_ShowString(1,14,"ERR");
}
}
}
}//
}
}
} //*****************************************修改密码*****************************
}
}
}