#include "config.h"
uchar smg_i;
uchar password[7]= {6,5,4,3,2,1}; // 密码保存
uchar password_bj[7]= {1,2,3,4,5,6}; // 密码比较
uchar code password_init[6] = {3,2,1,3,2,1}; // 初始密码
uchar code password_admin[6] = {5,2,0,0,2,5}; // 管理员密码
// 修改密码部分变量
bit flag_modify = RESET;
uchar password_xg[6]; // 要修改得密码存放处
uchar flag_input = FALSE; // 输入是否正确标志
uchar input_pos = 0; // 输入得位置
uchar input_erro_num = 0; // 输入错误次数
bit flag_manual_lock = SET; // 手动锁定标志
bit flag_password_init = RESET; // 复位按键按下标志
uchar key_init_last = 0; // 复位按键按下持续时长
/**-----------------------------------------------------------------------------
* @name: key_with
* @brief: 处理按键
* @param: None
* @retval: None
* -----------------------------------------------------------------------------
*/
void key_with(void)
{
static uchar value;
uchar i;
if(key_value == KEY_VALUE_LOCK) // 手动关闭密码锁
{
flag_manual_lock = !flag_manual_lock;
}
if(key_value == KEY_VALUE_INIT) // 密码初始化
{
flag_password_init = SET; // 复位标志置位
key_init_last = 0; // 计数清零开始计数
}
if(menu == MENU_INPUT)
{
if(key_value <= KEY_VALUE_9)
{
if(input_pos < 6) // 密码未输入完成
input_pos ++;
if(input_pos > 6)
input_pos = 6;
smg_i = input_pos;
for(i=6; i>0; i--)
{
password_bj[i] = password_bj[i-1];
}
password_bj[0] = key_value;
for(i=0; i<smg_i; i++)
{
// 显示 "*" 还是 数字
dis_smg[i] = '*';
//dis_smg[i] = 0x30 + password_bj[i];
}
write_string(2,7,dis_smg);
//lcd1602_guanbiao(1,7 + input_pos + 0x40); //开光标
}
if(key_value == KEY_VALUE_DEL) // 密码删除
{
if(input_pos != 0)
{
for(i=0; i<input_pos; i++)
password_bj[i] = password_bj[i+1];
input_pos --;
password_bj[input_pos] = ' '; // 将密码数组最后一个字符更改为 ' '
dis_smg[input_pos] = ' '; // 将显示密码数组最后一个字符更改为 ' '
write_string(2,7,dis_smg);
//lcd1602_guanbiao(1,7 + input_pos + 0x40); //开光标
}
}
if(key_value == KEY_VALUE_OK) //确认键
{
value = 0;
// 判断管理员密码
for(i=0; i<6; i++)
{
if(password_bj[i] == password_admin[i])
{
value ++;
if(value >= 6) //密码正确
{
write_string(2,0," return ");
beep_on();
delay_1ms(400);
beep_off();
delay_1ms(2000);
break;
}
}
}
// 非管理员密码
if(value < 6)
{
for(i=0; i<6; i++)
{
if(password_bj[i] == password[i]) // 对应位置得字符想同
{
flag_input = TRUE;
}
else // 字符不匹配,密码不正确
{
flag_input = FALSE;
input_erro_num ++; // 错误次数加一
write_string(1,0," Password error ");
write_string(2,0," number ");
write_sfm2(2,9,input_erro_num);
delay_1ms(280);
for(i=0; i<6; i++)
{
beep = ~beep;
delay_1ms(200);
}
delay_1ms(800);
beep_off();
break; // 跳出查询
}
}
for(i=0; i<6; i++)
{
dis_smg[i] = 0xbf;
}
if(flag_input == TRUE) //密码正确
{
input_erro_num = 0;
write_string(2,0," Input: Open ");
delay_1ms(1500);
}
}
clear_buff(password_bj); //数据清空
clear_buff(dis_smg);
write_string(1,0,"code Lock ");
write_string(2,0," Input: ");
lcd1602_guanbiao(1,7+0x40); //开光标
input_pos = 0;
}
}
}
/**-----------------------------------------------------------------------------
* @name: password_modify
* @brief: 修改密码
* @param: None
* @retval: None
* -----------------------------------------------------------------------------
*/
void password_modify(void)
{
uchar i;
if(key_value == KEY_VALUE_MODIFY) //修改密码
{
if(menu == MENU_INPUT)
{
menu = MENU_MODIFY_FIRST;
input_pos = 0;
clear_buff(password_bj); // 数据清空
clear_buff(dis_smg); // 清空数组
write_string(1,0,"Input1: ");
write_string(2,0,"Input2: ");
lcd1602_guanbiao(1,7); // 开光标
flag_modify = 1; // 进入修改状态
}
}
// 第一次输入修改的密码
if(menu == MENU_MODIFY_FIRST)
{
if(key_value <= KEY_VALUE_9) // 按下按键为数字键
{
if(input_pos < 6) // 密码未输入完成
{
input_pos ++;
if(input_pos > 6)
input_pos = 6;
for(i=5; i>0; i--)
{
password_bj[i] = password_bj[i-1];
}
password_bj[0] = key_value;
for(i=0; i<input_pos; i++)
{
dis_smg[i] =0x30 + password_bj[i];
//dis_smg[i] ='*';
}
write_string(1,7,dis_smg);
lcd1602_guanbiao(1,7 + input_pos); //开光标
}
}
if(key_value == KEY_VALUE_DEL) //删除键
{
if(input_pos != 0)
{
for(i=0; i<input_pos; i++)
password_bj[i] = password_bj[i+1];
input_pos --;
password_bj[input_pos] = ' ';
dis_smg[input_pos] = ' ';
write_string(1,7,dis_smg);
lcd1602_guanbiao(1,7 + input_pos); //开光标
}
}
if(key_value == KEY_VALUE_OK) //确定键
{
clear_buff(password_xg);
clear_buff(dis_smg);
lcd1602_guanbiao(1,7 + 0x40); //开光标
menu = MENU_MODIFY_SECOND; // 进入第二次输入密码界面
input_pos = 0; // 输入光标位置归0
key_value = KEY_VALUE_MAX; // 将按键变更为无效键值
}
}
if(menu == MENU_MODIFY_SECOND) // 第二次输入修改的密码
{
if(key_value <= KEY_VALUE_9) // 按键为数字
{
if(input_pos < 6)
{
input_pos ++;
if(input_pos > 6)
input_pos = 6;
for(i=5; i>0; i--)
{
password_xg[i] = password_xg[i-1];
}
xyj383
- 粉丝: 0
- 资源: 1
最新资源
- 储能变流器PQ并网和VF离网 含学习资料 一、图1、图2、图3为储能变流器PQ控制能量可实现能量双向流动 1储能电压外环,电流内环 2逆变器采用PQ控制,可实现能量双向流动 3仿真实现的内
- 机械设计双工位PCM焊接机sw18非常好的设计图纸100%好用.zip
- 基于java+springboot+vue+mysql的仓库管理系统 源码+数据库+论文(高分毕业设计)
- 最新版Unity Racing Game Starter Kit2
- Comsol仿真-相场法多晶铁电体介电击穿模拟 复现参考文献:Revisiting the Dielectric Breakdown in a Polycrystalline Ferroelectr
- 基于国内某高校校园一卡通系统一个月的运行数据,使用数据分析和建模的方法,挖掘数据中所蕴含的信息,分析学生在校园内的学习生活行为+python项目源码+文档说明
- Comsol仿真-相场法多晶铁电体介电击穿模拟 复现参考文献:Revisiting the Dielectric Breakdown in a Polycrystalline Ferroelectr
- 基于永磁同步电机旋转高频信号注入法零低速无位置控制仿真 1相比高频方波信号注入法,旋转高频信号注入法噪声更小损耗更低 2该模型注入1000Hz旋转高频电压信号到电机中用于产生激励电流,在低速1
- 基于永磁同步电机旋转高频信号注入法零低速无位置控制仿真 1相比高频方波信号注入法,旋转高频信号注入法噪声更小损耗更低 2该模型注入1000Hz旋转高频电压信号到电机中用于产生激励电流,在低速1
- 基于java+springboot+vue+mysql的校园二手物品交易平台 源码+数据库+论文(高分毕业设计)
- 中国生态功能保护区shp数据
- html+css+js网页设计 美食 好厨艺西餐美食企业网站模板6个页面
- STM32F407单片机上使用HAL库实现can总线的接收和发送
- STM32F767 UCOS开发手册-V1.0.zip
- 光伏蓄电池单相并网模型 带参考文件,模型说明文件 模型内容: 1.光伏+MPPT+boost升压电路+桥式逆变 2.电池模型+电池控制器+直流母线控制 3.稳定交流负载+功率控制器+pwm调制 仿真
- 一个加载UCOSII嵌入式操作系统的STM32项目模板.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