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

基于STM32的简易密码锁

[复制链接]
STMCU小助手 发布时间:2022-12-28 16:00
前言:
& A, u6 d, Q- Y3 U: `朋友做毕设需要用到密码锁这个功能,帮忙设计了一个简单的。因为自己也忙于毕设,所以很多功能也没有完善。1 _1 S. H% R8 |6 ^" o  X7 E" k

3 A, e. t' w  V有兴趣的朋友可以看下这个,也能实现扫码开锁功能 扫码点灯
$ Y8 h- n5 O% }
& `+ M- R& d' O1 ?6 t% S
实现功能:
4 ~* p8 j+ R' D' a- f' M7 X5 ?
1、密码保存到STM32内部flash中,掉电不丢失。
1 I$ E5 v5 o- R2、 通过按键修改密码1 P2 \1 p( {* C* r$ t, a5 M/ J

3 M* V2 v0 x6 ~7 M# k简易密码锁功能说明:4 F# ~5 N* w) l$ V: w4 k
4位密码 密码全是数字和非0值
0 v; k3 H3 Y' z' b2 s! ^! i) Z, {/ XA按键:展示密码; y. R. E/ H/ [$ Y- j. N! R9 o; _
B按键:撤销1位数字) G% q- j! k, P; C
C按键:清屏
% ~( \6 s8 x2 c# v& e: k% iD按键:进入和退出修改密码  a! _0 N% P! \1 q
  Z& T% I: r% p: x0 [
所需材料:5 o, P' l8 `- b' {/ n6 R7 g
1、stm32f103c8t6单片机
; u6 ]9 P7 j7 ?' p8 ?7 H! p7 E2、4*4矩阵键盘  R2 b: z! Y0 g+ n. ^
3、OLED显示屏8 b: s) D: l6 v& \% b. k
4、ST-LINK下载器
3 F" }5 Z6 r/ _8 x. Z5 a3 y

% D; R  [8 x0 T: j0 P0 ]6 y8 w$ t# M接线事项:# [  g9 l: h, \( q' v
OLED显示屏:VCC–3V3 GND–GND SCL–PB5 SDA–PB7$ ]& Q9 S* G+ ~
矩阵键盘:PA0~PA7的8个引脚
0 Q; {% I; C- l) M# S) j8 m  [! F

$ E2 Y* Z2 q6 U' j实物图:
' X9 |$ \. K8 \* ~" l7 ]4 O+ V0 L7 Y: C
' S3 w/ M& }! o
bd27de6ba89d4f6b9cf2163cc51464e4.jpg
$ _. [, N& G. n( ~- j" q+ m, b9 v$ f& w9 Y1 ~( B4 p* }% e% P, T

9 M+ i4 `) l( ~$ I2 [5 C* O部分代码:1 V0 \5 E$ A' }1 p1 w8 W$ C) |
main.c文件! f2 d6 U" e1 C5 ?2 k& k$ j/ ^- Q
  1. /*
    ! H, x4 @/ ~+ j5 h& d7 {
  2. 简易密码锁功能说明:, [' ~- F' Y& O. M5 A3 w4 U) E3 Y
  3. 4位密码# \$ p0 k0 F' F' P# ~
  4. 密码全是数字和非0值. a% h& N" T" F$ m# h. i
  5. A按键展示密码+ l% L+ Z" V1 Q! G. b1 Q% @
  6. B按键退格; c% J# z# k# c5 a
  7. C按键清屏9 S0 i, x+ r$ Z) N4 _
  8. D按键进入和退出修改密码
    ; [% k: \' w# Q; w3 P8 q; d0 T
  9. */; y3 g- |0 I9 B9 v2 z( `
  10. 8 D5 }* w$ _% M4 o4 O' k
  11. #include "stm32f10x.h" //STM32头文件
    / G5 x" Y; e1 v( Z5 i# [+ ?8 F
  12. #include "system.h"
    ! x  E% V$ C; y  v5 I6 h
  13. #include "SysTick.h"' q3 j' G2 ~; Q, H! A/ ]1 X1 G
  14. #include "oled.h"
    " `6 b8 x3 t4 i; ~  K8 i7 l* O
  15. #include "stdio.h"
    * ?( L. x, L7 b
  16. #include "stm32_flash.h"
    # u* s0 I8 R0 N0 J0 Y$ e; c1 T
  17. #include "KEYPAD4x4.h"
    5 I# f/ k: d5 R: [, j7 B: d1 @
  18. #include "NVIC.h"- ~6 S. q" H+ A+ s$ @# D9 H
  19. #include "usart.h"       
    ) Q2 Q2 [6 x5 K8 j: d
  20. #include "mypwd.h"
    3 I: M3 J) R7 s. C

  21. 2 U1 z1 x1 S) U+ z
  22. //已放在system.h文件中# L, F( k5 v6 p/ e1 u
  23. //#define STM32_FLASH_SAVE_ADDR  0X08009990                //设置FLASH 保存地址(必须为偶数,且其值要大于本代码所占用FLASH的大小+0X08000000)
      ~- c; b! ]/ x+ k

  24. 8 G/ z2 L3 I- @- l3 u' I' S
  25. char dataBuf1[16];                   //数据缓冲区+ @. h8 z" H- `' @8 ^3 G9 f9 R
  26. unsigned char myPwd[4]={1,2,3,4};    //第一次要写入的密码   
    , u1 K9 n( i4 L& m) X7 a$ ~$ Q* Z
  27. unsigned char readPwd[4]={0};       //从flash中读取的密码存放于此+ Q$ d. p% |  n/ q4 }
  28. unsigned char inputPwdArr[4]={0};  //用户输入的密码存放于此6 O8 ?; s' q, c* R% J
  29. unsigned char newPwdArr[4]={0};    //新密码存放于此: {% b2 _5 |/ M
  30. u8 g_count = 0;     //密码位数,目前4位密码- f7 [# T4 i5 j' O
  31. u16 inputPwd = 0;   //输入的密码值  $ ]/ X3 n3 p' [; N* m' H
  32. bool modifyFlag = false;  //修改密码的标志
    1 B1 m) y# _/ Q( ]  l( @$ Q
  33. //主程序
    ! W/ u3 }3 ?( g4 R! \: J: T
  34. int main (void)+ O! ?/ z  O  n' Y! @) A
  35. {
    ! I" I! ^' ?+ P0 `/ ]
  36.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组# d  j1 ]! u! G
  37.         SysTick_Init(72);
    0 K* y" Y& C0 j: E
  38.         OLED_Init();  B0 P& P: [9 x& }# Z1 d
  39.         OLED_Clear();
    # h9 Z* J5 d0 f. R) Z" c
  40.         INT_MARK=0;//中断标志位清0
    . ]! _$ H! B4 W
  41. 4 l% k! V6 c, i4 b. \
  42.         KEYPAD4x4_Init();//阵列键盘初始化) [, r2 b2 \  N5 T: R' h
  43.         KEYPAD4x4_INT_INIT();//阵列键盘的中断初始化, Q9 C3 {+ N2 e6 n9 v8 o) P
  44.         . D# E$ a' c1 z4 C5 e
  45.         //写入myPwd数组中的密码
    6 P& o, l. {( z, O8 x& |
  46.         //STM32_FLASH_Write(STM32_FLASH_SAVE_ADDR,(u16*)myPwd,sizeof(myPwd));
    * ~- T* H* j$ c9 \+ a; _6 I% _
  47.         //delay_ms(1000);+ N, {) X9 z# a( Q- |* |
  48.         % y: o7 t2 P, A6 ~+ k3 U
  49.         //读取密码,并存放在readPwd数组中0 Q; T6 K7 @; A! R. m
  50.         STM32_FLASH_Read(STM32_FLASH_SAVE_ADDR,(u16*)readPwd,sizeof(readPwd));  p+ x0 d$ i% \( P: {) F& v6 A
  51. 4 ?7 }8 M0 o  D; _6 K+ e# W
  52.         OLED_ShowString(0,16,(u8*)"input:",16);3 N% t# u/ ~2 ]& i5 Y
  53.           O( t! v: `! r& |
  54.         OLED_Refresh();  //更新显存到OLED        4 a  r  m2 g: r' P0 Y1 ^& V' j
  55.         while(1)
    * j, z2 X9 g  k' C) g, w
  56.         {       
    - B( {: `& S0 \
  57.                 if(INT_MARK)  //按键按下,发生中断
    . w  r6 _( Z/ w! Q8 X8 u2 C; c, i
  58.                 {' x& y' i" t/ w7 p0 O, [( @" H0 d- V8 R
  59.                         if(modifyFlag==false) //中断标志位为1表示有按键中断7 a  l, R8 g: [: v# ?0 N& L1 n
  60.                         {
    1 Q6 B2 j, a' F/ J( w8 I, E
  61.                                 INT_MARK=0;     //标志位清0! H% ?, R8 p5 h; h1 |; u- j( N; {
  62.                                 OLED_ShowString(0,16,(u8*)"input:",16);: c* a, a9 T" {3 p
  63.                                 inputPwdFun();  //输入密码并显示
    & y, r& Z7 i& c$ l: K: A* C5 H
  64.                                 jugePwdFun();    //判断输入的密码
    ! f4 j* o: c2 y* L3 t
  65.                         }  |$ L/ z, V) R

  66. , Q) n. V* t! S) E/ C1 Z
  67.                         else if(modifyFlag==true)
    % g# ~# U1 u: q
  68.                         {
    ; ]( [: x& U* ^7 K: b
  69.                                 modifyPwdFun();                  //修改密码
    4 v0 g6 y* @! O. h1 s, ?, K
  70.                         }
    2 D# h, D" |3 ~# q- c
  71.                 }
      D* E. o  p2 X9 J8 |
  72.                 //delay_ms(1000); //延时会影响键盘的输入       
    / l- s+ j6 j8 o% c( w
  73.         }
    / ~( k4 m% E5 r* v% b& l
  74. }# _. ]# M$ n' u" p
复制代码

3 n7 {0 E0 B0 \* D# ]$ _最后:8 R' R0 j/ o  N6 }
下载操作:2 J- K$ y7 ~8 s6 s
6 }$ n2 n4 s! s* g+ x9 G7 p
5c3a05c4a8994abfa7d697da42696970.png 5 H3 J. Y" k9 y" u

$ U4 E5 d' t0 Q, u' t# k————————————————
* m" |+ d0 w3 ^版权声明:⁽⁽ଘ晴空万里ଓ⁾⁾+ o! i: n; Q: B7 g4 H- {
; p, ?& q, s/ O- R! L9 H5 _& P; l- W5 x

. I; W. z  b7 _7 J2 W+ L' W
收藏 评论0 发布时间:2022-12-28 16:00

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版