【单片机毕业设计】【mcuclub-dz-054】基于单片机的多功能密码锁控制系统设计

  最近设计了一个项目基于单片机的多功能密码锁控制系统设计,与大家分享一下:

一、基本介绍

项目名:基于单片机的多功能密码锁的设计
单片机:STM32F103C8T6
功能简介:
1、通过4*4的矩阵键盘中的0-9为数字键,*为删除键,#为确定键,A为重置密码键,B为一键还原密码键,C为添加指纹,D为删除指纹
2、重置密码过程:管理员密码-->旧密码-->新密码-->再次新密码
3、一键还原:输入管理员密码,直接还原密码123456
4、添加指纹:输入管理员密码,再添加指纹
5、删除指纹:输入管理员密码,再删除指纹
6、通过AT24C02存储密码,实现掉电保存密码
7、当密码输入错误时,语音播报“密码不正确”,当指纹不匹配时,语音播报“指纹不匹配”,当输入密码或指纹总错误次数大于等于3次,进行锁定键盘及指纹模块3分钟,在此期间,每按一次按键都会蜂鸣器报警
8、通过继电器控制门磁锁,模拟开门和关门,当正确解锁时,语音播报“欢迎回家”
9、通过显示屏显示输入的密码(*号表示,防止被偷看),另外,输入密码可以前后加入扰乱码,只要包含正确密码即可
10、通过蓝牙模块可远程手机端进行开锁

二、32实物图

单片机型号:STM32F103C8T6

板子为绿色PCB板,两层板,厚度1.2,上下覆铜接地。元器件基本上为插针式,个别降压芯片会使用贴片式。

供电接口:TYPE-C

三、原理图

软件版本:AD2013

电路连线方式:网络标号连线方式

注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构原理图

 四、PCB图

由原理图导出,封装很大一部分都是作者自己绘制,不提供封装库,只提供连接好的源文件。中间有一个项目编号,隐藏在单片机底座下,插入单片机后不会看到。

两层板,上下覆铜接地。

 五、系统框图

本设计以单片机为核心控制器,加上其他模块一起组成此次设计的整个系统,其中包括中控部分、输入部分和输出部分。中控部分采用了单片机控制器,其主要作用是获取输入部分的数据,经过内部处理,逻辑判断,最终控制输出部分。输入由三部分组成,第一部分是矩阵键盘模块,通过该模块可以输入密码、修改密码和指纹等;第二部分是指纹模块,用户可以通过该模块进行开锁;第三部分是供电模块,通过该模块可给整个系统进行供电。输出由五部分组成,第一部分是显示模块,通过该模块可以显示监测密码锁锁的开关及其修改密码等信息;第二部分是继电器模块,通过该模块看者门磁锁的开关;第三部分是声光报警模块,当错误次数大于3次,进行开锁时,进行蜂鸣器提醒;第四部分是语音输出模块,通过该模块播报开锁的情况;第五部分是存储模块,将修改的密码和指纹信息存储到该模块之中。除此之外还有蓝牙连接手机端,用户可以通过手机连接蓝牙看者门锁的开关,具体系统框图如图3.1所示。

六、软件设计流程

系统的主流程图如图4-2所示。在主程序中:首先对各个模块进行初始化,随后进入while主循环,在主循环中,首先进入第一个函数按键函数,该函数主要分为两部分,第一部分为调用按键扫描函数获取按键键值,第二部分通过键值进行相应的处理操作,包括搜索指纹、添加指纹、输入密码等;紧接着进入第二个函数确认函数,输入密码对比正确,进入下一步,输入密码和用户密码不同,错误次数+1然后进入锁定键盘函数,三次输入密码错误,锁定键盘3分钟,三分钟内检测到按键按下,声光报警10s;然后进入搜索指纹函数,指纹对比成功,进入下一步,指纹对比失败,错误次数+1;然后进入蓝牙操作函数,密码模数,直接看者门锁打开,在指纹加密码模数,先按指纹,然后输入密码进行开锁

 

 七、部分程序展示

软件版本:keil5

逻辑程序和驱动程序分开,分布于main.c和其他.c文件

*******蓝牙操作函数
*****/
void Bluetooth_function(void)
{
	u16 data_len = 0, i = 0;
  
  char data_temp[8] = {0};
	if(USART1_WaitRecive() == 0)														//如果接收到蓝牙数据
	{
		data_len = (u16)strlen((char*)usart1_buf);
		if(flag_reset_password == 0 && flag_fop == 0 &&  data_len <= 12)	//在开门界面
		{
			if(flag_mode == 1 || (flag_mode == 2 && flag_password == 0))
			{
				for(i = 0; i < 6; i++)
				{
					data_temp[i] = password[i]+'0';
				}
				
				if(strstr((char*)usart1_buf,data_temp) != NULL)
				{
					if(flag_mode == 1)														//密码模式,开门
					{
						UsartPrintf(USART3,"欢迎回家");
						Oled_Clear_All();
						Oled_ShowCHinese(1,1,"指纹密码锁");
						Oled_ShowCHinese(2,0,"门已打开");
						DOOR = 1;
						delay_ms(1500);
						delay_ms(1500);
						DOOR = 0;
						Oled_ShowString(2,0,"        ");
						Oled_ShowCHinese(2,0,"密码:");
						if(flag_mode == 1)
						{
							Oled_ShowCHinese(4,0,"模式:密码");
						}
						else if(flag_mode == 2)
						{
							Oled_ShowCHinese(4,0,"模式:密码加指纹");
						}
					}
					else if(flag_mode == 2)												//指纹加密码模式,按手指
					{
						Oled_ShowCHinese(1,1,"指纹密码锁");
						Oled_ShowCHinese(2,0,"请按手指");
						Oled_ShowCHinese(4,0,"模式:密码加指纹");
						flag_password = 1;
					}
					flag_error_num = 0;
					password_num = 0;
					memset(password_input,'\r',12);
				}
				else																						//用户密码与输入密码不相同,错误次数+1
				{
					flag_password = 0;
					UsartPrintf(USART3,"密码错误");
					Oled_Clear_All();
					Oled_ShowCHinese(1,1,"指纹密码锁");
					Oled_ShowCHinese(2,0,"密码错误");
					delay_ms(1000);
					Oled_ShowString(2,0,"        ");
					Oled_ShowCHinese(2,0,"密码:");
					if(flag_mode == 1)
					{
						Oled_ShowCHinese(4,0,"模式:密码");
					}
					else if(flag_mode == 2)
					{
						Oled_ShowCHinese(4,0,"模式:密码加指纹");
					}
					flag_error_num++;
					password_num = 0;
					memset(password_input,'\r',12);
				}
			}
		}

		USART1_Clear();
	}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单片机俱乐部--官方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值