3-基于STM32单片机的密码锁
功能描述如下:
由STM32F103单片机最小系统+ 4*4矩阵键盘+LCD1602液晶显示+蜂鸣器+继电器模块;
1、采用STM32F103为主控芯片。
2、通过4*4矩阵键盘实现密码输入、功能键等排列如下
1 2 3 删除
4 5 6 修改密码
7 8 9 重新输入
返回 0 确认 紧急开锁键
3、每按下一次按键蜂鸣器会有‘滴’提示音。
4、按任意数字键键,进入密码输入界面 输入正确密码开锁,继电器打开,2秒都自动关锁;输入密码错误三次,系统锁死一分钟后才可再次尝试;
5、按“修改密码”键,进入密码修改界面,首先输入原始密码才可进行修改,输错三次同样锁死一分钟后才可再次修改密码。
6、按“删除”键可删除退格。
7、按“重新输入”键可重新输入。
8、按“紧急开锁”键可直接一键开锁并重置密码。
仿真效果主界面(附文件)
仿真效果输入密码界面:
仿真效果密码输入正确界面:
仿真效果密码输入错误界面:
仿真效果开锁界面:
程序(附文件)
文章来源:https://uudwc.com/A/nDz2
/************************************************************************
* 函数: void Password_Insert(void)
* 描述: 密码输入函数
* 参数: none.
* 返回: none.
************************************************************************/
void Password_Insert(void)
{
char temp,i=0,j=0;
Lcd1602_String(0,0," Input Password "); //刷新屏幕显示
Lcd1602_String(0,1," ");
while(1) //进入while死循环 进入之后如果没有退出 则程序只执行这个while里边的程序(中断函数除外)
{
delay_ms(10);
temp=KeyScan(); //获取键值
if(temp>='0'&& temp<='9') //如果按键按下的是数字0-9 说明是在输入数字
{
if(i<6) //如若输入小于6位数 则可以继续输入
{
Beep_Alram(40);
Password_Input[i]=temp-48; //把键值符号转换成ASCII对应的值
Disp_char(i,temp); //显示输入的数字
delay_ms(100); //延时一会儿
Disp_char(i,'*'); //显示/*/号 遮挡密码
i++;
}
else //输入满了 长响
{
Beep_Alram(300);
}
}
else if(temp=='A') //删除
{
Beep_Alram(40);
if(i>0) //判断O是否大于0 大于0 说明有输入
{
i--; //前面可以看到输入了一次后i被加一了 所以这里减一
Password_Input[i] = 0; //清除对应数组的信息
}
Disp_char(i,' '); //显示空白
}
else if(temp=='C') //重新输入
{
Beep_Alram(40);
if(i>0) //判断O是否大于0 大于0 说明有输入
{
for(;i>0;i--) //前面可以看到输入了一次后i被加一了 所以这里减一
{
Password_Input[i-1] = 0;//清除对应数组的信息
Disp_char(i-1,' '); //显示空白
}
}
}
else if(temp=='*') //*退出
{
Beep_Alram(40);
Lcd1602_Write_Com(0x01); //清屏
break; //退出循while循环 回到主界面
}
if(temp=='#'&&i>5) //按#确认
{
Beep_Alram(40);
if((Password_Input[0]==Password[0])&&(Password_Input[1]==Password[1]) //如果密码正确
&&(Password_Input[2]==Password[2])&&(Password_Input[3]==Password[3])
&&(Password_Input[4]==Password[4])&&(Password_Input[5]==Password[5]))
{
i = 0;
Password_Right = 1; //密码正确标志位
Lcd1602_String(0,0," Password Right "); //提示一下
Lcd1602_String(0,1," ");
delay_ms(200); //延时一会儿
Lcd1602_Write_Com(0x01); //清屏
break; //退出循while循环 回到主界面
}
else //如果密码输入错误
{
j++;
if(j>=3) //输入三次错误
{
j=0;
Password_Error3 = 1; //密码输错误3次标志位
Lcd1602_Write_Com(0x01);//清屏
break; //退出循while循环 回到主界面
}
i=0;
if(j==1)Lcd1602_String(0,1,"Password Error1!"); //显示提示密码输错一次
if(j==2)Lcd1602_String(0,1,"Password Error2!"); //显示提示密码输错二次
//这里可以加报警
Beep_Alram(300);delay_ms(100);
Beep_Alram(300);delay_ms(100);
Beep_Alram(300);delay_ms(100);
delay_ms(300);
Lcd1602_String(0,0," Input Password ");
Lcd1602_String(0,1," ");
}
}
}
}
视频演示:3、基于STM32单片机的密码锁_哔哩哔哩_bilibili
链接:https://pan.baidu.com/s/1v-56waF5QUdZzMMlBYDD6Q?pwd=ockn
提取码:ockn
文章来源地址https://uudwc.com/A/nDz2