你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】基于STM32单片机的电子密码锁设计

[复制链接]
STMCU小助手 发布时间:2022-5-11 13:42
一.硬件方案* ]: x6 o; n" ~3 u" Y7 }
本设计采用STM32F103C8T6单片机作为主控芯片,结合外围的矩阵按键输入、LCD1602液晶显示、报警、开锁等电路模块实现开锁、上锁、报警、密码更改等功能,设计了一款可以多次修改密码并且具有报警功能的液晶显示电子密码锁。
, t' A# ]) L6 g4 z6 F" s主要由STM32单片机+最小系统+LCD1602液晶显示模块+蜂鸣器模块+LED指示灯模块+继电器驱动模块+矩阵键盘模块+AT24C02芯片模块;如图:
. {9 n+ z# z( Q2 o0 Z. Z. {& {
& h+ M; `0 j# p1 J6 d) q (553Y[~@_N_7FBWBB(KUVCS.png : h4 C2 j  ~; v  _& @2 N
( N& c1 N+ `* h' R
二.设计功能( j0 k3 I1 d! T% a0 a9 n
(1)采用矩阵键盘输入、1602液晶显示、AT24C02实现存储的密码掉电保存、继电器模拟开锁。4 h) c  h: l5 y+ q2 w- e5 e
(2)六位数字密码(0-9),更改密码时需要先验证初始密码,初始密码正确,输入两次新密码,两次输入一致即更改密码成功。2 N" r3 \& d+ K$ `# J7 f; E' w3 f
(3)开锁时密码输入错误,声光报警提示。
; _: P& o* ?0 `, K( r0 f(4)如修改的密码忘记,可以通过管理员重置。! q3 f' z" Q% O$ {

/ ?" U. d+ ]" `. V6 }% F7 O三.设计原理图1 m- R7 w! d* [. Y5 ^  y1 [
(1)原理图主要采用AD软件进行设计,如图:8 d3 h! ]' d. O5 a+ v! J) h, j

: b7 L& Q2 x" K! h# b+ `0 x# P, s9 X  O }8@LPE$J8AH(Q9HRJIO7ZY2.png & o3 z& L6 X# A( m- N  T* t/ Q
& x" ~6 u8 O6 N: V2 h4 m3 H
(2)PCB图如下:- ?! c' F( X. p$ V2 K/ v1 T0 a
, D3 d* q2 z/ D0 i
8~39VNSKT)W8NLGUC}3EE.png 6 L/ [* z4 f7 D/ \/ E2 P

" ]# M; z( W& X1 q5 B四.软件设计7 [* I) F4 V. `9 U/ _2 f
(1)程序流程图
8 X5 A0 w$ V0 Q; _) s7 G/ U2 k5 H0 Q; V3 b8 n4 }
39c5e79f9c204592acd19483b93e602a.png $ S  ?1 O( S' `2 _$ J9 k5 A

2 c6 C, T. Z2 C(2)主程序源码1 ]* ~* E$ ]8 |; q" d  v

