基于STM32单片机的密码锁(Proteus仿真+程序+报告)

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、按“紧急开锁”键可直接一键开锁并重置密码。

仿真效果主界面(附文件)

基于STM32单片机的密码锁(Proteus仿真+程序+报告)_第1张图片

仿真效果输入密码界面:

基于STM32单片机的密码锁(Proteus仿真+程序+报告)_第2张图片

仿真效果密码输入正确界面:

基于STM32单片机的密码锁(Proteus仿真+程序+报告)_第3张图片

仿真效果密码输入错误界面:

基于STM32单片机的密码锁(Proteus仿真+程序+报告)_第4张图片

仿真效果开锁界面:

基于STM32单片机的密码锁(Proteus仿真+程序+报告)_第5张图片

程序(附文件)

/************************************************************************
* 函数: 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 
 

你可能感兴趣的:(项目合集,单片机,stm32,嵌入式硬件)