分享一期 RC522刷卡模块做的门禁系统(上面是视频呈现)
2 y. {, F. l6 j# w! U1 K功能文字说明(拓展空间非常大)
+ i- H( k0 j1 S
( s$ I) z8 g+ i+ ]5 C识别卡号以及卡类并显示
! h. B2 V0 H4 G+ O1 d: n$ J
# a' m* w1 q5 T刷管理卡 按下按键 提示刷卡录入(刷未录入的卡即可录入)
, a1 e2 c& o$ l) U& f! \! I, {' M' n4 }! V! U2 p% a/ x
刷用户卡 按下按键 提示刷卡录入(刷未录入的卡即可录入)
9 o$ G7 r, Y/ N) l$ q2 R- e: Q/ {! O4 V. A/ D2 `" g
再次刷卡 会显示卡号以及卡类& o! [1 }6 @3 m; }
8 g- w" j( Z6 G( ^: o
实际的项目中添加了舵机,语音播报模块,大家也可根据自己的需求任意修改5 ?: r1 p/ `7 D- p. j
2 H# ]( e% _& d" w本次演示所需硬件介绍0 S1 M6 t1 `( o; l2 p5 A4 I( F- @) R
8 |5 v* J& f8 ^. d; t3 C" ]! H$ n& n' N" v
F103C8T6最小系统% i- U' S' U2 [: \ C. O$ b; Z
5 u% Y. {9 N. j* y% [5 Q: Y
- S: \" k* l/ Q
, I3 ^4 E- _2 W! t$ W; I7 W' I' }4 g# N8 z" i2 u$ N
RC522刷卡模块
/ K7 S0 ~# ?& O6 d0 l2 j+ [5 ]& H接法$ r e4 u3 q& N( }) a" e
VCC接3.3V; @+ @# }. z4 A' q9 z# w
GND接GND+ S( y( A1 {, v% M. w) L
SDA,SCK,MOSI,MISO根据引脚配置连接9 s" O9 Y3 `7 M3 e/ A
RQ悬空(不用接)6 X4 Q; B% M+ w
RST接3.3V(波特率设置为9600); O- M9 l0 c) W+ R( R# o- V9 K8 m
- B0 x. T$ r3 q5 i6 Z9 V6 u
! G# V4 M% t8 {0 D& R" W. Q3 d: M, k8 }2 Z8 x! M
轻触按键
! q5 b+ J; L2 B& \$ _' C; y. f找一块以前测试的洞洞板, 随意焊接一个小按键,对脚用排针引出更方便连接(节省成本 向我学习)
0 q% @9 y' P& J/ {
1 v9 @5 u: T- z0 j7 [( a
* l5 [8 O8 W3 H( {* U6 h k2 y/ O0 |
* }& @% F6 z; e部分代码
' k; t, z1 [& A4 j1 R5 O( s" L) e! R6 M- #include "stm32f10x.h"
3 p" V1 o% c" d" D2 V1 o - #include "usart.h"( [4 m7 \# E$ O+ s; d
- #include "sys.h"
9 o1 Q6 ?3 b4 X. F l3 j A, s2 ^" Q - #include "oled.h"
. p6 a- U9 `3 {' r& J5 r! E9 A' z; S& c - #include "delay.h"2 D/ f% b: T9 p) {" z
- #include "rc522_function.h", V$ s/ w0 | Q H
- #include "rc522_config.h"! ?6 @: Y1 Z+ O+ i. R
- #include "timer.h"3 R; C+ [( b4 C- y/ G
- #include "read_card.h"
* H! N" X0 g, C - #include "rtc.h"
p$ x1 X( Y, Q3 U, O - #include "usmart.h"9 p |; u% ?3 o4 S
- #include "key.h"+ q" E. P" c4 U4 Y2 X- N
- #include "stmflash.h"4 ~- v2 X) z' K
- #include "MP3.h"
' x* N$ I4 E; j( R- n' ]; i - const u8 TEXT_Buffer[]={"STM32F103 FLASH TEST"};
7 f1 P0 l* Q: H$ S/ J; k8 I/ f - u8 USERResult;//IC卡匹配结果
0 t) n; I2 g/ U3 F0 p3 D - u8 Look_Start;//门禁状态
) _' \' E6 u% ^: y, M3 ]5 C - u8 Key_Value;//按键值: }5 s9 x4 ^, x3 b' Z
- extern u8 flag;
# M" k3 c3 l; n5 Z - extern int lu;7 \/ \' [& v }4 _
- extern int lz;
) S/ I+ w- i* Y - int main(void)( v9 c7 G& _4 r" n4 [
- {& ` O' i T# B3 ?6 _2 y2 E. V
- u8 datatemp[30];
) n8 b* s0 D1 n+ j* C - u8 sss,aaa;
: ^% F1 O( Z0 o - delay_init(); " N, G- j8 J6 J
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
$ y' @, O+ ?2 O0 S2 k* H3 Z - uart_init(9600);5 h: X: M: u" N) l7 d; v" `* u
- TIM3_PWM_Init(899,0);( |# I& R7 U- M9 I
- RC522_Init ();5 h1 Y% \3 E1 R1 H
- KEY_Init();
B+ ?) a% m/ O3 d' ?" k - usmart_dev.init(SystemCoreClock/1000000);
6 a+ C! ]3 W: v$ t( p [ - RTC_Init();
( |( ?" j# E8 G' h& h - PcdReset ();
" z k* e/ e! y( x/ h# _ - MP3_Init();/ G0 `# _% W: C2 }! z0 p: J
- M500PcdConfigISOType ( 'A' );//设置工作方式
/ ]. C1 R4 V$ T8 p - OLED_Init(); ' W2 W! x9 I: p8 E( ?6 }9 V3 H
- OLED_Clear();% \/ k& M& T% i/ B% S4 m
- delay_ms(100);
. C8 X" V$ r1 v4 W! `; J - while(1)2 D/ ^& E: R4 Q3 p/ i
- {1 H6 E I8 [7 C0 E9 V# z
- display_time(0,0,calendar.sec);//显示时间
# t* t. s& z; u6 i E - oledkaiji();# p1 ~! ^ F J
- delay_ms(100);
: _: C3 Y( `5 h7 ?% O% U - IC_test ();//IC卡检测,还需要修改
* |' y* p0 X1 U5 K2 Z" ^$ C7 G - Key_Value=KEY_Scan(0);
2 G$ s6 \$ s! `1 `- X6 \ - if((flag==0x01)&&(Key_Value==1))
; x, |$ ^. z8 _! t* v - {1 {& _( i( C3 |, C4 A% k
- OLED_Clear();# O' |7 W4 ^7 ~% G
- cunka();//显示 刷卡录入
4 n4 e: k4 P4 [! i - //舵机关闭! {6 e# G, H. a* m; u$ e
- delay_ms(1000);# `" X* a% N2 x' _; Z' e5 x& @0 y
- while(lu)
" `- x7 T7 N1 V2 y - { : h4 k7 ]: _3 B* O9 @2 p* p
- lurukahao();' e7 M' X5 [; m' D
- //duka();
& V0 d& k3 g. H c+ Y' g7 E - }; X, z& h5 g8 l) p% I% K
- flag=0; + a# `% S$ Y/ g9 {# h+ ?
- delay_ms(1000);2 e A- {9 g4 Q; g
- OLED_Clear();2 H0 Y1 |5 c+ Z+ }
- OLED_Clear();- b0 L5 {: p5 C+ i
- }5 ]. u- T$ I* j, c, a
- if((flag==2)&&(Key_Value==1))5 y; C) t7 S1 @8 {
- {
& P) @2 O' w/ s3 k - OLED_Clear();9 r8 i9 E% R3 m2 Y; i! e; f
- //cunka1();//显示 刷卡录入7 Z7 E9 K6 u# z6 u4 N0 B9 W; F
- //打印卡号,保存到flash
+ j# V+ N" O1 a! q - flag=0;
5 |# v' S% Y* L - delay_ms(1000);1 d) l( S w2 f9 X, t2 l% ]8 T u
- OLED_Clear();
7 U9 F. D, |" m: j/ |; m - OLED_Clear();
# S/ J- a; g/ B, a5 Y. S - }
3 O* A l; E: m ` - if((flag==1)&&(Key_Value==2))+ [* n$ m# G K: Q5 A
- {
% `' A; y% v6 A0 m% B - TIM_SetCompare3(TIM3,37000);! H" P7 B7 O3 `4 D# C
- flag=0;
R0 c. t7 n1 C5 F# @( n+ h - }7 J" _! P. b5 i* U
-
) Y$ b) W. @" w7 T - if((flag==2)&&(Key_Value==2))1 Z* f" a) F: ~. V
- {3 S. c0 q7 B2 Y1 n/ v4 Z
- //MP3_choose(3);//没有权限关门+ P9 O3 V# b- k2 j0 X- P5 D! r
- } 5 D \5 R$ |' V
- / T$ c! L$ A; l* H; K
- if(Key_Value==3)# {% l1 S# p! O6 V9 B' E
- {
# I1 O- k. U# I - OLED_Clear();
9 s3 b) F: `/ r, C+ s2 y* S# v - while(lz)
: }. _/ {0 `4 q4 |3 | - {
- k) S# k* l4 e) x4 K - - ?: I3 R2 j* A t+ I7 c+ H1 `/ m3 X
- //shanchukahao();6 n1 c) @$ c) [- X
- delay_ms(1000);: q4 | p* Z7 N" |$ l, l. O
- sk1();8 N- V4 _+ V1 R, T* Z% I
- OLED_Clear();
' H5 p {/ q, j4 ^- O; y! E! [3 V" o7 E - OLED_Clear();5 E) I0 D5 h/ T6 d
- //duka();* A' E9 [4 y6 k2 x5 O* i) p' T- O
- }2 g3 I" J ?( i
- //flag=0; ! I' J! |5 K1 V. Y- e) s4 U" k
- }
' e& D; |' L6 A' C - $ J3 D5 S+ a/ w" H
-
\; o" |$ t0 i- q( U0 U7 L - }7 D# h2 X- {% S
- ; N. f; h& a- z1 M7 Z; n+ z
- $ g5 {& `8 M7 D9 {% s
- ' K( n. W7 M' t! M
-
! p! N6 |8 C% t& k$ H+ R
$ [% [* \2 q( X* _( v4 }- }
+ R' |, J) {8 u" L3 Z
复制代码 + P! r$ \# e4 M0 ]8 J$ r
————————————————* d' `' s* i" j& H
版权声明:文某90 L$ m$ Y" |# e
如有侵权请联系删除
: Y- w+ Q. Z& m+ g, }, ]" B1 ?" p- j' {0 j7 ]/ Y3 x, ]( K
$ p$ N0 k! D/ V3 L
|