, J) z2 f- M& _. t! Z
  1. int main(void)
      r- p* S4 M' F$ i6 x/ I! w7 R
  2. {
    / u! H& Y9 Y" v" O7 K, X) E% @2 h
  3.         BEEP_Init();
    ) p8 c8 G. h3 P1 C: F  k
  4.         LED_Init();
    , w8 ^: I% j% A  s* S+ B
  5.         delay_init();  4 i  \. `$ x: C2 r: c
  6.         LCD1602_Init();4 B7 @$ A* z% S5 S' {& k; U
  7.   KEY_Init();( k6 Z/ z! L* j$ _& J4 s/ i
  8.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    % G# c$ T* d/ g/ {
  9.         TIM2_Int_Init(4999,7199);# o9 |' {1 {, x& v  a# T  c4 Z. f
  10.   TIM3_Int_Init(29,35999);
    3 u% v; t# I( N3 Q/ M
  11.         TIM4_Int_Init(4999,7199);//每500ms计算一次速度的值,并显示
    1 E' X# ?9 ~3 q+ l1 x. w0 \
  12.         .....
    0 s  I, o  n' M0 z/ q' r4 ^, l8 _
  13. //        flash1[0]=100;* _0 B9 [6 v" H. {( Q  f& P+ F
  14. //STMFLASH_Write(ADDR_hum_up_1,(u16*)flash1,sizeof(flash1));; f$ {! {% L/ e  h- P
  15. //STMFLASH_Write(ADDR_hum_up_2,(u16*)flash2,sizeof(flash2));7 z# g8 ?' b: o* [6 I# j2 R
  16. % N6 o+ X* e( e" w8 m
  17.   TIM_Cmd(TIM3, ENABLE);8 ]0 {) U, i1 Q% N; k$ a5 T. P1 ]
  18.   STMFLASH_Read(ADDR_hum_up_1,(u16*)flash1,sizeof(flash1));) j4 M5 q1 r' i( ?2 h! R
  19.         setpass_flag=flash1[0];+ v# N" f' H# A( s3 U! w
  20.   STMFLASH_Read(ADDR_hum_up_2,(u16*)flash2,sizeof(flash2));
    3 D; c  s+ w* `+ T
  21.         for(j=0;j<6;j++)
    2 L) ]- M, n* S6 c& \3 X# i
  22.         {# q. Z" A* f% C  E; g0 g& M
  23.                 setpassword1[j]=flash2[j];
    3 ~7 s% D# G* e# ^+ g
  24.                
    % c& Z% f3 |- X9 H( b. ?; k* \7 c) D
  25.         }
    % ~$ K& H. ?/ n' R8 E. t- p
  26.         j=0;* [9 b/ X2 `2 M+ J8 W, C. h2 }; I9 P% u% q
  27.         : A$ ?+ v' }+ |/ @9 ^( z) C8 G1 p
  28.         open_flag=1;
    0 W: L& b3 t% F
  29.         pass_shuru=0;
    / c. @" U$ Z4 H! W* X
  30.         while(1)) D! i. S/ `2 E6 V# W/ X
  31.         {
    : k. d3 ~! g/ }: C4 Q/ v: s0 k
  32.                 mound();4 I3 O7 s( ]7 a  ~
  33.                 if(down_flag==2)
    & d& J' j+ ]9 ?5 H
  34.                 {! R. I* ^& w+ `! p
  35.                         GPIO_ResetBits(GPIOC,GPIO_Pin_13);% [; ~+ P* |8 V! T
  36.                 }. t6 z# T+ c, v2 r, d2 _/ S+ A
  37.                 if(down_flag==5): m, T7 t+ @, V3 W- ?/ i9 }
  38.                 {# ]9 h- X" H1 L& `! I& a
  39.                         down_flag=0;
      L' q, S) ]4 {4 Q( M* {" Z- A
  40.                         if(setpass_flag11==2)8 \/ |$ q9 T$ ]; t; d8 ]) k
  41.                         {
    5 ?7 m4 O* ^' @1 B& h
  42.                          TIM_Cmd(TIM2, DISABLE);
    , y! D& ~) L& h9 K+ r4 D
  43.                         }
    . }2 p, V; A$ F
  44.                         else
    0 |3 f  u# M- Z( h
  45.                         {                        
    # C) Q! ]/ |. t
  46.                                 open_flag=1;; _2 d! ]& _% A- l
  47.                           pass_shuru=0;
    " o  f/ }% r, _( E
  48.                           GPIO_ResetBits(GPIOC,GPIO_Pin_13);4 o1 v) v$ G8 a
  49.                           TIM_Cmd(TIM2, DISABLE);
    $ M, |4 M! R1 B$ u' j/ V  p
  50.                                 GPIO_ResetBits(GPIOB,GPIO_Pin_0);
    8 P# I8 F# K5 d; `) K: {) C
  51.                         }
    9 S! F+ @  o6 y. l

  52. , _8 N0 Z7 Q3 y/ L6 O4 X, E
  53.                 }
    / l  v1 u, i- @0 Z( n+ B
  54.                   H1 U$ V/ z) n$ T3 G; T, |* S4 X: }
  55.                 if(errtime_flag==2)
    - ~# H; j% A, B" t" c$ L1 `
  56.                 {
    # G- b" q1 X1 I) t
  57.                         GPIO_ResetBits(GPIOC,GPIO_Pin_13);' B; |& y) B0 T( s& a' V
  58.                 }
    6 v" p% @! I& i& X. w
  59.                 if(errtime_flag==3)
      {" X1 S2 |% L, M8 L3 Z  y: F3 E7 O5 ~
  60.                 {
    ! G) p# \! M" X, X+ e
  61.                         GPIO_SetBits(GPIOC,GPIO_Pin_13);
    # L8 B) m/ ~! v* l2 n' ?
  62.                 }  I# {* X9 @3 e0 F3 H8 F6 B+ V( N
  63.                 if(errtime_flag==4)
    $ O5 U" W( ]0 k6 d# A
  64.                 {- X# R- U0 [' d+ x2 s; {! N2 z7 p
  65.                         GPIO_ResetBits(GPIOC,GPIO_Pin_13);4 S1 Y. z$ Y$ \4 l! g
  66.                 }
    : z( b4 C0 Y4 s( B2 z8 ?
  67.                 if(errtime_flag==5)* D; @9 Q5 X4 y( [: E8 N! }" F
  68.                 {2 N! N5 K4 v# g5 `# D8 P1 T& f
  69.                         GPIO_SetBits(GPIOC,GPIO_Pin_13);4 Y# |% k! D- p3 }
  70.                 }
    1 m0 j1 y5 I4 K) o7 G

  71. 3 |1 b' Z5 s: s1 V1 n
  72.                 if(errtime_flag==6)' u1 O# A2 U* y6 M! g% s3 ]
  73.                 {. k4 C% S) C% V) L9 h
  74.                         open_flag=1;8 |* e1 x6 B( \8 R6 C% f/ p  Y
  75.                         pass_shuru=0;) X- p9 }  K( c: L* \
  76.                         errtime_flag=0;
    % g0 L, u' i" n
  77.                         GPIO_ResetBits(GPIOC,GPIO_Pin_13);2 Q% M1 g  i* v# h$ h& j+ ^1 F
  78.                         TIM_Cmd(TIM4, DISABLE);1 x( D$ o1 ]2 P8 ]; H. M$ |+ U2 B
  79.                 }
    ) k7 d" b' [2 O; ^7 L8 D. m

  80. 8 A5 ^% s/ j# y- S! N$ _
  81.         }6 c% y; l" [. f

  82. ) a8 N9 d9 i( I& y
  83. 1 J+ w! \- E6 F6 `, o
  84.         $ _2 P0 D' f4 x0 s. x
  85.         
    & v2 j9 h6 {# \6 C
  86. 8 \% r3 t& ~- ?6 y4 R9 {
  87. }
复制代码

6 M2 Y/ R' l6 q, @) p. H  }
/ k+ {7 Y  t& Y7 f$ p; }3 Q( o/ e2 T  x

6 Z+ g! ~; J: m8 [
赞 收藏 评论0 发布时间:2022-5-11 13:42

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版