基于STM32的蓝牙密码锁
目录
一、项目功能概述
二、原理图
三、实物图
四、代码
五、资料清单
资料下载地址:基于STM32蓝牙密码锁
一、项目功能概述
主控用的STM32F407ZET6,通过蓝牙模块HC05使手机与STM32单片机进行蓝牙通信,通过手机输入密码控制密码锁开关。也可通过矩阵按键输入密码,当密码输入错误5次后,蜂鸣器报警,并且通过按键修改输入密码。
二、原理图
三、实物图
上电显示如下图
按任意按键进入主界面
手机app解锁界面
四、代码
主程序
int main(void)
{u16 set=0;int key_num; int time1;int a=0,b=0;int time2; //锁屏时间char arrow=0; //箭头位子NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2uart_init(115200);delay_init(84);LED_Init();uart3_init(9600);// 蓝牙初始化Button4_4_Init();//矩阵按键初始化OLED_Init(); //oled初始化W25QXX_Init(); //初始化W25Q128exfuns_init(); //为fatfs相关变量申请内存 f_mount(fs[0],"0:",1); //挂载SD卡 f_mount(fs[1],"1:",1); //挂载FLASH.delay_ms(3000);OLED_Clear();FENG=0;STMFLASH_Read(0X08020004,(u32*)Pwd,2); //读取密码1STMFLASH_Read(0X08090004,(u32*)Pwd2,2); //读取密码2STMFLASH_Read(0X080f0004,(u32*)cardid,1); //读取卡号1strcpy(Pwd,"123456");while(1){MAIN:OLED_Show_Font(56,48,0);//显示锁图标while(1){time1++;if((time1%5000)==0)//每200ms检测一次卡片,蓝牙数据{time1=0;//手机蓝牙解锁密码1Error=usart3_cherk((char*)Pwd); if(Error==0){OLED_Clear();Show_Str(20,10,128,24,"ok!",24,0);delay_ms(1000);goto MENU; }else OLED_Show_Font(56,48,0);//锁//手机蓝牙解锁密码2Error=usart3_cherk((char*)Pwd2);if(Error==0){OLED_Clear();Show_Str(20,10,128,24,"ok!",24,0);delay_ms(1000);goto MENU; }else OLED_Show_Font(56,48,0);//锁 }//密码锁key_num=Button4_4_Scan(); //按键扫描if(key_num!=-1){Error=password();if(Error==0)goto MENU; else OLED_Show_Font(56,48,0);//锁}}
//主界面
MENU://主页菜单显示FENG=0;OLED_Clear();if(arrow<3){Show_Str(5,arrow*16,128,16,"->",16,0);set=0;}else {Show_Str(5,(arrow-3)*16,128,16,"->",16,0);set=3;}Show_Str(25,0,128,16,setup[set],16,0);Show_Str(25,16,128,16,setup[set+1],16,0);Show_Str(25,32,128,16,setup[set+2],16,0);Show_Str(0,52,128,12,"down up NO sure",12,0);time2=0;while(1){//超时锁屏time2++;if(time2>50000 | key_num==15){ time2 =0; OLED_Clear();Show_Str(30,20,128,16,"Timeout lock screen",16,0);delay_ms(500);OLED_Show_Font(56,48,0);//锁delay_ms(1000);OLED_Clear();goto MAIN;}//功能选项选择key_num=Button4_4_Scan(); if(key_num){if(key_num==13){if(arrow>0)arrow--;goto MENU;}if(key_num==14){if(arrow<5)arrow++;goto MENU;}if(key_num==16){switch(arrow){case 2:SetPassworld();break;//修改密码}goto MENU;} }delay_ms(1);} }
}
密码检测
int password(void)
{int key_num=0,i=0,satus=0;u16 num=0,num2=0,time3=0;u8 pwd[11]=" ";u8 hidepwd[11]=" ";OLED_Clear();//清屏Show_Str(5,0,128,16,"MIMA: ",16,0);Show_Str(10,16,128,12," 1 2 3 4 ",12,0);Show_Str(10,28,128,12," 5 6 7 8 ",12,0);Show_Str(10,40,128,12," 9 0 Dis ",12,0);Show_Str(10,52,128,12,"Del Clr Bck Ok ",12,0);while(1){key_num=Button4_4_Scan(); if(key_num){ time3=0;if(key_num>=1 && key_num<10 && i>=0 && i<10){ //‘1-9’键pwd[i]=key_num+0x30;hidepwd[i]='*';i++;} if(key_num==10 && i>=0 && i<10){ //‘0’键pwd[i]=0x30;hidepwd[i]='*';i++;}if(key_num==12){//显示 satus=!satus;}if(key_num==13 && i>0){pwd[--i]=' '; //‘del’键hidepwd[i]=' '; }if(key_num==14){while(i--){pwd[i]=' '; //‘清空’键hidepwd[i]=' '; //‘清空’键}i=0;}if(key_num==15){//返回OLED_Clear();//清屏delay_ms(500);return -1;}if(key_num==16)break; //‘Enter’键}if(satus==0)OLED_ShowString(53,0,hidepwd,12);else OLED_ShowString(53,0,pwd,12);time3++;if(time3%1000==0){OLED_Clear();//清屏return -1;}} for(i=0; i<10; i++){ //验证虚伪密码if(pwd[i]==Pwd[num])num++;else num=0;if(num==6)break;}for(i=0; i<10; i++){ //验证密码if(pwd[i]==Pwd2[num2])num2++;else num2=0;if(num2==6)break;}if(num==6 | num2==6){OLED_Clear();//清屏Show_Str(20,10,128,24,"OK!",24,0);delay_ms(1000);OLED_Show_Font(56,48,1);//开锁 delay_ms(1500);OLED_Clear();//清屏return 0;}else{a++;if(a==6){FENG=1;}OLED_Clear();//清屏Show_Str(20,20,128,16,"Error",16,0);delay_ms(1500);OLED_Clear();//清屏return -1;}
}
五、资料清单
基于STM32的蓝牙密码锁相关推荐
- 基于STM32单片机的密码锁(Proteus仿真+程序+报告)
3-基于STM32单片机的密码锁 功能描述如下: 由STM32F103单片机最小系统+ 4*4矩阵键盘+LCD1602液晶显示+蜂鸣器+继电器模块: 1.采用STM32F103为主控芯片. 2.通过4 ...
- 基于51单片机蓝牙密码锁
目录 一.项目需求 二.原理图 三.设计思路 四.实物 五.代码 资料下载地址:基于51单片机蓝牙密码锁-单片机文档类资源-CSDN下载 一.项目需求 1.采用DS1302时钟模块,通过该模块可检测当 ...
- 基于STM32的蓝牙小车(来自LLC团队)
基于STM32的蓝牙小车(来自LLC团队) 引言 1.系统概述 1.1.设计任务 2 .方案设计与论证 2.1.芯片选择方案 2.2.系统概述: 2.3设计要求: 2.4系统总体设计思路 2.5.各功 ...
- 毕业设计 基于Stm32的蓝牙便携手环 - 物联网 单片机
基于STM32的蓝牙手环 本次时基于STM32单片机的简易蓝牙手环 手指放在心率检测处,心率传感器就能实时的检测使用者的心率的变化,并在显示屏上进行显示: 通过DS18B20检测体温,体温数值也会在显 ...
- 基于STM32单片机的密码锁(Proteus仿真、程序)
基于STM32单片机的密码锁 功能描述: 由STM32F103单片机最小系统+ 4*4矩阵键盘+LCD1602液晶显示+蜂鸣器+继电器模块 1.采用STM32F103为主控芯片 2.通过4*4矩阵键盘 ...
- 物联网毕设(基于STM32的蓝牙检测心率+步数+手机APP)
目录 流程图 开发所需平台 keil5+Android studio 需要的元器件 线路连接图 stm32F103C8T6 蓝牙模块 心率模块(MAX30102) 震动开关(SW-18015P) 手机 ...
- 基于stm32的c语言程序设计,基于stm32的电子密码锁设计 main.c 代码奉上,做课设的直接用...
电子密码锁设计 **功能:支持3~20位的密码设置,初始密码为123456:若要重设密码,需先输入正确密码开锁. ** 正常显示情况下,按下确认键上锁:按下密码键,开始输入密码. **接线:PE[0. ...
- 基于STM32的简易密码锁
前言: 朋友做毕设需要用到密码锁这个功能,帮忙设计了一个简单的.因为自己也忙于毕设,所以很多功能也没有完善. 有兴趣的朋友可以看下这个,也能实现扫码开锁功能 扫码点灯 实现功能: 1.密码保存到STM ...
- 基于stm32的蓝牙遥控智能小车_基于51用蓝牙控制小车(提高篇)
一,焊接51最小系统 一辆小车的基本功能就是让它能动起来,能通过手机蓝牙进行遥控,所以就需要用到L298N电机驱动模块,和HC-06蓝牙模块.下面就简单介绍一下这两个模块. 三,制作电机驱动模块 电机 ...
最新文章
- 编辑模式下,控制对象移动
- Spring Boot 集成 JUnit5,更优雅单元测试!
- saspython知乎_评分模型效用度量指标如何解析?(含Python、R、SAS代码)
- spark在服务器运行示例_创建示例HTTPS服务器以获取乐趣和收益
- mybatis枚举自动转换(通用转换处理器实现)
- sql中in和exist语句的区别?
- syslog-ng按源ip保存记录
- H264参数SPS(序列参数集)和PPS(图像参数集)说明
- WinForm 下实现一个自动关闭的MessageBox
- windows核心编程第二章阅读
- 数据库系统的三级模式结构
- 基于Android的个人时间管理设计与开发
- 安卓4.0后新控件TextureView解决SurfaceView在修改默认屏幕方向后(硬件导致)视频方向无法翻转的问题
- steam linux 安装目录,「Linux」- 安装 Steam 客户端 @20210219
- 【NBA之路】启蒙—to—詹皇—to—保罗乔治
- 【编译原理】第8讲 语法制导翻译(习题答案)——MOOC哈尔滨工业大学陈鄞
- PHP开发环境的搭建
- 国外LEAD联盟赚钱,日付款联盟推荐
- PPT怎么插入图案填充效果
- 你会给父母买保险吗?
热门文章
- 2022-2028全球与中国纠正与预防措施软件市场现状及未来发展趋势
- English Learning - Day29 作业打卡 2023.1.5 周四
- 如何查看电脑CPU性能以及提升电脑最大性能
- 牌上的花色-MUD中的玩家
- 基于检测和多目标跟踪的客流统计功能小结
- 《苏幕遮·怀旧》 范仲淹
- 在线教育平台的开发与设计(Python+Django+MySQL)
- 【Shader】网格 Mesh
- 微型计算机显示性能最好的是,【黑龙江省中小学教师信息技术考试(五)】黑龙江省中小学正高级教师...
- 关于springboot整合Jcasbin权限校验说明