当前位置:   article > 正文

STM32项目分享:智能门禁锁系统_基于stm32的智能门锁

基于stm32的智能门锁

目录

一、前言

二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

1.PCB图 

2.PCB板及元器件图

五、程序设计 

六、实验效果 

七、资料内容

项目分享


一、前言

项目成品图片:

哔哩哔哩视频链接:

https://www.bilibili.com/video/BV1Sg4y1X7Ex/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2

(资料分享见文末) 

二、项目简介

1.功能详解

基于STM32智能门禁锁系统。

功能如下:

  1. 按键解锁:系统通过4×4矩阵键盘模块输入密码进入主菜单
  2. 门禁刷卡:通过RFID模块刷卡进入主菜单,卡片可以添加或者覆盖删除
  3. 指纹识别:通过AS608指纹识别模块识别指纹开锁
  4. 蓝牙APP解锁:通过蓝牙APP输入密码解锁
  5. 实时时间显示:OLED屏幕显示当前时间,可通过按键修改
  6. 步进电机:步进电机模拟门锁开关
  7. OLED显示:显示用户解锁界面,主菜单以及各项功能界面
  8. 蜂鸣器报警:密码输入错误蜂鸣器报警

2.主要器件

  • STM32F103C8T6最小系统板
  • OLED显示屏(7针SPI协议)
  • 4×4矩阵键盘
  • RFID门禁模块(加卡片)
  • AS608指纹模块
  • 蓝牙模块(BT04-A)
  • 蜂鸣器

三、原理图设计

四、PCB硬件设计

1.PCB图 

2.PCB板及元器件图

