|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
STC12单片机门禁系统源码
9 y; b6 v, u" D2 G7 P' U; }3 o: O5 p, m/ I
% L" K0 l, c9 U# m7 t
源程序:
* I+ v$ h8 Y7 u9 M#include "common.h"
( K. [, o. x }9 T2 `5 W& K. @! l/ ^
; f9 E! W/ @6 Q
#include "delay.h"* M" y, z: u- }" n- Z
#include "keyscan.h"
x2 Z6 u7 d! c) Z, i#include "at24c02.h"2 y7 f+ [) m8 U4 c6 z# S3 C
#include "lcd1602.h". |0 f( [9 J9 V4 R, R
#include "buzzer_relay.h"2 X5 N: o9 Z7 B: O
#include "timer.h"
# R' K' a8 P$ R, L#include "ds1302.h"
( P/ O. W; @! S% M6 K* t- {* B7 W, q5 U
' S+ M3 y% S2 T$ ]# c
#define STATE_INPUT 1" |; B; B7 h+ K: y- x/ d+ l
#define STATE_CHECK 2
7 v" I' m* u9 k, @0 D9 M3 f#define STATE_OPEN 38 l& X1 t$ @- K# l* j
#define STATE_SET 4) a0 B% h4 L! `9 V: J- M3 I7 Y T8 f
#define STATE_ERROR 5
$ H' b- O7 P6 \: [# ?) p: {8 X#define STATE_CHECK_OLD 6
8 m; Z; a" T" I% n* q2 L#define STATE_INPUT_NEW 77 c4 E7 w4 D; ^' G$ K ]
#define STATE_INPUT_NEW_AGAIN 8
) ?# U$ e8 J1 j, m# C1 W4 P#define STATE_CHECK_NEW 9
- t% ~6 t" F7 X7 J% w+ a2 \) _# D5 {$ }9 i' F4 k
, W! q) v5 ^- ]2 X3 E#define STATE_AUTO 1
1 j+ b, G% n3 Q: e6 A#define STATE_MANUAL 2$ s" o( Z; N* e {2 G
3 F- o5 z6 ]3 g L) j2 {6 {
: {8 }$ s8 I1 h; b6 [( d& Zsbit hongwai = P1^0;
/ R4 w- C0 Z) `5 R, \+ d6 R( O- V/ m
3 Q: f+ z, F/ U: [) Q
# S9 @( }" h Q( u8 j$ `
! \ X: U# p; O- e6 W
void init_all();) v1 {4 L0 V" r& f0 N3 k2 a
4 A: P# O9 L+ Q. d6 ]1 T# p. B I( h: |9 |; ^! V+ q. H
void auto_sys();
" x; Q4 l! ~+ Z' ? J/ Yvoid pro(); X5 r( o5 X: P" s, O
/ s+ j3 }0 s! w P
/ s' A; _" y; e$ k* O& R" O2 A
void state_input();
3 X" P% |+ h3 A" Cvoid state_check();, M5 s* r1 R* l+ L8 W
void state_open();
* @+ F- z0 a/ p1 N; y- yvoid state_set();
" i3 [% l- j0 }void state_error();
; _# t* }4 I' P, l( c1 ]void state_check_old();
4 K+ H! @! h1 L' ivoid state_input_new();1 j# p3 T3 ^ Y! F' m' G" p
void state_input_new_again();
}% k: r8 m: n1 u1 }; _2 \void state_check_new();7 `$ M5 T) Y% I
9 M6 c8 m/ J: d2 m- @8 L4 b* T. }7 K# Y6 i5 j: w
uint8 password[6];
w( u& \+ a) d5 B4 ^8 huint8 password_dis[] = "------";
0 R+ D5 a9 A5 k# b( }% r) fuint8 data_buf[] = "123456";+ z" ^3 q, T0 b0 Y6 M+ }* @8 W
uint8 time_dis_buf[] = "18:59:50";
/ y& }$ \5 i5 I1 u/ p* g* juint8 error_count = 0;
& E: l* p/ H% S# s0 \, j, }uint8 sec_flag = 0;, b/ o/ C, r- @. f& C2 @/ w: b w
uint8 relay_count = 0;0 _& u/ [* b7 ?8 s/ {1 h! `, `
bit close_flag = 0;
' w& I0 t0 K. B, e) f4 t* J* } M# l2 l, U6 d
* ^. m9 \* [* |* F/ [4 Muint8 state_pointer = 0;% c" u% ~6 k' E9 j% K! \
uint8 all_pointer = 0;
7 j9 j3 Y6 x7 d( {% n- `: b; U. E+ q/ C% }3 u
6 I8 y1 l( Q; ]
9 A/ l7 N- l1 I- y
F9 a: T$ z& J2 ?1 i& Ovoid main()
/ B. T* g9 }0 x7 f{
4 d' J9 `8 ^& C/ v1 i init_all();! t% c" R# X2 w5 m: t+ |0 {6 q
2 k5 w/ U' P! @ B. X
_, H- V, _. h3 v7 r8 D
while(1) x3 ^4 u9 _+ ]; Q7 O
{+ t5 T6 i. S2 g1 t/ q
DS1302BurstRead(time_buf);
1 }5 m: B) g" ^$ h- ^1 ? time_dis_buf[0] = time_buf[2]/10+'0';4 N5 F& v# | v- o, G3 m. |
time_dis_buf[1] = time_buf[2]%10+'0';
" h1 m& Y1 j& _; _' j time_dis_buf[3] = time_buf[1]/10+'0';
. t1 g n. K; h: s% ]# J1 r time_dis_buf[4] = time_buf[1]%10+'0';1 V" e# e# q+ `. S
time_dis_buf[6] = time_buf[0]/10+'0';
3 i' z' S8 a0 `- a time_dis_buf[7] = time_buf[0]%10+'0';: B4 A `/ P( M
# T9 E9 _) }% p$ {/ \3 | switch(all_pointer)
. L4 w6 k4 x& o. y1 \ {
3 d7 I, M; y( o6 n5 A case STATE_AUTO : auto_sys(); / X; f4 ?6 ?" F* J. V+ ~$ D
break;5 C: n2 ]# D2 h. P# A2 w
case STATE_MANUAL : pro();
, _/ C3 U) W9 m% x' d break;$ ~5 @" z# T5 f% g4 Y: |
default: break;& R0 h( A' n/ A6 P5 i
}
& N) E3 k; H. y: d( b }& o2 t& I G1 F& s; M6 |- @8 L
}
; l0 Y) c/ @4 A% {1 {
/ s- x9 l3 _6 o; j" }) P; ^2 W d/ V5 s
void init_all()
# o/ [7 j+ U5 S' L" v$ B, m{
8 I6 [# N. b* D buzzer_off();
P9 e# \; v* ~- A5 N+ T relay_off();
" ^9 g) t) b1 P3 y y5 u! H Timer0Init();
" z; q' q% b5 @# D0 Z) E: a LCD1602_init();4 W; U7 y9 Q$ ~3 g* l
DS1302_Init();; s3 k) O7 r; b4 R9 d
DS1302BurstRead(time_buf);
' p8 ]0 s1 g9 j$ v6 R DS1302BurstRead(time_buf);% z: v, g3 o6 S& o1 x( }- }0 s
" ~$ T2 i# I" z3 W% @) e* E
// at24c02_write(0x00,password[0]);- x8 ? @4 q8 Z) N+ A
// at24c02_write(0x01,password[1]);
{+ b7 R* y$ M5 {+ X9 |; K7 }. B// at24c02_write(0x02,password[2]);
9 y" `" \" u& C* |// at24c02_write(0x03,password[3]);$ ^5 E9 E4 G. A; {1 S
// at24c02_write(0x04,password[4]);( c( x" a4 t! S; ?, X2 I
// at24c02_write(0x05,password[5]);$ E/ O; Q7 J* }" t/ Q4 w# P D
9 u, G% O4 t- i+ E
/ Z/ U; S- F- }: f; F9 B$ s2 [8 \ password[0] = at24c02_read(0x00);
' m R; A% D) X! n password[1] = at24c02_read(0x01);; l( k0 S) q+ P5 P) O
password[2] = at24c02_read(0x02);, n" E9 e" {) g* Y; V4 P
password[3] = at24c02_read(0x03);
; q, h; i7 E7 N% F9 a$ [ password[4] = at24c02_read(0x04);
$ D" r+ Q; M* l+ @8 D# d7 ?* @ password[5] = at24c02_read(0x05); D# d1 u% ]- N
0 Z4 u+ ~, r) \; _; f' h0 {0 Z delay_ms(5000);+ T$ N- |% D+ c6 |; Y
LCD1602_write(0x01, 0); //清除显示
$ W& s2 e5 K# E: m/ ~7 m: \
) z3 ?" n& U0 v+ W0 l
, F/ J+ i! i3 j S# w all_pointer = STATE_AUTO;8 X' ] U- t% M4 @9 A: P6 Y5 `$ C& d
state_pointer = STATE_INPUT;# v: L4 k& L6 z: T9 P9 Y$ } Q! b
}$ Q4 [ I# C1 d7 H: {* o6 G6 I
9 K6 i& @4 Y/ E& _8 x' a2 k! Q" f# z
void auto_sys()
; s' o- ?. q; `& E0 E5 t7 }+ k{7 Q+ F, r% E" V$ N4 {$ w4 Y
if(hongwai == 1): w" |3 N) z; ]5 t
{. i$ w) E4 V4 ~; f& V
relay_on(); ! K$ W2 y7 }: V0 [
LCD1602_WriteString(0x80+0x40+5,"Please");* a; W0 z0 f$ O0 o
LCD1602_WriteString(0x84,time_dis_buf);# M5 ?7 ^& x0 Z, r
}, C+ n% G$ ]- J7 H9 t) C+ a: ^
if(hongwai == 0)! H. U/ a: |0 H! `1 h
{
9 M. ~6 W: z! R3 V relay_off();1 W& E% K/ V P
LCD1602_WriteString(0x84,time_dis_buf); 9 v: j6 w1 I! }& S& \
}
3 i6 [( _8 Z% J0 m if(( (time_buf[2] >= 0)&&(time_buf[2] < 7) ) ||( (time_buf[2] >= 19)&&(time_buf[2] <= 23) ) )& ~5 k3 G1 n7 N4 W
{
, \6 `& q1 J8 l K relay_off();
s: \) M3 R, ]2 v* L: z, ^3 V% { LCD1602_write(0x01, 0); //清除显示
( {( d& o1 D" i8 G. l4 R LCD1602_WriteString(0x80,"Please input:");, o4 n7 C/ T H" m: d
all_pointer = STATE_MANUAL;# k; [; y) l" Q* j: w
}2 U% p( k: n7 w, M& Q4 J7 g" ^
4 w( L. w M# u: ^! @1 l' x# m' X} l/ c r- H+ _) w4 e
( u; l8 }" a7 ?( Q# w* l
$ i" A8 V' F2 F
void pro()4 A: l p- j) h+ Y1 U: p
{
1 C5 F8 } i- M$ ^5 k9 u key_read();
/ }+ v9 e: l' X% S switch(state_pointer)
9 k! z* Q+ h! F, H, A {/ [. E8 ~& c7 Q" u
case STATE_INPUT: state_input(); break;: H6 ~$ H s1 n* x; A
case STATE_CHECK: state_check(); break;7 S9 Y# Y; z; l$ i9 Q+ b
case STATE_OPEN: state_open(); break;
5 m+ \5 o7 P0 ]4 ^/ h; ] case STATE_SET: state_set(); break;! H3 m% s. Q* B/ J1 p3 g
case STATE_ERROR: state_error(); break;' e, I( r5 ^& E/ _: W# R) Z+ L
case STATE_CHECK_OLD: state_check_old( ); break;! O' k5 Z$ t7 ~ k) d" M5 f: p
case STATE_INPUT_NEW: state_input_new( ); break;
$ l& S }" o8 M) _. B' I case STATE_INPUT_NEW_AGAIN: state_input_new_again(); break;3 N/ ~9 L$ w! t* @" O4 d0 e! L3 ]
case STATE_CHECK_NEW: state_check_new(); break;
8 Z" \4 c$ r4 U3 C V9 A default:break;
4 W5 m4 M! B1 n/ U* b T- k }
3 e4 u# m& G% v7 P
; a U* |' P* K5 u% s if( (time_buf[2] >= 7)&&(time_buf[2] < 19) ), s: e" f! O" }& o: U+ L
{
- b) n3 f0 p5 t1 Y LCD1602_write(0x01, 0); //清除显示
9 I0 W: `% b7 i/ ?8 T2 v2 e all_pointer = STATE_AUTO; F9 ?. P& R- Q# |6 o# O) b4 I
} f) ~: ^ G9 ^ w( @) Z
}& ?" y7 p& {) `* n& U
^( f3 P3 H9 [! D. \1 M
0 k8 \6 |6 f2 R9 j% Svoid state_input()9 q" @; Q8 M! A3 M8 L% i+ H
{
) E7 n" a: @& g+ Y7 @ LCD1602_WriteString(0x80+0x40,password_dis);) m3 x5 Z# {# s T2 u
if(key_use < 10)
2 F# ?8 z. Y& p {/ n/ ?4 K8 s4 t" ]# d8 F
if(key_count > 7)% g, B1 e) W3 E# d# G9 `6 Y
{
" M# I! G8 _: Q1 _: v key_count = 0;
7 N( t3 x, _( U: T# x3 E state_pointer = STATE_CHECK;
, x5 J7 o5 Y% J) N7 q8 k8 T& d }
( \% O) P8 Z; w7 z+ [4 z switch(key_count)
0 ~4 J) E% g' s: B {
* ^) @9 }% S6 r) O8 U case 1: password_dis[0] = key_use+'0';
7 C7 S4 ]1 ?6 N break;1 D; p( I" N+ V2 o5 p/ D7 @
case 2: password_dis[1] = key_use+'0';
5 j f0 N+ P0 z* r break;5 _) f- |& m9 s$ p
case 3: password_dis[2] = key_use+'0'; 3 I* v' u0 b% N8 x
break;4 ]6 d, u9 t3 D$ B% f
case 4: password_dis[3] = key_use+'0';
+ D$ ~2 Q. l. t0 J break;
1 y6 d5 I9 h* P) \ case 5: password_dis[4] = key_use+'0';
4 _% }, P5 N( G" B break;- C! i# ?' E5 N `4 a z
case 6: password_dis[5] = key_use+'0'; ( u, H7 d3 s% T& f& }* V' Y) W
state_pointer = STATE_CHECK;
% j; q% Y" h2 s- l2 p break;. f. Z& }+ {3 k2 o6 I; U/ W; U
default:break;; l1 w+ {, d: s& v
}
/ W! B; a: ?8 k& _# Z, i4 F9 A6 b z* @: s }& Y9 t1 }# f( l$ K. k4 G
if(Exit_flag == 1)" x8 e2 t& h% U2 ~/ b" ?
{
/ e2 y- @" q0 S: |' E0 G Exit_flag = 0;0 ?4 h5 s x4 S4 [+ ^/ d
password_dis[0] = '-'; password_dis[1] = '-'; password_dis[2] = '-';7 r# r6 v/ Q$ g
password_dis[3] = '-'; password_dis[4] = '-'; password_dis[5] = '-';
- r. `* T6 T" u3 Y0 E' ~8 T key_count = 0;9 z [+ T3 j4 U% p+ n
}$ R4 S, I3 d' C) [: R2 W
if(key_use == 11) //复位
& H( A7 ^7 O& Y# v- X {
- H4 P( O& [3 o) H2 C password[0] = '1'; password[1] = '2'; password[2] = '3';1 ]' v' O0 [. j( {( R, T
password[3] = '4'; password[4] = '5'; password[5] = '6';' y8 o8 I1 }9 e
password_dis[0] = '-'; password_dis[1] = '-'; password_dis[2] = '-';
# Z% o1 @7 I, _1 h0 n0 \ password_dis[3] = '-'; password_dis[4] = '-'; password_dis[5] = '-';
( |3 F' Y7 j. G# x3 E2 D# v& w3 P) w1 j& X
) o( f+ z% r* c* b& j8 g at24c02_write(0x00,password[0]); a4 T- F; P; X
at24c02_write(0x01,password[1]);
! F7 W/ e0 P% h) R$ q8 [ at24c02_write(0x02,password[2]);
1 z! k8 A* F5 x3 d7 \ at24c02_write(0x03,password[3]);1 n( D, a2 {! l+ U' C
at24c02_write(0x04,password[4]);
6 x( n' k- s9 s at24c02_write(0x05,password[5]);
; f3 L$ p! h! Y. n
9 k8 E; N$ L6 ~
7 L/ U8 ]. k C6 W, @6 K3 N* g, z key_count = 0;2 F' F* P& W& T6 _, ]4 o2 F
state_pointer = STATE_INPUT;7 z, g- v4 |+ ^0 G3 E- |2 g
}% x; i9 e1 D+ k# j
if( (key_use == 13) && (key_count == 0) ) //设置% e: w _9 g4 B, L* ?: K; x
{% V- n7 e6 O+ d- }1 ~3 i5 C4 ]
key_use = 55;: X3 C- \ [& H+ O# d0 X1 r! v, ~
state_pointer = STATE_SET;
, ~) ]/ J& z# k% o LCD1602_write(0x01, 0); //清除显示0 w, ^3 S2 B# k! K
LCD1602_WriteString(0x80,"Please input old");* Z) P7 M$ i' c3 i! C1 f6 Y' j
}! c' L$ t# ?% k& a
}
! R/ F; h- I) P; r: z$ b+ f5 a! M2 r4 ^; N; Q6 B2 T
5 j! C# l* p2 f$ L9 W8 l3 ovoid state_check()
" z# H$ `# X" o; C3 p$ S$ t! y{6 e" }% o) \4 N2 u5 Z' m
key_count = 0;$ U& k4 p: |3 z( W- I
if(Exit_flag == 1)
; @7 @9 Y+ O5 I& O8 i2 V( N {# ~$ o7 C( x' A/ l% s
Exit_flag = 0;
* I' T9 U5 O% ^ d+ N password_dis[0] = '-'; password_dis[1] = '-'; password_dis[2] = '-';. Q9 ^2 S, x' ]$ U5 i; c# W
password_dis[3] = '-'; password_dis[4] = '-'; password_dis[5] = '-';
2 Y' `# _8 _/ u; L3 ~, e) x: l key_count = 0;
( k. X3 }) Z& h7 Y4 J state_pointer = STATE_INPUT;% D/ v; V5 a7 F& r5 b
}
; M2 ?3 E8 G! Z( t" c LCD1602_WriteString(0x80+0x40,password_dis);
* o' `; C/ F+ j3 ^' D' \8 x! ] if(key_use == 10) //OK
- D6 V) x" g3 N6 u/ M( o+ I { |5 y( Z Q! z4 e' e/ H
key_use = 55;8 G, r% O% \0 r& q/ Q6 W
if( (password_dis[0] == password[0])&&(password_dis[1] == password[1])&&(password_dis[2] == password[2])&&+ f8 {* p! G/ ~7 i
(password_dis[3] == password[3])&&(password_dis[4] == password[4])&&(password_dis[5] == password[5]) )' `: H' }1 p6 S
{
, e; ]8 C) B4 F$ A" ^& A+ X! I7 _6 ~ LCD1602_write(0x01, 0); //清除显示2 y: V1 \, i3 A- u9 M
state_pointer = STATE_OPEN;
1 S+ z* _: z$ }) @) }- { sec_flag = 0;( Y$ q V V9 m& x. f, i
}9 b. x( J- T3 q" `; [+ T# d
else if( (password_dis[0] != password[0])||(password_dis[1] != password[1])||(password_dis[2] != password[2])||
% p+ A/ ^1 d) H/ X9 V0 ^ (password_dis[3] != password[3])||(password_dis[4] != password[4])||(password_dis[5] != password[5]) )' ]* s0 s% {7 F' u9 Q, W
{# z- w$ B& W6 w& k! j/ }
password_dis[0] = '-'; password_dis[1] = '-'; password_dis[2] = '-';5 W1 W* M( K! O k: b
password_dis[3] = '-'; password_dis[4] = '-'; password_dis[5] = '-';5 H' c4 x- m1 V9 H2 w2 ?4 |
1 n5 |3 J( l" r0 l* A2 p. I+ E2 U( u
error_count++;2 B$ [( a/ j3 x8 N b
( C/ ]6 ]' C4 |! P
: x2 O# V) t6 @- { if(error_count <= 2); u A7 y. T3 I; w# |
{
. t4 r) H6 T" H8 f& T state_pointer = STATE_INPUT;
9 L' r6 j3 }1 g! T* b$ p% i }( y( N# U+ V' R
if(error_count >= 3)9 Y) `; [) s! [ a' O4 L8 m* T6 }
{
& p: l1 Z1 t F) [# ` v error_count = 0;& H+ \; u7 k7 u5 h: ~8 W3 o
LCD1602_write(0x01, 0); //清除显示
& g% m+ N: h0 g" M) Y" F/ u# P state_pointer = STATE_ERROR;$ b* G* l/ m# g/ H# L
}
) o; W: E# F, R" L; T+ _ }" z( w; N; d- k) ^; X# G
}
2 F4 J* K4 y# K! S3 m& ]9 W}$ F! a* u. O. E5 y# t6 g0 J
}6 e1 M/ A P
, P8 U$ ]3 O O) \9 \- F
void state_open()! b0 S: y, O+ {
{
' U/ _3 g* a4 Z7 X4 R key_count = 0;' E9 Q" v* x$ \. v C1 p7 p
Exit_flag = 0;; J6 l$ _. p: b" s
if(close_flag == 1)
8 p7 z: S2 t! C+ i# _, Y5 Q {
+ M/ Y1 z; x. A4 r close_flag = 0;% m3 g- [- ]4 r- [
relay_off();
! m0 y/ [- x' g7 l# Z- b; f password_dis[0] = '-'; password_dis[1] = '-'; password_dis[2] = '-';
- e7 d- x( N, e" W' q password_dis[3] = '-'; password_dis[4] = '-'; password_dis[5] = '-';5 C" r% H: A* C
LCD1602_write(0x01, 0); //清除显示* t, r' X1 m) t
LCD1602_WriteString(0x80,"Please input:");
' |! t) A4 l5 a% T% b }& D) p key_count = 0;
& Z" m: O4 x5 P& S9 F9 r state_pointer = STATE_INPUT;% ]. G+ W+ }4 f/ W& t3 q7 q0 {* E
}
/ y; y: {% w D" a2 Z3 ]6 J else if(close_flag == 0)9 R4 X: I0 a) d: d, m6 P+ @
{0 q. Y8 T% O* n- P/ v
relay_on();- z% ^6 A# ?6 J9 E6 X Q0 o _
LCD1602_WriteString(0x84,"Welcome!");
- M% m, x/ w8 t% _: t+ D6 C4 J1 t LCD1602_WriteString(0x81+0x40+4,"Please");
8 |' I% M) n' `7 u3 [ }
) C- N* o |2 a, D) l$ N}1 w: b0 N# g; z y9 z
: {2 t' O/ u1 _1 G2 _& h# `+ }4 m! ^
void state_set()
) w p* e: N* `+ G. v{
2 a6 x2 q9 K3 ^0 G if(key_use < 10), O2 x- r6 a1 @- ]
{, N! w d- u* ]' b0 S, [
if(key_count > 7)
# E/ c% M: G, U l% u, N/ g( p {
$ }" A, Q" n1 y: [ key_count = 0;& {' K9 z% R0 r2 y+ N+ d# G
state_pointer = STATE_CHECK_OLD;
/ T" ^/ X) h6 t( E/ w }
8 J9 S* }! t, h% x switch(key_count)
+ Y1 p# b& [5 F2 \, J9 v3 ~; j# f {
w) ^5 }# M" q* a# l% l, i// case 0: password_dis[0] = key_use+'0'; break;
: L; [; X* Y9 s7 H' \7 Q case 1: password_dis[0] = key_use+'0'; break;$ U+ @+ i7 I3 R9 r9 T! a
case 2: password_dis[1] = key_use+'0'; break;
8 K$ w2 x6 f% N: o: P% [' d8 k0 N case 3: password_dis[2] = key_use+'0'; break;
" p/ Y4 p) g8 ^5 A- G# t case 4: password_dis[3] = key_use+'0'; break;
9 q5 C8 m: S7 N+ A/ m9 U' _* n2 a case 5: password_dis[4] = key_use+'0'; break;
3 X# i; S1 a. @- Z case 6: password_dis[5] = key_use+'0';
+ k9 h$ _9 p5 q8 x( Z H key_count = 0;
( O$ ^# f5 K' o1 a% Q5 ^ state_pointer = STATE_CHECK_OLD;: |7 l" z0 W# C. ~. f' w. I
break;5 p/ {0 F% s2 a/ q
default:break;& n2 B$ u" O" X* {) w, C
}% D2 X8 b0 l1 Q7 @. x1 n
}0 }* S7 U) m; |8 B( X9 S' I( j
if(Exit_flag == 1)
8 ?+ ]8 t% F Q5 h) g5 ~9 g! k( v' N {. C& K& _+ n7 Y8 ~
Exit_flag = 0;
; W% u8 ]5 I# W' w password_dis[0] = '-'; password_dis[1] = '-'; password_dis[2] = '-';5 Y% N0 ]: y+ X4 u: h
password_dis[3] = '-'; password_dis[4] = '-'; password_dis[5] = '-';8 _6 V e) J9 |8 a) R, x4 ^# c! u
key_count = 0;. o! `3 i4 c8 O$ S4 P/ U5 M# ^
}
, i8 d, p9 K* t' s4 `( B LCD1602_WriteString(0x80+0x40,password_dis);/ q8 a1 [$ J! b% e2 s8 l& t& b
}
7 c! L$ s: c) [ 8 }/ o- G! G% x+ K" b
void state_error()
9 c* D! y( K0 A% ^2 f8 H{) \; e# F9 ^+ \0 j. Z$ K
Exit_flag = 0;
; ]" P9 ?& O: h2 ~3 B7 N if(close_flag == 1)
% r; {2 ]; Q8 e+ h7 @7 ?. B( Y {
$ K w' z% q2 x6 A5 B close_flag = 0;
: I& X7 a; @6 [4 W buzzer_off();
; N4 m8 U* ^. }! o. b! M! j password_dis[0] = '-'; password_dis[1] = '-'; password_dis[2] = '-';
5 P; q2 I' t& r" d3 a& N password_dis[3] = '-'; password_dis[4] = '-'; password_dis[5] = '-';, [3 M8 F' L8 _9 @ _* X% e# S
LCD1602_write(0x01, 0); //清除显示
3 @" |+ X [7 A8 z LCD1602_WriteString(0x80,"Please input:");
, u ]- G5 g ? state_pointer = STATE_INPUT;
; ]: q$ `: h- R; ?# [5 G6 I( S: I( L+ y }+ {/ K, b: _( r% k# t8 k
else if(close_flag == 0)
5 h; h$ H: P" O5 @! b7 I, P {- Y. g6 Q( O3 @3 q, _; U9 n3 K$ n
buzzer_on();
" \3 o- x# b4 `/ C& W. |9 q, \9 w LCD1602_WriteString(0x85,"Error!");6 w' Z* K8 F. U a# k* I- X
}
' t' V! O$ c1 P6 g+ u: s}5 J" T: }- M# ^) A
$ P7 f& k( E- ?4 y: r1 R" X
9 ]2 C: G- A( }6 F# O, Svoid state_check_old()
& Z+ L" U: T9 F' a: s" z# M{& B ^& ^( Q4 g4 v+ a
key_count = 0;
y! `6 @: l1 _ [ if(Exit_flag == 1)
D l; c# ^# C {# F% p. P+ Z( F) S, \
Exit_flag = 0;
0 N% ]+ |$ v0 f" d) q) K9 r4 a( u& H- W password_dis[0] = '-'; password_dis[1] = '-'; password_dis[2] = '-';& e4 ^* G; l9 i3 w" Y- C1 Y
password_dis[3] = '-'; password_dis[4] = '-'; password_dis[5] = '-';6 S7 J% L4 W: s. `- H8 T+ T
key_count = 0;( |7 {) Q/ _% ^2 t0 V1 W5 _ E, x
state_pointer = STATE_SET;
+ p- Q" @- C/ ]4 s% X- R7 f }
* q' u+ ^0 i; ]+ U* P* _& @* i if(key_use == 10) //OK" N3 p5 s* z* M) {. Z8 d. z
{( I/ S" H+ K& |. {/ m
key_use = 55;
1 D+ A7 D7 M: a* {5 s* D/ g2 v4 b7 L/ ? if( (password_dis[0] == password[0])&&(password_dis[1] == password[1])&&(password_dis[2] == password[2])&&
8 m: ?7 U' A- i& V2 b1 A# D (password_dis[3] == password[3])&&(password_dis[4] == password[4])&&(password_dis[5] == password[5]) )
* _5 N7 u. T0 T" A# r {
& U8 t) Y) j% @ Z A ? password_dis[0] = '-'; password_dis[1] = '-'; password_dis[2] = '-';+ m5 y2 G3 c3 o8 `) c
password_dis[3] = '-'; password_dis[4] = '-'; password_dis[5] = '-';
3 @$ Z; D$ F) U0 R% t, @8 o7 w LCD1602_write(0x01, 0); //清除显示% ^$ S! Q$ p; {5 g7 A' [9 Z: B
LCD1602_WriteString(0x80,"Please input new");% }7 T( K, P" M
state_pointer = STATE_INPUT_NEW;, B# E$ O/ g8 S2 X/ N/ `+ N
}
M* `4 L( t* R else if( (password_dis[0] != password[0])||(password_dis[1] != password[1])||(password_dis[2] != password[2])||" O" G) ]' I, ^3 T5 d
(password_dis[3] != password[3])||(password_dis[4] != password[4])||(password_dis[5] != password[5]) )2 R4 i, X" h5 c- l0 |' B5 N; }
{
. e$ C5 C! s( m password_dis[0] = '-'; password_dis[1] = '-'; password_dis[2] = '-';
- Z V* i: Q* H' P$ d password_dis[3] = '-'; password_dis[4] = '-'; password_dis[5] = '-';
) H& ?/ p3 {3 E. ? 0 b3 l1 m# k9 q
state_pointer = STATE_SET;
3 O' ]2 A- b( ]$ }, q: j! b }, q2 ?9 \' x- h: t
}
# E6 n2 s/ ?( p+ | {& {7 w}
+ M! C/ t& p6 W9 r
9 Y3 z+ E! F9 @; M' i# u% l$ C) j: I4 T0 `" y* j9 ]- @
void state_input_new()9 d/ E* P" n! X/ L4 x: o1 e- Z% y
{ - b, y6 A% D( Q' ?( s3 Z% S
LCD1602_WriteString(0x80+0x40,password_dis);
6 A( |5 L- k; }. i, B P/ { if(key_use < 10); a: b7 x: h0 m" \: J" c4 A: F8 I
{5 w$ b* h4 d0 k# c5 W& d! \
switch(key_count)
- T8 w5 m1 b; b% K# s {# V4 j& ]- ]; s4 g
// case 0: password_dis[0] = key_use+'0'; break;/ m {' P0 p9 c# L" J* Z9 S
case 1: password_dis[0] = key_use+'0'; break;* z8 }: \, G' z7 {
case 2: password_dis[1] = key_use+'0'; break;
, I2 R$ T! G- N2 J6 e: R case 3: password_dis[2] = key_use+'0'; break;
1 }0 y/ u% N$ a+ _- D; I$ t case 4: password_dis[3] = key_use+'0'; break;# i. \$ t# P& h: U' J
case 5: password_dis[4] = key_use+'0'; break;
/ l( S& ?1 m( E2 s, s case 6: password_dis[5] = key_use+'0'; " X0 z8 \0 g: f; N
key_count = 0;% G5 Q* q6 v, {! \3 O! U! A
data_buf[0] = password_dis[0]; data_buf[1] = password_dis[1]; data_buf[2] = password_dis[2];; u; k. L2 A$ b# U# R# ?
data_buf[3] = password_dis[3]; data_buf[4] = password_dis[4]; data_buf[5] = password_dis[5];- F3 P5 A6 o1 d2 O6 x8 ]: J; H
password_dis[0] = '-'; password_dis[1] = '-'; password_dis[2] = '-';: `, P9 n, Q- K0 t5 s
password_dis[3] = '-'; password_dis[4] = '-'; password_dis[5] = '-';* r3 j+ O/ J( [& \! y
LCD1602_write(0x01, 0); //清除显示
5 {, ]( i; f' b* _9 A, g7 U LCD1602_WriteString(0x80,"Pleaset again:");
( e, a# h* S3 B/ g. R/ q state_pointer = STATE_INPUT_NEW_AGAIN;
- m+ z4 ~! s/ L3 e4 j break;& D. L6 y5 C+ n7 Q- J5 m8 y4 b, @
default:break;3 K9 z7 U! n2 |3 l; `
}
- L; o; }' Y% [ }
6 u2 y4 h) b2 a3 U* X6 ^ if(Exit_flag == 1)5 q) j- q8 K' ~2 I
{; D1 c9 K& }; w) J$ u5 S3 W
Exit_flag = 0;
/ e& e% w& E6 R2 K2 h; W password_dis[0] = '-'; password_dis[1] = '-'; password_dis[2] = '-';+ s K& V. L7 g* a' R; A( m
password_dis[3] = '-'; password_dis[4] = '-'; password_dis[5] = '-';( ?# n* [% z6 T! C: N. U
key_count = 0;
- X# x) r4 `/ h. { }' ~2 i2 X: k' Q$ d# w
}
$ @0 \' Q* _ V& @
6 P E" [# A# W% A {) Q8 C7 @7 G
# N6 w4 f+ I: ~: A/ N9 y7 q hvoid state_input_new_again()
- {4 W& h+ c( s3 B( c8 C+ G{
{! S3 @+ q& _, D# A$ C LCD1602_WriteString(0x80+0x40,password_dis);; J7 |4 y) x2 x
if(key_use < 10)0 f# u2 N" k$ N8 @
{; O" B! z: j; Q% u* \$ e/ W H
switch(key_count)0 {+ j' @6 c7 j2 ^
{
0 I" X" u9 m/ E# C8 | case 1: password_dis[0] = key_use+'0'; break;
! C( N% i! ~, Q# M; Y case 2: password_dis[1] = key_use+'0'; break;
2 w% b5 k# f5 h6 Q3 x case 3: password_dis[2] = key_use+'0'; break;
( T- z7 l. @9 {" U0 n/ H case 4: password_dis[3] = key_use+'0'; break;
# Q) F5 O5 u% e# C case 5: password_dis[4] = key_use+'0'; break;
3 b. A9 T! R3 X. y, w case 6: password_dis[5] = key_use+'0';
8 C" Q o, Q) I/ e* y0 n" g! p1 P key_count = 0; ?: @* @7 g$ L* e6 Z4 x
state_pointer = STATE_CHECK_NEW;0 ~" G* h8 m1 l4 t1 o) m& d) Y
break;6 d- i0 `0 k' V) u
default:break;
/ k! |& \6 F, R( r }
+ E0 z6 K0 R, L% X; m }
7 `; t' V6 ]$ C2 U if(Exit_flag == 1)
5 N, P% P, X( U1 P3 X9 z {7 H% Z( R' l: }- u
Exit_flag = 0;
/ l/ c8 }5 V9 d8 X6 }" d password_dis[0] = '-'; password_dis[1] = '-'; password_dis[2] = '-';
, r! a9 m. U- o8 _1 B( S( y password_dis[3] = '-'; password_dis[4] = '-'; password_dis[5] = '-';
6 O; V; u4 a+ W- b- d6 p' [ key_count = 0;
7 E/ h1 p" r$ } }
: p" h+ Y- t7 ^$ G; O/ t8 n' S9 e}9 J. Y# w: ~+ u5 P5 U
% ]/ |$ q# y( C
* J' W( T+ j8 c* {/ T, }! t8 T
void state_check_new()
) F2 ^. [ A' o6 ]' v{: d; Z' B- g. F
Exit_flag = 0;
1 K$ w8 X! Q1 B" e if( (password_dis[0] == data_buf[0])&&(password_dis[1] == data_buf[1])&&(password_dis[2] == data_buf[2])&&6 s9 {" }2 J$ k; G3 G9 Y
(password_dis[3] == data_buf[3])&&(password_dis[4] == data_buf[4])&&(password_dis[5] == data_buf[5]) )
& f8 H. D8 |6 q# [ {
h) G$ d/ j) K& R- s password[0] = password_dis[0]; password[1] = password_dis[1]; password[2] = password_dis[2];
8 p2 j1 w5 i) ]4 L7 ~8 b/ V! x0 r m2 } password[3] = password_dis[3]; password[4] = password_dis[4]; password[5] = password_dis[5]; & b* s$ c# a; q# s% ^ z" M
password_dis[0] = '-'; password_dis[1] = '-'; password_dis[2] = '-';9 b7 Z3 G% x" P
password_dis[3] = '-'; password_dis[4] = '-'; password_dis[5] = '-';4 V: B0 D; t; O9 f- |- \9 E
# W% _6 L( i! [. A, z1 @
, }% E X- _; [+ x
at24c02_write(0x00,password[0]);
8 U. N! {# U2 f8 ^ at24c02_write(0x01,password[1]);9 V4 R+ j( K. i, M2 I8 y9 U# l
at24c02_write(0x02,password[2]);
5 Q2 b* r8 ?( U, D6 Z+ r" r6 c) D at24c02_write(0x03,password[3]);
l: k; X; k3 d" Z at24c02_write(0x04,password[4]);, _2 g7 n5 Q4 i% d: R
at24c02_write(0x05,password[5]);+ g! [) i8 z" K# v% c4 u' |7 a2 }
0 k. j2 l* c- r9 U. U* T7 b1 c
; ]9 f2 u! W7 G( y, _0 m/ P+ l LCD1602_write(0x01, 0); //清除显示& c# T( v' c3 u/ a( o) J
LCD1602_WriteString(0x80,"Please input:");: \% Z9 k$ Q! J) j4 h, C# m) {
state_pointer = STATE_INPUT; // 设置完成0 x/ ^: `' t+ H7 H6 N7 Y
}4 X& H/ @& c$ m, w8 k+ z
else if( (password_dis[0] != password[0])||(password_dis[1] != password[1])||(password_dis[2] != password[2])||- S! `+ N( w, `! x8 |
(password_dis[3] != password[3])||(password_dis[4] != password[4])||(password_dis[5] != password[5]) )
& |' `. X4 }& x; J$ h1 B {3 B* e$ x$ c' p } L
password_dis[0] = '-'; password_dis[1] = '-'; password_dis[2] = '-';6 T& i8 f. c4 l# y( Y
password_dis[3] = '-'; password_dis[4] = '-'; password_dis[5] = '-'; s1 d$ ^3 y) d0 W) b9 q% O5 G- k
6 C, ]) Y9 @+ b4 d+ Z! ?. w4 j LCD1602_write(0x01, 0); //清除显示& w( W' G+ P& N" f" [
LCD1602_WriteString(0x80,"Please input:");
& {$ \ H T# d7 g& ^- j state_pointer = STATE_SET;
3 ]6 n6 Q4 @. T5 O9 ~9 [ _- @ }( X) J' T1 @% Q, A7 @
}
* U1 f, _. f: U2 C$ P( d
8 `$ `1 t9 H8 Q2 |0 n9 Q: c; a( ~4 L; }% i7 R
void timer0() interrupt 1
0 r% D/ S. |, p j& A4 }{# v2 y" a# Q* F$ p- v
TL0 = 0xE0; //设置定时初值
, z1 N& U4 n% ]- a TH0 = 0xB1; //设置定时初值
$ y1 C: z! ^. f8 V* u' t) _* V if( (state_pointer == STATE_OPEN)||(state_pointer == STATE_ERROR) )8 t: E' G2 \& T3 @4 C2 B4 O+ c4 Y
{
4 M0 q: V% i4 X) K sec_flag++;
8 z* I8 z/ a4 W+ k3 j if(sec_flag >= 50)2 m6 L1 F. z/ N' s/ l2 y
{2 k; r8 X5 z- V3 m8 f
sec_flag = 0;
2 i' X3 P4 A! G0 m* J relay_count++;
% i3 U6 T( F& g3 f0 P/ E if(relay_count >=3)
% z' J, D/ R% k& }# p2 g {
/ a9 u& E+ I0 l: m7 X relay_count = 0;
, v" @" s8 W$ C& f4 X$ U- E. ?% N5 z& U close_flag = 1;
, C- c _% E: t! B5 X/ E5 Q }1 F' E x) y& [9 n W* _" x* U( }" Q
}
$ A1 G* j4 T* M4 V1 X9 ~ } ) [, \8 f- ~/ v4 P: c e; v
}
% S* S8 H$ G- _2 I& U
$ w! [4 F& R! _2 {- _& @+ t! C0 [% Z" y$ N6 R5 S/ g# J3 B
( D: A4 h9 t6 T1 x* I B |
|