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