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

基于STM32的简易密码锁

[复制链接]
STMCU小助手 发布时间:2022-12-28 16:00
前言:1 K. T& L- c# r/ A9 X4 ^
朋友做毕设需要用到密码锁这个功能,帮忙设计了一个简单的。因为自己也忙于毕设,所以很多功能也没有完善。. u: @( t- n' \4 s8 K! V

, o9 W! e6 Y9 X% I& C有兴趣的朋友可以看下这个,也能实现扫码开锁功能 扫码点灯
3 c/ b7 v$ X/ d4 B, _+ |; S
9 P* j$ W* f  e  a( a
实现功能:

* l8 L% p! P  _7 p1、密码保存到STM32内部flash中,掉电不丢失。
- ?2 f; m& R* a% x4 I2 p) G2、 通过按键修改密码
6 d6 k; [0 v9 o3 C! h3 A/ N6 r/ i

( b7 x( v4 ~" p# W7 s/ M简易密码锁功能说明:1 w7 {6 n( s; P1 m# ~2 b
4位密码 密码全是数字和非0值
2 w+ s. [8 |( j/ @9 PA按键:展示密码
8 q$ }  T& t3 h7 RB按键:撤销1位数字
1 G0 B5 J6 `. q$ i. i- l# LC按键:清屏
- s9 D" a4 J7 {1 @' b5 iD按键:进入和退出修改密码
$ W7 j6 G$ \! x" t/ s5 ]5 [
( i, F7 n. a4 @! H* _* W
所需材料:) A" Z, C* y5 R3 j! f6 K, H+ z- _
1、stm32f103c8t6单片机+ Z) k7 y0 C6 \8 W- c4 P
2、4*4矩阵键盘4 G9 l5 r$ }' ]* t* Z" j
3、OLED显示屏
0 ]4 w+ t% W1 _! J4、ST-LINK下载器
$ G0 U7 [* x" z* j. L1 Z- K

$ n. ]8 Z* a/ T- T* a  U接线事项:! N2 H5 K$ [- r; Y
OLED显示屏:VCC–3V3 GND–GND SCL–PB5 SDA–PB7
# C3 o4 j. D8 A$ e! q4 f5 T# U矩阵键盘:PA0~PA7的8个引脚, N6 A+ N  V+ r+ }! S
* j. [) x' F" w- Y3 T. O9 B- t3 @
实物图:( l1 ]/ ~1 |% ]4 g# @# A, X! Q) ?6 \/ P
- j4 r; g/ F+ d/ z
bd27de6ba89d4f6b9cf2163cc51464e4.jpg
! P! |  ^; W$ n+ J- G9 {
3 ]5 k# e6 o, C( ^( o, h8 Z* a

4 J5 d8 P8 B* h' `, Q* {  Q! l部分代码:  _8 c3 ~+ {) G
main.c文件
' Y' N3 h1 a- |* S
  1. /*
    ! W' F: V) {6 A5 r7 ~, ?
  2. 简易密码锁功能说明:
    # c2 u& i4 @2 V" a- ?1 I
  3. 4位密码/ W3 X& G3 d# B- `9 z" @
  4. 密码全是数字和非0值
    , j+ @- h8 [* v, x: o
  5. A按键展示密码
    . c$ V9 w$ q* o* t4 U
  6. B按键退格, k' A  G0 D6 @2 ^) Q
  7. C按键清屏
    3 O, u, C$ a2 N/ z; W5 h
  8. D按键进入和退出修改密码5 T6 S, O% w$ Z$ F
  9. */
    5 f, y# O4 W9 [1 G% ]

  10. # w, Q: U6 T- R: R3 i9 \' D
  11. #include "stm32f10x.h" //STM32头文件
    ! H0 c0 c& [2 e2 @  I
  12. #include "system.h": L' [. m2 r5 H; x, R
  13. #include "SysTick.h"
    0 ]1 h0 Q* W! E
  14. #include "oled.h"0 ?0 O% q) u$ I* S1 b2 w
  15. #include "stdio.h"
    & x) t3 N3 R( w. A  A4 z5 a
  16. #include "stm32_flash.h"8 M9 Q8 e, G, m$ {9 ~1 q
  17. #include "KEYPAD4x4.h"% g7 u8 X! h* N( `' P3 i3 L! n
  18. #include "NVIC.h"
    ; d& K: W/ j% k
  19. #include "usart.h"        $ _0 a# X* N) N& w8 `
  20. #include "mypwd.h"
    3 E  O$ j; K: _* A

  21. : V9 w9 l" c9 f# D, x7 N2 K
  22. //已放在system.h文件中$ t! Z2 P2 l8 H
  23. //#define STM32_FLASH_SAVE_ADDR  0X08009990                //设置FLASH 保存地址(必须为偶数,且其值要大于本代码所占用FLASH的大小+0X08000000)$ A" [1 e0 c4 z4 a- l1 z
  24. ) |* E* `% J4 b/ P) X$ m
  25. char dataBuf1[16];                   //数据缓冲区1 C% ?  I3 _( v1 T
  26. unsigned char myPwd[4]={1,2,3,4};    //第一次要写入的密码   
    4 U0 Q: x8 _" @- n
  27. unsigned char readPwd[4]={0};       //从flash中读取的密码存放于此, x8 r# @" ]: m
  28. unsigned char inputPwdArr[4]={0};  //用户输入的密码存放于此" z# x! E8 W* E" _* d" N
  29. unsigned char newPwdArr[4]={0};    //新密码存放于此3 m" i% \& e3 v7 K
  30. u8 g_count = 0;     //密码位数,目前4位密码& c+ }( r# z% V4 b
  31. u16 inputPwd = 0;   //输入的密码值  
    0 c* ~, C3 q1 ?/ B: }* P+ @
  32. bool modifyFlag = false;  //修改密码的标志
    " u$ N- g3 u; l5 _, r, z
  33. //主程序
    3 v0 Z( s) V# v/ q& ~* E8 y3 x
  34. int main (void)
    5 K0 I  ^' \: ?6 S3 V/ b5 F
  35. {* }* t4 _; L: A! @* T
  36.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组
    " [0 o; v5 W' }/ b% }
  37.         SysTick_Init(72);
    * ^2 @+ }5 y+ j; [1 H; B0 Z
  38.         OLED_Init();8 N  d/ G, P- @. Y( _2 ?1 _7 R, x
  39.         OLED_Clear();
      |2 F+ u( ^; P4 e
  40.         INT_MARK=0;//中断标志位清0
    2 [) T8 X3 ?) e* l1 F

  41. 5 R  m  s  `4 c- `7 j1 f' Z% }; f
  42.         KEYPAD4x4_Init();//阵列键盘初始化$ r7 |( |, |; ^
  43.         KEYPAD4x4_INT_INIT();//阵列键盘的中断初始化
    8 g2 ~3 V8 S* ~' j$ f4 X5 P
  44.         : V0 B* d( ^0 F( @) S
  45.         //写入myPwd数组中的密码1 h- i& T: a- N5 h4 M+ u
  46.         //STM32_FLASH_Write(STM32_FLASH_SAVE_ADDR,(u16*)myPwd,sizeof(myPwd));' z% J: x; k# l& v
  47.         //delay_ms(1000);) ~& b& ]. P; ^) U1 o
  48.         9 d* N! Z( j$ M) V
  49.         //读取密码,并存放在readPwd数组中
    # Q) b) w! s$ d! e- K
  50.         STM32_FLASH_Read(STM32_FLASH_SAVE_ADDR,(u16*)readPwd,sizeof(readPwd));
    6 J5 U0 @! Z. f7 M" k

  51. & y. Q$ w  I: v) A% c
  52.         OLED_ShowString(0,16,(u8*)"input:",16);
    & h( N7 K+ p! y* g! Q
  53.        
    ) D- E9 @* u: y7 K8 t! p: E. ^
  54.         OLED_Refresh();  //更新显存到OLED       
    0 S, l4 {- S) I0 P
  55.         while(1)
    9 k# {/ M! }  }; I! z
  56.         {       
    - K+ Z9 z! _- A; c6 L1 q) \# R" J
  57.                 if(INT_MARK)  //按键按下,发生中断
    : e# `2 Y; x' }* z; n8 A
  58.                 {; o' n4 \% f% u" p
  59.                         if(modifyFlag==false) //中断标志位为1表示有按键中断& d/ t1 U+ B! N5 X+ O  U0 g; Q
  60.                         {
    $ n: N+ C7 j2 \% @; \. ?; p
  61.                                 INT_MARK=0;     //标志位清0- J- z0 T) i1 S& u/ I3 O7 K$ b
  62.                                 OLED_ShowString(0,16,(u8*)"input:",16);
    4 s3 T0 B/ o+ ]- f2 F
  63.                                 inputPwdFun();  //输入密码并显示. A: D2 k. n1 ?8 m; D8 N) o
  64.                                 jugePwdFun();    //判断输入的密码$ J3 i& g$ m) V+ C$ B! B5 E2 z
  65.                         }
    ' X9 ^: L( G# ]% N
  66. , O' P1 i( r: @6 M# \8 H. e* {/ F
  67.                         else if(modifyFlag==true)
    / d, H$ R7 ?& v3 J- E* Q
  68.                         {( r! Y: V+ r* j$ K! I6 {
  69.                                 modifyPwdFun();                  //修改密码
    ; V& t* Y/ n8 u. `" b
  70.                         }
    2 Q+ y  P2 W( m9 a& z: g6 j4 ?% F! Y4 ]
  71.                 }1 h; a* W& f* g* H( E5 [
  72.                 //delay_ms(1000); //延时会影响键盘的输入       
    0 k8 [! o7 B# Y' Q  b
  73.         }8 o+ w9 k. {3 R  \- r
  74. }* ]( {; j2 e3 e' X9 r! ?; p
复制代码

; Q7 x6 {! q2 O9 ]7 t  S- L最后:
) k8 q) `) I* G8 E: m+ W下载操作:9 e" o# _* K1 v+ W

9 _1 T, P9 A2 N" b7 u 5c3a05c4a8994abfa7d697da42696970.png ) N1 U. V6 F% V1 {1 U; F% G
/ ]5 ^' u  H0 S9 S+ ?' Y
————————————————
: v$ I/ Q$ d8 j" d- l1 N; s8 O( p' x版权声明:⁽⁽ଘ晴空万里ଓ⁾⁾
! ^# Z* m+ f/ l( ?$ I* i3 r( a2 X) g1 B, [8 Z

+ M5 c% [) Q3 ?9 M7 W5 N6 s9 y
收藏 评论0 发布时间:2022-12-28 16:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版