基于STM32F103C8T6单片机设计的蓝牙密码锁

很感谢你们能点击进来看我写的博客

第一次写博客,也是第一次写这种程序,如果这些可以帮到你们那样最好,如果有错误或者我写的很菜也请各位大神大佬不要太过于打击我。谢谢

        1.1目的

        这是我在学习了STM32以后第一次自己设计应用型程序,这套密码锁是为了给学校一个社团实验室用的,目的是为了解决只有一把钥匙的问题。

        1.2系统组成

       本设计使用的单片机型号为STM32F103C8T6(网上买的小型开发板),蜂汇蓝牙4.0模块(选它是因为它可以在微信上用小程序直接连接),12V直流电机,限位开关

        1.3系统分析

     系统工作原理:系统在正常工作时,当有手机连接到密码锁的蓝牙以后,蓝牙模块的连接指示引脚(PB6)会由高电平变为低电平,该引脚连接在开发板上的PA0引脚,当有电平变化时,会产生一个外部中断判断是连接还是断开,如果是连接,则初始化验证变量,并向手机发送提示信息,然后进入学号验证阶段。

      该系统使用数组存储了50位学生的学号、密码信息,学号为10位数字,密码格式不限。当学号信息从手机发送至密码锁后,首先判断学号长度是否符合,若不符合,则提示学号格式不符,并退出系统,若格式符合,则进行学号验证。学号验证成功后,进入密码验证阶段,密码为事先设定好的,不可修改(时间仓促,没有写修改密码的相关程序),同学号验证一样,首先进行长度比对,若通过,再进行密码验证,并且密码是一个学号对应一个密码,密码验证成功,执行开锁程序;若密码验证失败(共有三次机会),进入下次验证或者系统进入安全模式。进入安全模式后,系统被锁定,只能重新连接蓝牙才能恢复(其实这里可以加更多功能)

            1.4部分代码分析

                        1.4.1串口接收中断
        当一包数据接收完成后,ReceiveState标志位置1,用于跳出等待输入循环
                           1.4.2蓝牙连接中断

当PA0引脚电平变化上升下降沿都会产生中断,进入中断后判断引脚电平状态,若是低电平,说明手机已连接蓝牙,初始化所有有关标志位,并发送提示信息,等待学号输入

                            1.4.3等待信息输入程序
当一帧数据接收完成后,数据帧标志位置1,在这个函数中判断这个标志位,如果被置1就将其清0并跳出循环,进入数据验证阶段

                              1.4.4数据验证程序
while(1)
		{
			RxCounter = RxCounter_last;
			t=0;
			if(RxCounter != 12)//如果输入的数据长度不匹配
			{
				delay_ms(50);
				printf("student number format err\r\n");//学号格式错误
				delay_ms(50);
				printf("Please enter again\r\n");//请再次输入
				RxCounter = 0;
				break;//跳出循环
			}
			printf("RxC_C:%d\r\n",RxCounter);
			while(RxCounter--)//学号验证程序
			{
			    if(USART_RX_BUF[t] != xuehao1[member][t])
				i++;
			    t++;
			}
			if(i!=0)//如果学号验证未通过
			{
				i=0;
				member+=1;//成员标志位加1,准备验证下一成员
				delay_ms(50);
				if(member>50)//最大成员数限定
				{
					dengji = 0;
					delay_ms(50);
					printf("Without this member\r\n");//没有改成员
					delay_ms(50);
					printf("The system will exit\r\n");//系统即将退出
					member = 0;//成员标志位清0
					j = 1;开锁失败
					break;
				}
			}
			else
			{
				printf("Please enter passWord\r\n");
				dengji=1;//进入密码验证
				i = 0;
				RxCounter=0;
				break;
			}
		}

通过蓝牙传输过来的数据将经过该函数验证,通过后才能执行下一步操作,密码验证与此类似,不再描述
                             1.4.5模式标志位相关程序

由于本人水平有限,最近也挺忙,所以只写了这么多,待机模式还不会,只能找一只狗狗看着它,然后等着它罢工吧

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

创客小白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值