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

基于STM32的简易密码锁

[复制链接]
STMCU小助手 发布时间:2022-12-28 16:00
前言:
, C! B/ ~: i/ a4 k. g  [: Z朋友做毕设需要用到密码锁这个功能,帮忙设计了一个简单的。因为自己也忙于毕设,所以很多功能也没有完善。
1 Q! C1 Q: q8 y* Z
  M, w% A# j' y% }4 D有兴趣的朋友可以看下这个,也能实现扫码开锁功能 扫码点灯
4 _0 V( X$ \: a- D5 _1 y
' G9 O( ~' j; d  A8 e1 {6 N
实现功能:

8 |3 `6 C' f% ?1、密码保存到STM32内部flash中,掉电不丢失。
0 L- {- \( c. }5 `, R( i& i2、 通过按键修改密码9 X* I6 Q! G' K# L2 i
! d; [7 G, `' [, a0 ~0 b1 Q
简易密码锁功能说明:, S- n. C0 P9 N0 J/ w8 y3 W/ E
4位密码 密码全是数字和非0值5 l! C) R4 O$ s) s# x7 v
A按键:展示密码
6 [  x* y" N& N, k/ FB按键:撤销1位数字
- C2 y* G5 L8 {3 nC按键:清屏
% D& I8 l+ H, _( j0 pD按键:进入和退出修改密码
! W# p( s& S4 w

; \' j5 i' p. m8 A" H所需材料:
* i9 A2 m' O. D1、stm32f103c8t6单片机2 @  A  Z- b1 e( F7 i
2、4*4矩阵键盘8 b+ ]4 N! a2 L, N& ?
3、OLED显示屏6 f( R- L! {" Y% f( Y# ?
4、ST-LINK下载器/ N: z) p( ]$ {8 R  {- V
. @2 E% {* ^( X# G
接线事项:8 A1 D/ ]- S# y8 Q
OLED显示屏:VCC–3V3 GND–GND SCL–PB5 SDA–PB7
/ E# J- Z# g, A0 k矩阵键盘:PA0~PA7的8个引脚' z* }" \7 F7 u3 [9 q

: u7 N" L& v: t& i/ A$ C实物图:( A' q2 M- I5 ?$ `2 O# I
6 j, \' _+ v- Q  a
bd27de6ba89d4f6b9cf2163cc51464e4.jpg
, n0 T6 p$ u, }3 O+ C3 k  \! [
$ c2 H+ x1 Y0 D& k+ C
% Z0 ]0 d. N1 L" X& x" f( w. w
部分代码:3 Q: T  ], l6 b6 @
main.c文件
2 V3 \$ c0 h( f& J4 l6 G5 j: L
  1. /*
    ( i2 j/ T3 ]' q. U
  2. 简易密码锁功能说明:
    6 [0 n4 N9 q( y* Y
  3. 4位密码5 Y+ |8 q$ L' o
  4. 密码全是数字和非0值' y' D% N4 D8 @! p" q
  5. A按键展示密码1 T! N" A! X3 g% O' q0 y9 }/ }' s
  6. B按键退格% ]: k1 w2 H" o# y6 a0 u
  7. C按键清屏, W* B+ T' ]# _5 r
  8. D按键进入和退出修改密码
    2 ?) A$ K' U5 }' q! n: K% d
  9. */
    $ p/ b5 `& F; `
  10. 9 s9 o! p: l  S: F2 q8 b. j4 g
  11. #include "stm32f10x.h" //STM32头文件
    # h5 a7 d" W  v8 Z0 r8 {* G
  12. #include "system.h"
    + l% d4 h7 D! s
  13. #include "SysTick.h"
    , l. e5 Q' s$ P
  14. #include "oled.h") i! h0 e; R  ]8 v* U$ R; }
  15. #include "stdio.h"/ |" P) @6 ~/ @  v5 k$ s! l! I
  16. #include "stm32_flash.h"
    , l/ b2 F( b9 C
  17. #include "KEYPAD4x4.h"4 ~3 m5 O2 P3 F/ |: D/ y; _% D# w- A
  18. #include "NVIC.h"
    % x' @% b! q5 ~$ c8 i. g# g
  19. #include "usart.h"       
    - L7 {- V' J+ X# j
  20. #include "mypwd.h"" z% X4 D9 b. H" M& H0 J! s
  21. ! ?* F. _/ X( Q/ F, n, c
  22. //已放在system.h文件中' F0 ~. L6 i1 X9 H4 T. g# E
  23. //#define STM32_FLASH_SAVE_ADDR  0X08009990                //设置FLASH 保存地址(必须为偶数,且其值要大于本代码所占用FLASH的大小+0X08000000)
    1 _; ], R8 S" j' W

  24. 0 L% t+ e2 a0 K' W* J+ |& x/ {2 E
  25. char dataBuf1[16];                   //数据缓冲区& [& Q- q* `; a6 u' J% Y
  26. unsigned char myPwd[4]={1,2,3,4};    //第一次要写入的密码   6 E/ y9 J* q( m) s
  27. unsigned char readPwd[4]={0};       //从flash中读取的密码存放于此
    - ~# t$ V& W# s/ N" ^+ h
  28. unsigned char inputPwdArr[4]={0};  //用户输入的密码存放于此
    4 V, G! ~4 r7 e
  29. unsigned char newPwdArr[4]={0};    //新密码存放于此
    % _' J5 r! L' p' x( y% I3 h* `5 L
  30. u8 g_count = 0;     //密码位数,目前4位密码
    5 h9 U7 g+ L7 E8 g3 x+ _$ |
  31. u16 inputPwd = 0;   //输入的密码值  
    6 n5 j3 }9 ?- l3 L3 {3 [
  32. bool modifyFlag = false;  //修改密码的标志
    1 \4 h+ D$ K* f: w( j. [
  33. //主程序
    9 O3 e0 b/ q" m8 e' C
  34. int main (void)
    ! U2 u4 V6 x1 E$ j
  35. {$ {$ ]) Q$ q: M7 a' v) t+ r
  36.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组- R7 M, k0 `0 P4 T) Q
  37.         SysTick_Init(72);5 T. H+ s* ~% F, B: q. g% J% z
  38.         OLED_Init();
    6 |( z/ s: a' D. Y5 L
  39.         OLED_Clear();) _& r5 y9 e1 {* i) Y8 W
  40.         INT_MARK=0;//中断标志位清0
    - D& T& _8 c5 x$ p! p- f

  41. 1 k0 ^" @2 W" B) B$ P, w2 w8 o& R
  42.         KEYPAD4x4_Init();//阵列键盘初始化& K8 O! O5 F; B" i  H
  43.         KEYPAD4x4_INT_INIT();//阵列键盘的中断初始化$ |1 z# H6 O( h# w
  44.         3 i* `  }) Z0 p7 l) R* z- D+ q
  45.         //写入myPwd数组中的密码
    0 v; W9 a1 H0 w
  46.         //STM32_FLASH_Write(STM32_FLASH_SAVE_ADDR,(u16*)myPwd,sizeof(myPwd));# X. P' N, b% j8 M4 e& Y, C
  47.         //delay_ms(1000);: [. g% z9 k9 l1 X) u
  48.        
    1 b/ `0 b3 Q" M- N: f' @, ?3 e
  49.         //读取密码,并存放在readPwd数组中
    $ V- {1 K8 Q3 y" a$ u3 h$ c
  50.         STM32_FLASH_Read(STM32_FLASH_SAVE_ADDR,(u16*)readPwd,sizeof(readPwd));# B2 {' I2 x( ~# m: t, ]
  51. + a, R" |- g2 P# S( Q) x7 j) A
  52.         OLED_ShowString(0,16,(u8*)"input:",16);
    # T5 W; j3 w. @4 v/ v8 R5 E& _
  53.         & `  P3 x0 U( L+ N# ]6 m9 Z8 O
  54.         OLED_Refresh();  //更新显存到OLED        6 ?; @) [3 b+ T8 }9 u
  55.         while(1)4 K# f2 E/ }. J: o# y: K
  56.         {       
    ' [: @- ]* g$ [3 O  q
  57.                 if(INT_MARK)  //按键按下,发生中断
    3 _8 b& B4 |% e' s3 j% c
  58.                 {& m3 _# I0 x, v
  59.                         if(modifyFlag==false) //中断标志位为1表示有按键中断
    ' u7 o; I+ l0 X8 y
  60.                         {   |+ q4 M5 I, U* A) W1 r
  61.                                 INT_MARK=0;     //标志位清0
    2 }2 p8 v4 W. d1 K( b5 U5 I  c) z
  62.                                 OLED_ShowString(0,16,(u8*)"input:",16);
    $ C: k+ ]8 r/ i5 p
  63.                                 inputPwdFun();  //输入密码并显示
    " k- H6 ]. L/ K0 S: v
  64.                                 jugePwdFun();    //判断输入的密码
    # u% [  N6 p0 y5 E: s
  65.                         }
    * R& [7 m3 w$ s: ?# ]

  66. / c3 T+ J; F* C& H
  67.                         else if(modifyFlag==true)
    - v) Y9 j" `& I9 b! t
  68.                         {
    & g2 [" c9 ]! O5 I7 A& D
  69.                                 modifyPwdFun();                  //修改密码4 `' q: t/ A8 i: U1 Z" ~
  70.                         }
    2 B- w" M9 K/ g  t# B
  71.                 }
    4 E& H* d' B/ i0 O. O0 ]- p! O& }
  72.                 //delay_ms(1000); //延时会影响键盘的输入        $ T8 e5 _# P& c+ }& z9 l" r9 ?
  73.         }8 a- f7 b7 ?; U  |- n$ L
  74. }& ]' P& t% {, d( E" R
复制代码
" P& r% {; m3 q' l3 ^
最后:1 ~, ?3 N+ U( S! R5 R" t
下载操作:
/ R4 R6 u: v5 b7 i1 B$ ]

  v/ t% R; e& t' q 5c3a05c4a8994abfa7d697da42696970.png 1 y; f" N5 P0 {, i4 ]% M% D( G. M5 X+ O' ~

4 |1 k( g2 m! h, Z; M————————————————- F0 ^3 i! _1 H" `
版权声明:⁽⁽ଘ晴空万里ଓ⁾⁾- `1 k6 X* A' i, S" ~. R

' x- q* n% {% A( [% d' }+ I3 K9 O& k
赞 收藏 评论0 发布时间:2022-12-28 16:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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