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