五、程序设计 

  1. int main(void)
  2. {
  3. u16 set=0;
  4. u8 err=0;
  5. int key_num;
  6. int time1;
  7. int time2; //锁屏时间
  8. char arrow=0; //箭头位子
  9. delay_init(); //延时函数初始化
  10. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  11. uart_init(9600); //串口初始化为9600
  12. printf("串口功能正常\r\n");
  13. Button4_4_Init(); //初始化与按键连接的硬件接口
  14. OLED_Init(); //显示初始化
  15. Walkmotor_Init();
  16. BEEP_Init(); //蜂鸣器初始化
  17. usart2_init(usart2_baund); //初始化指纹模块
  18. PS_StaGPIO_Init();
  19. OLED_Clear();
  20. starting();//开机信息 logo
  21. err = RTC_Init(); //RTC初始化
  22. if(err)
  23. {
  24. OLED_Clear();
  25. Show_Str(12,13,128,20,"RTC CRY ERR!",12,0);
  26. OLED_Refresh_Gram();//更新显示
  27. delay_ms(3000);
  28. }
  29. SysPartInit(); //系统参数初始化
  30. while(1)
  31. {
  32. //锁屏界面
  33. MAIN:
  34. OLED_Clear();
  35. OLED_Show_Font(56,48,0);//显示锁图标
  36. while(1)
  37. {
  38. time1++; Display_Data();//时间显示:每1000ms更新一次显示数据
  39. if(DisFlag == 1)
  40. {
  41. DisFlag = 0;
  42. OLED_Fill(0,24,16,63,0);
  43. OLED_Refresh_Gram();//更新显示
  44. }
  45. if((time1%100)==1)
  46. {
  47. //MFRC522解锁
  48. time1=0;
  49. MFRC522_Initializtion();
  50. Error=MFRC522_lock();
  51. if(Error==0)
  52. {
  53. goto MENU;
  54. }
  55. else
  56. {
  57. OLED_Show_Font(56,48,0);//锁
  58. }
  59. //手机蓝牙解锁密码1
  60. Error=usart1_cherk((char*)sys.passwd1);
  61. if(Error==0)
  62. {
  63. OLED_Clear_NOupdate();
  64. Show_Str(12,13,128,20,"蓝牙密码1:正确",12,0);
  65. OLED_Refresh_Gram();//更新显示
  66. delay_ms(800);
  67. DisUnLock();
  68. goto MENU;
  69. }
  70. else {}
  71. //手机蓝牙解锁密码2
  72. Error=usart1_cherk((char*)sys.passwd2);
  73. if(Error==0)
  74. {
  75. sys.errCnt = 0;
  76. OLED_Clear_NOupdate();
  77. Show_Str(12,13,128,12,"蓝牙密码2:正确",12,0);
  78. OLED_Refresh_Gram();//更新显示
  79. delay_ms(800);
  80. DisUnLock();
  81. goto MENU;
  82. }
  83. else {}
  84. }
  85. //指纹解锁
  86. if(PS_Sta) //检测PS_Sta状态,如果有手指按下
  87. {
  88. while(PS_Sta)
  89. {
  90. Error=press_FR();//刷指纹
  91. if(Error==0)
  92. {
  93. goto MENU; //跳到解锁界面
  94. }
  95. else
  96. {
  97. OLED_Show_Font(56,48,0);//锁
  98. }
  99. }
  100. }
  101. //密码锁
  102. key_num=Button4_4_Scan(); //按键扫描
  103. if(key_num!=-1)
  104. {
  105. Error=password();//密码解锁函数
  106. if(Error==0)
  107. {
  108. goto MENU; //跳到解锁界面
  109. }
  110. else
  111. {
  112. OLED_Show_Font(56,48,0);//锁
  113. }
  114. }
  115. delay_ms(1);
  116. }
  117. /********************主界面**************************/
  118. MENU:
  119. OLED_Clear();
  120. MENUNOCLR:
  121. OLED_Fill(0,0,20,48,0);
  122. //主页菜单显示
  123. if(arrow<3)
  124. {
  125. Show_Str(5,arrow*16,128,16,"->",16,0);//显示箭头
  126. set=0;
  127. }
  128. else
  129. {
  130. Show_Str(5,(arrow-3)*16,128,16,"->",16,0);
  131. set=3;
  132. }
  133. Show_Str(25,0,128,16,setup[set],16,0);
  134. Show_Str(25,16,128,16,setup[set+1],16,0);
  135. Show_Str(25,32,128,16,setup[set+2],16,0);
  136. Show_Str(0,52,128,12,"上 下 确定",12,0);
  137. OLED_Refresh_Gram();//更新显示
  138. time2=0;
  139. while(1)
  140. {
  141. //超时锁屏
  142. time2++;
  143. if(time2>100 | key_num==4){
  144. OLED_Clear();
  145. DisLock();
  146. if(time2>100) beep_on_mode2();
  147. time2 =0;
  148. OLED_Clear();
  149. goto MAIN;
  150. }
  151. //手机蓝牙锁定
  152. if(memcmp(USART_RX_BUF,"lock",4)==0)
  153. {
  154. DisLock();
  155. goto MAIN;
  156. }
  157. //功能选项选择
  158. key_num=Button4_4_Scan();
  159. if(key_num)
  160. {
  161. if(key_num==13)
  162. {
  163. if(arrow>0)arrow--;
  164. goto MENUNOCLR;
  165. }
  166. if(key_num==15)
  167. {
  168. if(arrow<5)arrow++;
  169. goto MENUNOCLR;
  170. }
  171. if(key_num==16)
  172. {
  173. switch(arrow)
  174. {
  175. case 0:Add_FR(); break;//录指
  176. case 1:Del_FR(); break;//删指纹
  177. case 2:SetPassworld();break;//修改密码
  178. case 3:Set_Time(); break; //设置时间
  179. case 4:Add_Rfid(); break; //录入卡片
  180. case 5:Massige(); break; //显示信息
  181. }
  182. goto MENU;
  183. }
  184. }
  185. delay_ms(1);
  186. }
  187. }
  188. }

六、实验效果 

七、资料内容

项目分享

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/878271
推荐阅读
相关标签
  

闽ICP备14008679号