文章目录
一、功能简介二、软件设计三、实验现象联系作者
一、功能简介
本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602液晶、矩阵按键、蜂鸣器、EEPROM模块、继电器模块等。
系统运行后,LCD1602显示密码输入提示界面,系统存储在EEPROM的初始密码为123456, 用户可通过矩阵按键S1-S10输入数值0-9,当在密码输入过程中有误,可按S11键回删并重新输入。当密码输入完成后,可按S12键确认,校验密码是否正确,如密码输入正确,电磁阀工作开门,对应D3指示灯点亮;如密码输入错误,LCD显示错误信息,可重新输入密码,最多可输入3次,如还输入错误,系统锁死,需等待10S钟解锁系统方可再次输入。当管理员需要更换密码时,可按下S13键,LCD显示更换密码界面,此时可通过S1-S10输入修改密码,修改过程中如需更改可按S11键回删并重新输入。修改密码完成后可按下S12键保存新密码至EEPROM中,更新的密码可断电不丢失。
二、软件设计
/*
作者:嗨小易(QQ:3443792007)
*/
/*******************************************************************************
* 函 数 名 : TIM2_IRQHandler
* 函数功能 : TIM2中断函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void TIM2_IRQHandler(void)
{
static u32 i=0;
if(TIM_GetITStatus(TIM2,TIM_IT_Update))
{
i++;
if(i>=(100*AFRESH_TIME))//时间到
{
i=0;
TIM_Cmd(TIM2,DISABLE);//关闭定时器
sys_ctrl.time_flag=1;
}
}
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}
//主界面,输入密码提示
void main_display(void)
{
memset(sys_ctrl.password,0,6);//密码数据清零
sys_ctrl.time_flag=0;
sys_ctrl.resive_flag=0;
delay_ms(500);
lcd1602_clear();
lcd1602_show_string(0,0,"Password Input:");
}
//密码输入错误次数超过规定值,等待指定时间后可重新输入
void password_error_wait_afreah_input(void)
{
TIM_Cmd(TIM2,ENABLE);//开启定时器
lcd1602_clear();
lcd1602_show_string(0,0,"Error Too much!");
lcd1602_show_string(0,1,"Please Wait...");
while(1)
{
if(sys_ctrl.time_flag)//时间到
{
RELAY=1;
sys_ctrl.error_cnt=0;
break;
}
}
}
//密码输入、修改
void password_input(void)
{
u8 key=0;
u8 cnt=0;
while(1)
{
key=key_matrix_flip_scan();
//密码输入
if(key>0&&key |