确认键-密码对了喵?
SUN的贴心提示
按下确认键之后,判断对错,走逻辑链,但是现在只写判断,不写修改密码
逻辑流程图
为啥这么想?
- 记得我们密码是分两块存的喵?
- 要定义俩变量接收密码吧
- 两块密码分开对比吧
- 确认键不止在开锁的时候用吧(修改密码还要用三次喵!)
- 密码对了之后要提示吧
- 没有舵机就先写个蜂鸣器和UI还有LED提示下吧
- 密码是对的要清除错误尝试次数吧
- 密码错了要减去尝试次数吧
- 没尝试次数就进锁定吧(改标志位喵!)
- 锁定之后尝试次数要重置吧
- 还能尝试就要显示还能试几次吧
开码!
SUN的贴心提示
接收用户输入的变量之前的章节定义过了
- 先来个模式判断给后续修改密码埋伏笔
if(KeyNum == 11) // 确认键
{
if(mode == 0) // 正常模式
{
}
}
- 先来个模式判断给后续修改密码埋伏笔
if(KeyNum == 11) // 确认键
{
if(mode == 0) // 正常模式
{
}
}
- 密码对了
if(Password1 == secret1 && Password2 == secret2)
{
clearPassword();
LCD_ShowString(1, 1, "Successfully ");
LCD_ShowString(2, 1, "Log in! "); // 更新
P2_1 = 0; // 绿灯亮
loginAttempts = 3; // 重置登录尝试次数
}
- 密码错了先减少登录次数
else
{
loginAttempts--; // 减少尝试次数
// 再去判断能否锁定
}
- 还能尝试吗
if(loginAttempts > 0)
{
LCD_ShowString(1, 1, "ERROR "); // 更新
LCD_ShowString(2, 1, " TryAgain"); // 更新
clearPassword();
P2_1 = 1; // 绿灯灭
P2_0 = 0; // 红灯亮
Delay(1000);
P2_0 = 1; // 红灯灭
Buzzer_Time(1000); // 蜂鸣器响
LCD_ShowNum(1, 14, loginAttempts, 1); // 显示剩余尝试次数
}
else
{
LCD_ShowString(1, 1, "ERROR"); // 更新
LCD_ShowString(2, 1, "Log in Disabled "); // 更新
LCD_ShowString(2, 1, " "); // 清空第二行显示
loginAttempts = 3; // 重置尝试次数
lockFlag = 1; // 锁定状态激活
Delay(1000); // 稍等一会再开始倒计时(不然看不见锁定提示)
}
组合逻辑
至此,嵌套逻辑
if(KeyNum == 11) // 确认键
{
if(mode == 0) // 正常模式
{
if(Password1 == secret1 && Password2 == secret2)
{
clearPassword();
LCD_ShowString(1, 1, "Successfully ");
LCD_ShowString(2, 1, "Log in! "); // 更新
P2_1 = 0; // 绿灯亮
loginAttempts = 3; // 重置登录尝试次数
}
else
{
loginAttempts--; // 减少尝试次数
if(loginAttempts > 0)
{
LCD_ShowString(1, 1, "ERROR "); // 更新
LCD_ShowString(2, 1, " TryAgain"); // 更新
clearPassword();
P2_1 = 1; // 绿灯灭
P2_0 = 0; // 红灯亮
Delay(1000);
P2_0 = 1; // 红灯灭
Buzzer_Time(1000); // 蜂鸣器响
LCD_ShowNum(1, 14, loginAttempts, 1); // 显示剩余尝试次数
}
else
{
LCD_ShowString(1, 1, "ERROR"); // 更新
LCD_ShowString(2, 1, "Log in Disabled "); // 更新
LCD_ShowString(2, 1, " "); // 清空第二行显示
loginAttempts = 3; // 重置尝试次数
lockFlag = 1; // 锁定状态激活
Delay(1000); // 稍等一会再开始倒计时
}
}
}
}