找回密码
 注册
关于网站域名变更的通知
查看: 677|回复: 3
打印 上一主题 下一主题

基于51单片机的红外遥控指纹电子密码锁程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-11-26 09:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
基于51单片机的红外遥控指纹电子密码锁程序
$ K, ?$ w9 h0 x- S& h9 |! s( F9 d1 Z/ ]# A# I- k& i

+ _0 _5 g. ]% i: q! w) w#include <reg52.h>
- ?+ J/ E9 Z- |+ f+ h, r#include <intrins.h>
) T) P( A0 L+ x& [7 w' x' \' n#include"24C0x.h"  e6 x  b+ R+ I+ w. d
#include"LCD12864.h"/ T' m* A9 p& w
#define uchar unsigned char
+ n1 j( R7 i% C- g. [1 x! @#define uint unsigned int
1 ~5 a! G( N7 @" ?! D: C* _3 E! [; M$ B2 @' d8 Z( Z
#define buffer1ID  0x01- w* p9 j) ~  ]# v5 }
#define buffer2ID  0x021 Z3 X' H5 D% u. E9 w- g) \3 W* j
#define queren  0x889 x/ b7 K8 [: @! L$ S! n
#define tuichu  0x86
8 u# ~4 E$ Q, ], L4 f#define shanchu 0x84
0 A$ A7 ]/ j4 c! M5 t2 J
) E6 T; b* U+ [+ k#define User 1                                    
/ l) `7 {/ \4 q5 a! ^+ h! ~. Z
; I$ ]) u8 f/ A& W8 m. ]' Z# \void fan();( a: v7 t4 T  }  N# I- \4 _

* Y3 t; |; {) c+ ^" d1 zsbit B0=B^0;
1 I) M% f3 E; ysbit B7=B^7;
, ?4 c- F- b$ `' |sbit k2=P3^7;
! W6 t7 G8 Q6 A9 s% l" z# Q- ~sbit jidianqi=P3^6;3 ~) u4 q( ?) k  E
sbit Feng=P2^0;8 \# M' f$ U% ~6 @- S6 X# e% P* y* V, {
! m# I) U6 m9 E5 @" X! B
extern unsigned char times[];( h# l" {, s4 F6 R
uchar  Member=1,sec;  d- |8 w* _- Q
uchar  ErrorCount;
8 }# \. L  W9 j, R8 a//////////////////////////红外相关/////////////////////////// A, Z: b" t, N9 A6 k( @( v5 s
//时间计算
! }! n- Q1 @) B#define Imax 14000    //此处为晶振为11.0592时的取值,
: }# h1 I# G3 W8 O+ M9 U#define Imin 8000    //如用其它频率的晶振时,- D  R& S0 e2 n0 P6 c& [
#define Inum1 1450    //要改变相应的取值。. h+ A  h  g" H5 a! N9 [- ^; Y
#define Inum2 7000
! p, j# d3 q7 ~' m: _#define Inum3 3000 ; h) o( A: ^, @& o7 J# r1 w3 J
//解码变量
0 b- B. g) G8 q% Y' _unsigned char Im[4]={0x00,0x00,0x00,0x00};3 i, l  ?3 Y1 m/ q; Y- y

# Z& N1 _5 E$ }6 P2 K, @' X, r//全局变量0 F& O, V1 f/ h9 m8 @- `; u
uchar f;
& x* V4 z5 n' j5 F' n) Vunsigned long m,Tc;& ^7 \' h; V7 C! H. R# S
unsigned char IrOK;# F' y/ h, S6 l  l3 i
//////////////////////////红外相关//////////////////////////5 y6 e8 X" n9 X$ ~6 B' E
uchar  code buffer[User][6]=# n- H6 |2 B- d: o  s% v' [
{
3 ], d" @/ w, V0 t3 p {"000000"}
: r. ]& R; h3 f/ c};
6 T! ?: N2 w+ z" m# _: w. V
0 @( O# q5 M) F8 Q; k8 w3 e0 g0 y6 T3 \
) y9 [! J7 ^7 t! ^. o, Wuchar dz[4];
! O- G* D% y, y7 G& H2 nuchar time[4];                        
6 }1 O5 }+ i2 x" K* kuchar mima[6];% i; h  P( ]2 q! `
uchar mimag[6];
( C( h6 A) |3 U$ L) Wuchar mimaID[6]={1,2,3,4,5,6};
+ w7 F/ Q  {. h( h; H' A3 f1 ~$ x6 l  _; Y- N6 S4 o

4 {6 |) F* Q* x3 {uchar Address1=20,tempx=20;
7 V- K+ `' W' @- m1 Guchar Address2=20;   
8 @) G* `- Z" k6 r# c+ r" h2 D
% u- j# U  K1 guchar data K;
* L- j. w7 m# |uchar data Key;- T. q# n: h+ g+ n3 s% K  G

- q1 h* r: ]+ q4 r% d% Duint PageID;" L" Q$ s6 S; z! b3 X" k( |
uchar data querenma=11;
& w; v' B7 `4 m% t6 \) d, f/ h1 quchar sum[2];% E. x6 K- W6 u, [  v
int summaf,summas;
3 s# I; i2 e4 Q0 J
5 y/ J% K, _9 B1 Auchar  xdata UserPassword[7]={0};//密码# ~7 g6 _. r; e8 h
uchar  xdata DSY_BUFFER[16] ={0};//缓存1 g1 Q! B: r$ _% K- i$ E
( |/ ^  n6 o% w7 ^2 K0 |7 e
7 k# V$ a9 r- Y0 p3 X- ]
void Red_Init(void);5 e$ q+ [9 x* `' l' h- N! P
#include "zhiwen.h"0 z( A8 F# }. s; S3 F* P& r
//检测脉冲宽度
8 d- N' |* H3 Nunsigned char check(void);
3 q4 _9 q7 a8 K0 R# ^# A
+ h9 _% L  U% {unsigned char redchange(unsigned char rednum);
! o+ X, D' t8 [, w
( N' U/ ?+ i# K, g
) S0 {0 a& F# w6 L8 A* h$ E) Y1 {void delayms(unsigned int z)
# e! G2 `7 B2 L9 H& s{) w0 u/ C: S; K( U" i' C9 N
        unsigned int x,y;
- G+ O5 n! y% t        for(x=z;x>0;x--)4 E% f5 d% M) S: {( j3 V
                for(y=110;y>0;y--);  ~7 [7 Y. @& K
}
9 N2 c2 ^$ K# J; _2 b
4 H$ _% n8 I9 |% y' r9 b/********************************************************************" f! W. a0 E& j6 }$ A( b: R3 \
* 名称 : Chack(uchar User_Number)) E' z; W2 {- {6 S, ^: z* m0 v. Q
* 功能 : 单一用户密码检测
, D: L  i" W5 B0 i( l) z* 输入 : User_Number' U, o9 @6 l' h- I7 S7 T
* 输出 : 密码正确与错误,错误返回0,正确返回14 Z$ |/ M# H, z7 K8 K( @+ T
********************************************************************/1 I- q& r/ o4 W# Q7 w1 i5 g) O# ]
uchar Chack(uchar User_Number)
' U! A4 ?: `- z0 R! W$ g{
  V6 _8 V! K/ ^; V        uchar flag, i,temp[6],Address;  S( c4 h$ }8 j
        Address=User_Number*10;9 Z" P& Z1 s" p2 W  l
        for(i=0;i<6;i++)
5 i5 A+ O, \8 I' i        {
: i( n4 Q0 V8 Y5 s                temp=x24c02_read(Address);( \3 o8 t3 C( Y" o- ?  p
                delayms(10);
, E8 j& Q6 J% j                Address++;
! ]% q0 F- Y7 |$ p6 |4 A# o6 u        }5 i) B8 {5 o! z) E
        for(i=0;i<6;i++)
+ O" w9 o/ o0 d4 R& U& H5 G        {
0 K/ m7 r5 S; I6 v" T2 z$ W                if(temp==UserPassword)7 e& ?. u/ z. b3 [: R* p5 S
                        flag=1;  j0 p' F% ^% W
                else         
- d  T- [/ I! H& Z% }; W& E                        flag=0;               
9 d6 F# O& V) I' L        }4 [% E) q1 o8 j! V3 X! K  c
                return flag;
: u$ _+ n+ K  R! I" h) U$ R/ B! T}& D* \; ~2 b; v% k

! q& Z. m2 s. x! {+ q! u' R/********************************************************************
7 y, D# j5 d6 z* ?* 名称 : PassWord_Chack()! O2 ]! r, g5 S
* 功能 : 所有用户密码检测, T1 Y4 f; ?. G* j7 p
* 输入 : 无
+ R3 O1 n1 f" [: i8 h* 输出 : 密码正确与错误,错误返回0,正确返回1( @) z( X2 w' b$ D( R' b5 D9 R- C
********************************************************************/3 \" D' u; V# y4 O/ @! P. M& V& D/ Z
uchar PassWord_Chack()
# ?2 g1 z1 g- ^* R{
3 C2 g% g. D* y* f: V        uchar i=0;
0 b9 b! ]1 M, n/ ]5 }3 f        while(i<User)
( `2 T$ O% b2 ~4 _, b6 Q1 p6 I5 B        {
, V: K$ L. [1 [- t                if(Chack(i)==1)3 v' K- Y& z% c  P! i, Q
                {
6 Y5 F; V' `. R- Z$ U                        Member=i+1;
2 ^1 ^  U1 l6 U8 w8 A- Y+ P. p                        return 1;
8 G. N& j; q& W  c                }
8 V. [% @  ^7 I! u+ a                i++;        
& E" c9 q  \# j! u" k; c; ^* [        }
+ l0 v/ ?) }; @1 A: G        return 0;        6 M3 a( h; X) b; Y- ~/ y3 k2 U
}$ g2 \% g. }" f5 W, e  g
$ [, p0 U( f& F$ O3 t
void delay(uchar tt)7 u+ d2 W3 \4 t6 E3 D" H: R
{  uchar i;
5 r- Q4 x% v+ p' N0 B   while(tt--)/ v: J# Q3 N3 g5 Q. e' N5 i* k
   {/ T4 a8 e; J* ?% |2 W
   for(i=0;i<125;i++);
/ u7 F( B8 s& o/ ~0 q   }2 _1 z8 V& J1 ?1 y* B3 S; B
}
! a* ~+ O  t0 U5 W! @/********************************************************************$ H- ?0 @# |5 n% S$ q6 h4 s
* 名称 : UART_Init()8 X/ B) `8 L3 ?& }% i
* 功能 : 单片机串口初始化
# e, F. I4 W8 }8 V* 单片机:晶振11.0592MHz 波特率为9600bps
1 A! O. j# w6 x# D( |& _! K1 f) g* 指纹模块:波特率为9600bps,
$ \. C: ]* Y. _; D0 e) }********************************************************************/        % `; |! ?4 G0 F* @8 a* i& a  Y: i
void UART_Init(), q& `/ ?4 i& M
{* o2 }" z( F+ M. ?
        SCON= 0x50;               //串口方式1        //REN=1; 允许接收
$ V7 T6 ^: B1 G; F1 f        PCON=0x00;                //SMOD=0
$ q8 M4 B8 ~; w! f. u2 v        IT1=1;7 q# @" U# Q- `% l, C
        EX1=1;
$ X, z' E' N8 }' c% f        TH0=0;9 t+ R3 v4 q! j3 ~
        TL0=0;
  T, n5 L) @. }' Q: R        TR0=0;, v5 o1 w3 C  k
        TMOD= 0x21;               //定时器1定时方式2" J3 I, d+ C' T$ w' \! r# H
        TH1= 0xFD;                //11.0592MHz  模块默认波特率为9600bps# ^) y" K/ l1 y
        TL1= 0xFD;                                                                                 
- V. o7 Y% [: T& l        TR1= 1;                   //启动定时器 / O6 o2 R9 i8 W
        EA=1;       % N+ K$ \5 }$ }4 ^" W$ u
}
5 u! }$ e# a9 X. E
6 V( Q: M8 ]* |3 l, h6 ^/ m; Sunsigned char Keycan(void) //按键扫描程序 P1.0--P1.3为行线 P1.4--P1.7为列线
: M7 L) r- `- M, I! c; M5 Q& {{7 E0 L( f; b$ C& \
  unsigned char rcode, ccode;2 g3 S' _# n6 `% c8 L) x$ S" ?
  P1 = 0x0f;      // 发全0行扫描码,列线输入! U7 t9 |  `( k
  if((P1&0x0f) != 0x0f) // 若有键按下( \) s# {2 N% @
  {' [: t( ~, @2 K$ ^
    delay(1);// 延时去抖动
, E+ @  \# V* l8 Y! x    if((P1&0x0f) != 0x0f)' c! f0 [  p: H, `( \  b
    {  rcode = 0xFE;         // 逐行扫描初值9 j. C1 w- n2 M% a
    while((rcode&0x10) != 0)0 F6 [( u5 V) U2 g5 p2 B
    {2 u9 B7 [$ {; U4 u# o% @+ k
       P1 = rcode;         // 输出行扫描码
* Z* m* g) p( o$ J      if((P1&0x0f) != 0x0f) // 本行有键按下
$ {6 Z! M3 t; e& w0 Z) T8 Q      {$ K: h- y& ]7 p; H) R9 c
       ccode = (P1&0x0f)|0x0f;
' C( l1 a& j5 f; z4 b       //do{;}
) j4 K! t0 m6 ^+ w           while((P1&0x0f) != 0x0f); //等待键释放
* F/ f8 _, c: t( B  r            Feng=0;( I3 Z6 j. ?5 ~# g1 g
        delay(100);3 m4 j& _+ `4 l, [# s6 }8 h
        Feng=1;
' L6 K8 @9 U0 ?0 T6 a  C; W2 m       return ((~rcode) + (~ccode)); // 返回键编码
5 G$ C% f  b+ R0 C% V7 q      }
' u" ~5 Q1 v( Z    else
2 J% P) l( S! [. c* t    rcode = (rcode<<1)|0x01; // 行扫描码左移一位/ e: |: C' G' v( D) M
    }
( u$ V) ?4 w8 n" e4 s8 b" z    }
% n% V, Q# u$ T  }
) ]  ]+ E2 a% H/ @( M6 _: v) z, L  if(IrOK==1)9 @3 z0 x1 W. T$ B  E
  {; j# N7 U! E" }0 l/ F
   IrOK=0;/ \. g. `- ?/ p) \6 X9 W2 z! C0 F
   Feng=0;  o& g8 O0 _, f& E7 h) M0 m- g
   delay(100);* P& F7 ?0 k2 b7 r0 {+ k7 X( x
   Feng=1;
; B) V% ?3 x8 o8 W$ E0 e   switch (Im[2])& F1 U. @5 t( {2 ?( Q( \2 {& `
   {
# s: e) L. a, u    case 0x16: return 0x28;break;                  //0
; Q4 t; h$ E2 @  n, h) K& Q2 d        case 0x0c: return 0x11;break;                         //1
1 t8 m6 O# s$ k2 u' h1 m0 s        case 0x18: return 0x71;break;                                //2
! q6 O2 G- Y. I) x        case 0x5e: return 0x41;break;                                  //3
2 O  A) q8 j" o) a% ^& R( p9 W        case 0x08: return 0x12;break;                                        //4: k. m/ B) B' G
        case 0x1c: return 0x22;break;                           //5
# ]; j# J8 U8 |& ~        case 0x5a: return 0x42;break;                                //69 f( j; \, X, A6 c( R
        case 0x42: return 0x14;break;                                  //7& s  ^8 Q  H9 a, {8 `$ u6 [# l
        case 0x52: return 0x24;break;                                  //8
+ Q, y1 z7 s6 o        case 0x4a: return 0x44;break;                                        //9
/ l  \9 L' T! P" u9 E/ N        case 0x47: return 0x81;break;                                         //a
. U8 S+ b& a- s0 V' M        case 0x43: return 0x82;break;                                          //b  d4 r  w3 V( l+ ~: w! ?
        case 0x0d: return 0x74;break;                                           //c5 t' x/ B  ?2 x4 h( i; J  p
        case 0x15: return 0x88;break;                                                //d5 y9 n& D: @( S( B6 m, n
        case 0x19: return 0x48;break;
: F1 c( K# k  P+ C, u+ o* k/ z8 e   }
4 t1 u5 A0 g' N% w" [3 E  }  ; Y, l, w6 G* k
  return 0; // 无键按下,返回值为00 q/ w. M2 ~6 j1 G4 ]- H+ ~7 B3 H
}
' K6 ?8 f: s; U' h; O7 z; \, _$ j' n) K' _" g
void KeyDeal(unsigned char Key)
" D/ m' H7 Q3 K+ x+ @3 m{  //unsigned char n;
2 R5 i" m9 i/ s: @- ]  T   if(Key!=0)
, t5 q" e8 u) p& F/ E; R0 t# t {
) L! q; w/ i- }
' O! E, F% @3 K8 n( c; D                   switch(Key)
, p1 u* I  B! h3 m" Y. b+ }- v, q                   {" @4 R' M" X8 B& T" @- [
                   case 0x11: K=1; break;         ) x9 X2 m, Q; n3 o: j
                   case 0x21: K=2; break;  
( }- s. k+ |* @7 |                   case 0x71: K=3; break;  ) X$ M8 u' j; J
                   case 0x81:  break;       - j/ E' @3 W4 W$ G  w
                   case 0x12: K=4; break;5 F& B9 d+ U+ y4 o4 K
                   case 0x22: K=5; break;
) J, \4 g! ~# C* @$ ^) w6 N# Q, q/ m                   case 0x42: K=6; break;2 f3 U: M( C  H: M
                   case 0x82: K=34;break;               
' u  c: G: y4 W9 b6 [! f$ Z                   case 0x14: K=7; break;
6 ?( _- S( w# j0 v1 Q& @3 s                   case 0x24: K=8; break;" P) C- D& Z! N' P# G; F0 C
                   case 0x44: K=9; break;
+ d# P4 i) S8 l- X$ X                   case 0x74:  break;                ' B! H& [9 X/ d1 J& ?9 C
                   case 0x18:  break;               
2 P0 d- h( ?0 x9 `% j$ E+ n( r                   case 0x28: K=0; break;
3 E. N  r# }& ?' ~1 i3 c                   case 0x48:  K=11; break;
$ O7 Z6 |% R/ b0 p" n2 b2 K+ l                   case 0x88:  break;               
- b  K; ^8 q2 s1 ~4 h                   default: break;
+ q+ N7 k+ j6 i                   }
3 q3 r0 [: s* _' I  }
0 p; S) {  J$ t" C2 }- D0 O. z}
" l/ }6 n/ R( s: n# Y9 z( Y
8 W& d5 H3 V6 E6 x$ E. F& n7 J+ r6 h8 ]1 X6 Z
void shuazhiwen()- b+ |7 f/ l2 A7 h; F
{
4 ?% V2 |/ L! S2 a* X    uchar IDs1,IDs2,IDs3;         " a( R8 G( z4 }' L7 J7 c
        LcmClearTXT();
6 L3 q; x4 G0 U: D. @2 {# \" m) I        PutStr(1,1,"请按手指开锁");      ) X- }% M- a4 R) R6 ^9 |
        SFG_identify();- S* [3 ?+ I; R3 @) G
        while(querenma==2)
7 G0 c& ?" h% ~/ p9 Q: U        SFG_identify(); % y& U. Q7 t% }" W, z0 q8 I
        if(querenma==0)% q" G& P+ C* v& S' H/ S
   {6 C- f( Y! w# Z8 `* ]: a! J
                LcmClearTXT();3 R% g4 d3 y1 N6 {9 F0 W
                PutStr(1,2,"门已打开");
' o: N! R$ f: K" [: s0 s( @                IDs1=PageID/100;2 A2 y# B( k: b0 N7 Q$ d
                IDs2=PageID/10%10;
) U9 g8 ~% T, v5 ]( Y% G                IDs3=PageID%10;+ n5 m; B/ n! r- g2 {. ^# g+ R' p
                PutStr(2,1,"编号为:");" r, T, h$ S! g- R
                WriteCommand(0x8D);                //指定第三行显示位置; O  P( i# u( @, x$ |1 s/ \
                WriteData(0x30+IDs1);
9 o$ O# M, y5 J8 I7 ^  ~                WriteData(0x30+IDs2);: c+ Y7 f4 t& Q% D2 Y
                WriteData(0x30+IDs3);
) e; g, L- \2 G; E                ErrorCount=0;/ M% ]& }6 D1 w- A
                Feng=1;
* y: g& g' Y( w' B8 t+ P                jidianqi=0;
3 m  Z# F) x  i  M$ R                delay(2500);
' e$ T2 u8 `8 E" c4 @5 x: S- x/ o                jidianqi=1;
* J" F, ^- D8 i; p/ a& L0 h6 D
0 @" [' H% N4 P4 q! X3 B' t        }6 x/ a9 W1 r% B, m
           else if(querenma==9)& x# `# T) l& O/ p6 r0 p9 H
                 {
7 _& D7 @; y5 q8 f                        LcmClearTXT();( Q, N6 {& G0 S3 F1 o: ?
                        PutStr(1,1,"没搜索到指纹");
# d0 R2 G0 v. n0 P% b                        PutStr(2,1,"请重新按手指");3 s6 I  r4 L) b  d/ g. {3 {' m1 H
                        ErrorCount=3;: F2 K: T4 B8 A: j6 Q# @# b7 m
                        Feng=0;
( h0 Y* H. N# U+ y" H) ~                }3 I4 C0 A" H: a6 s" Y- I
                   else 5 I* ^: ?8 h1 x" u4 V0 ~* Y, n* K
                {8 ?& n* r; n5 u, E
                        LcmClearTXT();
& p0 s" }: K" R1 C) d- Y; ^: ?8 V                        PutStr(1,1,"接收包出错");
6 J- U+ A/ U8 J, e4 r  B                }5 |+ z, K' R" ~& p% v7 |6 G
                delay(2000);
- J1 b: Q' v4 E   //         while(Keycan()==0);
. K  A. v; B5 ?}" F/ U2 K7 S4 I1 Y
void addfinger()$ N1 t" Z# M, d4 A
{
  h, D1 w9 {- O( g, o        uchar IDa1,IDa2,IDa3;5 N% p8 J- \3 O/ Z0 P! ~1 p: u
        LcmClearTXT();9 t7 H, f8 e5 l/ x$ ]
        PutStr(1,2,"请按手指");   
) o# V+ }' N! \5 b% \3 h: Y! \        SFG_getimage();! t, S# W) {- R  x* X
        while(querenma!=0)& u: O! I; w! \) e
        SFG_getimage();* }5 n) {/ u+ d; s; d2 ^
        SFG_genchar(buffer1ID);" e. B, F3 o1 J' c  s) G
        UART_Init();
7 ?- _; F  s9 {- z        SFG_fastsearch(buffer1ID);
# ~6 N1 S0 d8 h2 [& L9 c. R5 `1 l        while(querenma==1), D% Q- d  B4 H/ v0 x
        SFG_fastsearch(buffer1ID);
2 L7 r: W$ ]1 j8 S  q) ~8 D! T/ H" k
        if(querenma==0)2 Q& S/ L: V! c1 k1 x" w
        {, P. y& j7 m3 P# ]* v5 m
                LcmClearTXT();
0 X( Z. ]6 b- J. a$ U                PutStr(1,1,"该指纹已存储");. V% S7 w5 _5 H* |1 o, N0 z0 D
                PutStr(3,0,"  按任意键继续");
; d7 s1 z4 Z! b" b- P            while(Keycan()==0);
  J" w8 k6 a2 Y* R: D( O0 j        }! k& W# Z6 k( \. Z8 ~' r
        else if(querenma==9)- j, _/ y1 h6 G( `8 g2 S  r0 ?
                {
. X- R& g- ?$ d% V: d8 ^                        LcmClearTXT();9 y, ?( `6 P. G$ i
                        PutStr(1,1,"请再次按手指");
- d$ f$ }# N7 S5 n; P                        SFG_enroll();
& K/ J1 T, I0 {3 j                        while(querenma==2)" `: g% R1 k) f3 s2 y
                        SFG_enroll();
# `7 L- E5 R+ r% N1 x% G  R                        LcmClearTXT();
' H6 i( y% B' U: h) {! b                        if(querenma==0)& C) }  t, D7 K0 h$ V' k2 }1 x5 k
                        { & W% \2 P8 @& k' y' j( O7 e
                                IDa1=PageID/100;IDa2=PageID/10%10;IDa3=PageID%10;  I. o1 x. ^) r/ Y& V
                                PutStr(1,1,"指纹采集成功");9 U4 N& ?, [. m8 g
                                PutStr(2,1,"编号为:");  ?; e( v7 R- X# e7 T& z( E
                                WriteCommand(0x8D);
. W+ [! m' z; k( T                                WriteData(0x30+IDa1);WriteData(0x30+IDa2);WriteData(0x30+IDa3);
- a/ o6 ~- o: ?  K- ~                          }- U- Z! `6 [4 n  z$ G  ~( ]* L9 t' _
                  else  if(querenma!=0)
& J" H8 F( b/ u( t& C: p, V                          {! r) D% I5 G* X- D2 t' T4 Z. J
" A4 T, i( V: [# s$ ~
                                PutStr(1,1,"指纹采集失败");8 v! C5 ]; q& P% q
                                PutStr(2,1,"请重新操作");3 a- O3 N1 a" b' g3 Z
                         }
1 ~& A! n/ P3 d1 K& G9 `- ^                PutStr(3,0,"  按任意键继续"); 3 R- f6 R: c* z
            while(Keycan()==0);" N! c2 _7 \& N7 i% h
                   }
- Y/ |8 `/ `( Z. f# e% g( J        LcmClearTXT();
6 N$ T& ^5 r0 y  B! G; O& W                         PutStr(0,0,"按键1 : 增加指纹");
2 d/ e. p+ Z$ f" h! d/ r; i                PutStr(1,0,"按键2 : 删去指纹");
; s1 N+ P8 `0 Q3 [" y# Y                PutStr(2,0,"按键3 : 手动开锁");, P6 }$ m+ a+ V5 i4 {: J4 M
                PutStr(3,0,"按键4 : 修改密码");- F0 t2 m- A/ ^1 ]
}
% t3 U4 k6 ?. P+ \void deletfinger()& k$ l7 l' X  K7 X+ @4 P
{& @/ Q3 Q# l, P; D& H
        uchar i,j=0;
# R/ J% p& ?2 d% r3 I- ]0 C+ W5 V        LcmClearTXT();3 i% _( ^5 A1 ]- E7 z
        PutStr(1,0,"输入删去的指纹号");1 Z2 w! D% J& ^  a7 i
        for(i=0;i<5;i++)dz=0;        " n$ l2 J9 C5 d; y1 k3 u7 [( b1 U& j
           Key=Keycan();/ a& i/ W( v3 t; q
           while(Key!=queren)( R+ u: S5 J% R* V
           {$ j% ]- m3 J8 m2 {# {! U
             Key=Keycan();
; U- x  ]) `& J$ F- E  m+ y2 |) \/ g             KeyDeal(Key);
$ G3 I# i9 D* L) `; L+ ~7 e/ s4 B             delay(30);                                                              //按键有抖动@@@
. s5 f' a: X. O. n# k6 `/ s             if(Key==0)K=10;
/ p$ l5 B9 O$ A: V             if((K>=0)&&(K<=9))
1 f$ U1 g7 v. s1 Z! X: N; c             {/ @1 c5 o( t! k
              dz[j]=K;8 w9 R& d- _, b7 M9 c4 J
                  if(j<3)
+ [, F! z1 f' F) W                  {        
4 y- Y: |- f6 y0 G9 N                                WriteCommand(0x88+j);                //指定第三行显示位置. R+ l0 q2 C* j' K3 |
                                WriteData(0x30+dz[j]);        3 f' Y& O1 u; u0 f6 {: u  K0 {
                  }' s1 a1 ?$ {4 j% `3 t
              ++j;9 v$ G/ F6 _/ p) S; K" o
                  if(j==4)- y. o+ t0 X6 r6 }4 G- ^
              j=3;                                                                                                   //@@#yinhuang' q. J" W4 d9 Z3 T+ x# `  @% U
             }   //显示LCD12864并行显示
& {0 u+ O; O9 }! r; j0 t  N                 if(K==34)                //按了删除键. K8 a% E7 u* K4 d) A; d1 O1 ^" g
                  {0 O* |5 Z8 H2 E7 ~" l% |, v6 l
                    if(j==0)
# U2 k; |9 Q" }8 R5 H# \$ M: p                        {5 Q* K8 t1 X, p9 L* L
                                WriteCommand(0x88);                //指定第三行显示位置
' |' v2 a# S# F7 }& t; |* d                                WriteData(0x20);
) ^1 y$ c9 w% Y. V" c                        }
) F' S5 E% S9 ^                        else
$ N/ s/ Q+ I. W+ R$ j, m9 W                        {
& O* \, w6 ^" S                                --j;
0 V8 j7 B3 B: k. W                                WriteCommand(0x88+j);            //指定第三行显示位置, M0 _" z& p4 Z# s: [- C
                                WriteData(0x20);( `4 w" B9 l/ R( F# d, e
                        }
/ F4 j/ X9 W3 }, V' c& O# E                }
: I% \! O4 [  B8 Q  v0 O. O& y4 v) i        }* H6 h3 y$ ]" ~" o' f, b5 _
        if(j>=2)
& a' N0 A. n# s        PageID=dz[2]+dz[1]*10+dz[0]*100;
; K+ Y* p( B" ~        if(j==1)
; j  {' u! ]5 D2 j  o2 s$ S! z; K        PageID=dz[1]+dz[0]*10;- m. h- G1 L3 O. b$ b  _
        if(j==0)3 s# F) b  o- A* F# J8 |0 o
        PageID=dz[0];  o8 n5 Z( C# R8 N! f: _
        SFG_deletchar(PageID);
/ ]* I2 S2 |+ x7 c: K& d) m% D        if(querenma==0)
7 j6 M/ g' E9 k- F        {' ^% g1 \# b  e& L( a$ \4 q( x
                LcmClearTXT();
5 z7 q5 b; }' [- p                PutStr(1,1,"删去指纹号成功!"); , M2 G4 I2 T( [6 ?: h( c
        }- ^1 S* i. |1 S4 y, [
        else$ i9 O# F3 F; g7 M
        {
9 l8 {% j: _8 [9 z- l$ w3 M( X                LcmClearTXT();" m/ i. D+ _" T: ^1 _3 |0 K; W$ h
                PutStr(1,2,"删去指纹号失败!");  ) ]2 F* U# M) n1 E" s
        }
9 v: c+ z& a" ?0 a- l# r# a        PutStr(2,0,"  按任意键继续");
  O  D* L1 C/ Y, n8 z        while(Keycan()==0);; W3 P$ n# F. t# x
        LcmClearTXT();. _: I! E. X2 S
                         PutStr(0,0,"按键1 : 增加指纹"); % p) r6 B  s  B  O, R; p
                PutStr(1,0,"按键2 : 删去指纹");  m9 q/ n' N# ?, s
                PutStr(2,0,"按键3 : 手动开锁");
/ v7 w" G( q0 F% E                PutStr(3,0,"按键4 : 修改密码");
* l0 k% d8 F+ ?0 w' r; {2 B+ }}+ R3 ?( a2 r! c$ M/ J

- y2 [' G8 i2 P& c0 H: o7 Jvoid gaimima()7 S3 ?' `, Y% \' Q0 _
{
# d+ ~* ]9 R: C9 H. r: q6 A- |/ P        uchar i,j=0,mima1[6],mima2[6];
; x+ n: S9 H( }" X        uchar k,temp;  r) P; w0 k4 ^: s  E/ v6 ?& |
        LcmClearTXT();
! x2 f; v$ T# T% s8 C* H2 C* w- S        PutStr(1,1,"请输入新密码");0 c. f3 Q3 b  u
        for(i=0;i<6;i++)mima1=0;                                                                        5 d4 g0 f5 a5 D6 k3 X
           Key=Keycan();
/ K$ |! y2 N/ E! c% i% B! T      while(Key!=queren)
; K# }! x0 l) h7 `& H3 X1 O3 q           {
6 P- E" j. F/ q% z4 A             Key=Keycan();
. H; d( W/ W; o. l+ y# ^             KeyDeal(Key);, w3 {% ^( m, D
             delay(30);                                                              
5 I- w& E+ g1 O$ o9 a- H# o             if(Key==0)K=10;5 J/ O+ }! j4 h3 u% z
             if((K>=0)&&(K<=9))$ [$ s2 A+ A" ]/ W" O5 E6 O
             {
0 H/ j) d+ R2 g              mima1[j]=K;. L; S0 z( k$ x" g- v
                  if(j<6)
* k) ^) h/ Z% R6 }! I- ]                  {        
/ a$ x, n& b4 ^9 m                                WriteCommand(0x89+j);                //指定第三行显示位置
" ?* }7 m$ K, h3 N                                WriteData(0x0f);        ; v6 f3 W$ O0 @( F0 ~
                  }
; `- e/ h3 D$ E# _* g6 h2 T7 S              ++j;! b. y, _: P" ?  C; v  X, F+ W
                  if(j==7)6 K5 V0 o4 C) P  {0 j1 u1 O
              j=6;                                                                                                   //@@#yinhuang$ f$ W7 g& b/ K* A
             }   //显示LCD12864并行显示
4 o) H; h. D6 p) w9 n# Q                 if(K==34)                //按了删除键( }$ D% I! ~+ `" }2 [9 \
                  {
4 o/ G: ?, T: s: f: J4 d5 B# o                    if(j==0)
! j2 R7 h+ N4 z5 V. h7 T% \7 R                        {
! ^' E9 q+ z6 z# D5 H/ Z* S                                WriteCommand(0x89);                //指定第三行显示位置
" n( n$ V: G' Q. E7 x% U                                WriteData(0x20);# _. }' c  n: W# ?: U
                        }
' G7 ^. _7 F' z: V! u. a                        else/ G2 I3 Y8 c0 A! ~$ ^6 x, C
                        {# c9 I/ o1 A7 C
                                --j;
1 ~" T5 G8 h" L4 S$ v                                WriteCommand(0x89+j);            //指定第三行显示位置2 ~4 s$ Y& T2 S% g/ t' X7 C# m* W
                                WriteData(0x20);/ G1 R" p# z) a* k1 f" W
                        }; L  [% g: U  N4 Q3 s
                }
% _% ~4 g" F" o- L! K        }; B+ b) C7 _5 e
        LcmClearTXT();
# c4 l+ u2 S- S8 t        LcmClearTXT();. M( _: Q( V( a  W, F( o
        j=0;7 w* N+ g$ e- _0 H: S3 X
        PutStr(1,0,"请再次输入新密码");0 \; U) \" I) F/ \
        for(i=0;i<6;i++)mima2=0;                                                                        # q9 X5 P+ Z& r1 a
           Key=Keycan();
! o" I) N7 r  G6 D* z6 M( c  ^      while(Key!=queren)
% j) M( U" B. z- |( k) U7 g5 ?6 @$ \. h           {
( ?% j8 x  Z: {             Key=Keycan();+ }8 O5 k$ Z2 X2 o
             KeyDeal(Key);
; ]' E; B: E7 A, d, m8 k             delay(30);                                                                I+ U+ ]# ^) ^$ X( T4 w. t
             if(Key==0)K=10;. c- R  @3 I7 J: K
             if((K>=0)&&(K<=9))
& b; Q0 u' j- h, ~             {7 d$ l$ i: I  }0 }! {
              mima2[j]=K;
# o+ f" d3 L" A* r) a4 d3 ?                  if(j<6)
) b' o- }1 q0 j3 o& \0 v                  {               
' ]" F  K- m" R' R' |& Q5 W                                WriteCommand(0x89+j);                //指定第三行显示位置) n6 M- N: I% q
                                WriteData(0x0f);        + m9 a: T  P# t1 d
                  }8 [) v7 a: U2 w+ B
              ++j;/ Y' A' M$ _* Z! O* v+ V8 J. H' v& r
                  if(j==7)
, z( x" T7 ]! d5 S3 \: c              j=6;                                                                                                   //@@#yinhuang+ s# v; j* M$ b" T- p
             }   //显示LCD12864并行显示 & y7 B- U. Z$ \" E
                 if(K==34)                //按了删除键
6 Q1 y, z. Y. X3 z: y' e4 L' M. l                  {
  [) `$ Q5 a% r8 P3 z+ J' M) W                    if(j==0)1 F1 ?) s- o% z2 P2 K: }/ j) ?
                        {4 U' n: q0 L, ^1 {) }
                                WriteCommand(0x89);                //指定第三行显示位置
0 |# ~) q4 q* k$ C+ x8 ~/ c                                WriteData(0x20);
: c. i( r6 x3 W3 R1 X                        }
4 V, a! ^, d) Z) G1 ~& G6 K& X                        else8 i7 `1 Z; ~  }9 ?7 \  M3 u
                        {
- R+ @0 f8 r& a6 d7 o7 T                                --j;
$ L. [& A9 ~5 m( ?3 O                                WriteCommand(0x89+j);            //指定第三行显示位置, M( c3 f$ X1 P8 s8 X
                                WriteData(0x20);
9 r! u, G( `& r                        }
; d0 Z% R* t+ c2 k                }
2 \3 W4 V  G# v; H        }9 u' n1 o; w/ ~( t! \5 G( t
        LcmClearTXT();
; ^7 o' y& C  s9 O& K5 p3 D+ K        if((mima1[0]==mima2[0])&&(mima1[1]==mima2[1])&&(mima1[2]==mima2[2])&&(mima1[3]==mima2[3])&&(mima1[4]==mima2[4])&&(mima1[5]==mima2[5]))1 s  h) c; F& |( r5 C8 y
        {
8 d( j/ I/ D1 d- J                for(i=0;i<6;i++). _( L1 j# O/ m+ e
                mimaID=mima1;
" o# O3 l& V- D; z; E3 q- g                /////////////////////////////////////////////////////4 z- V9 ?7 j( A' n3 q: Y
                for(i=0;i<6;i++)           //密码限制在6位以内
2 A& }& a- ^7 T4 n( Z                {
2 i9 T8 ^; P- @# }3 h/ R- ]                        UserPassword=mima1+0x30;                                 
, E( e( K4 D1 Z, U4 h1 o. J7 b                }
9 T1 X$ k* ^0 f! B- [                temp=(Member-1)*10;        
- u# P% `) k5 l& s( j# U                delayms(5);
$ m# o8 z( s- Y! k" Q" }                for(k=0;k<6;k++)
" b0 ^$ V7 n0 @( f0 t  S" @/ j                {
5 t# j2 D; c9 K' ?0 \! `0 m1 u7 ]                        x24c02_write(temp,UserPassword[k]);* ~2 }3 |0 c3 i/ ~
                        delayms(10);! @! d7 ]0 ?7 w. \& ?- v  s
                        temp++;
6 p6 t4 f5 l9 n* `) w) L% O1 K5 R                }  
/ s/ R0 }, k6 w: j$ f- k" {                //////////////////////////////////////////////////////
( y! Z* R$ q2 C                PutStr(0,1,"密码修改成功"); 8 A2 d0 K/ w$ ?* W! y1 R9 ^
                PutStr(3,0,"  按任意键继续");% a+ `6 d1 U, i3 c( H/ t* Q' W
                ErrorCount=0;
. R. T7 x5 ^+ O, u6 X5 H4 c                while(Keycan()==0);5 y2 y4 Y" ^: n( o; N3 t. e
        }  v* [9 J3 B$ m, g5 x  Z
        else/ m4 D; ?) q8 C$ l2 F
        {
) P; g3 ~4 b4 A2 i1 H                PutStr(0,0,"  密码修改失败  ");. Q0 D& H. D' D( t+ L! ?& }
                PutStr(1,0,"两次输入的密码不");
1 @* Y# J7 e5 u! p/ o. m: C                PutStr(2,0,"一致,请重新操作");      
- F* B9 A# Z# G  `  j                PutStr(3,0,"  按任意键继续");   g2 H; ?5 m/ b4 }9 D0 c
                while(Keycan()==0);8 B4 ^5 ?) }: v- P1 c1 ~
        }* [# i; ]  a! f
        LcmClearTXT();
* G. U6 [4 Y' `: |" M                         PutStr(0,0,"按键1 : 增加指纹");
4 o  t" w2 E6 J- g- Y                PutStr(1,0,"按键2 : 删去指纹");4 U4 U3 Z/ _" @
                PutStr(2,0,"按键3 : 手动开锁");% O. Y( N6 f. o: M% S% |
                PutStr(3,0,"按键4 : 修改密码");" k& e( U% e; I$ R' t5 D
}
$ }4 Q( K. ?2 ]) O4 S1 o
0 M+ e7 P9 j" N* B/ X. ?
" Z. B# C# v/ j# ivoid zhu()
0 \0 K1 {7 r  N; {: q1 `! d{           
! m0 t- @8 Z# N' m0 @    LcmClearTXT();/ G7 H7 {, N4 a0 [7 _
        PutStr(1,2,"门已打开");  s9 T# ~9 ]3 r! O( p0 K
           jidianqi=0;( `+ Z7 Q" J- W, I
        delay(2500); $ \. ?/ ~9 }. k! O9 k0 L7 P
        jidianqi=1;3 a- x& V& S- a" \  N
        PutStr(3,0,"  按任意键继续");
" b7 i7 ^- T7 [        while(Keycan()==0);
1 j, Z7 \  B' _( G, `7 v0 }                         PutStr(0,0,"按键1 : 增加指纹"); ) {, }3 U  y# s2 z, @2 p4 p! k
                PutStr(1,0,"按键2 : 删去指纹");
, q2 I! g2 o4 o4 h/ i; I+ p                PutStr(2,0,"按键3 : 手动开锁");* V1 u' ~5 ?1 I  R& ^
                PutStr(3,0,"按键4 : 修改密码");$ H' i5 ]6 }, n! z
}
- _8 l  }3 K' P- c% H) Q9 v8 i
  G% o6 k6 G) E2 K) X- a+ M* z! O9 l  \9 x- Y* y6 ?! l
void guanliyuan()6 v$ D) l2 \. C8 s. x: s; E
{    $ U) [/ S/ S+ u" c$ f! G. G, @( t
      uchar i,j=0,x=1;8 ?/ R6 P# I* m9 j
             uchar Right_flag;
* o# W! i* g- z! c/ j  B/ J  {) a      LcmClearTXT();
1 p/ K4 h6 C  k0 @          PutStr(1,1,"请输入密码:");        
  m/ R# Z- G; m  Y! e! ?( e           for(i=0;i<6;i++)mima=0;                                                                        
0 a8 ~+ s+ q4 a4 `4 V2 N# u           Key=Keycan();
' D/ G$ _) h9 \! M2 i+ {      while(Key!=queren); e% S# \- v' r+ L2 j9 l
           {
- s- O3 A7 y; V( v             Key=Keycan();4 R" x& E7 B" n7 i. c, `' w4 r
             KeyDeal(Key);" [: R. e6 y# v/ i& j) O/ P" o& b
             delay(30);                                                              
; G7 b1 @+ K/ K0 i0 ^1 ~+ K             if(Key==0)K=10;' k% N6 T  w& I: \. _
             if((K>=0)&&(K<=9))
9 o* y) X6 N( g/ \             {
" H4 g) j' ?# ^8 S# t5 T" P) i# `              mima[j]=K;( {* r: @$ E3 ?4 G
3 i; F" T4 ]9 _$ m
                  if(j<6)
" r' z6 f7 [5 x* c4 e                  {        
0 Q1 S' O( [/ M: o                   WriteCommand(0x89+j);                //指定第三行显示位置
6 M$ B/ p7 m, l               WriteData(0x0f);        ) A* j) V' M3 O* I

6 D! Y' Z, e1 b. I                  }& p6 o4 c# T( C; r2 U. e
              ++j;3 n! T3 y" C) j
                  if(j==7)
4 e, ?0 `$ \& t6 k& C. J( {- E              j=6;                                                                                                  
6 V* q* B: v4 \& W+ _* D: N             }   //显示LCD12864并行显示 2 e" u1 b" w( Z5 I  j
                 if(K==34)                //按了删除键# F3 m2 }% s" X+ ~+ B  w* d/ z: u, j
                  {0 c& d5 [9 ]) g: U0 P# Y* ~/ }
                    if(j==0)4 K# L/ F% j" ^" ?6 J1 U+ V
                        {
, z7 \$ w0 o- f) I1 e  n/ o4 e                      WriteCommand(0x89);                //指定第三行显示位置, |- V5 x- B4 z' F
                  WriteData(0x20);- \: P% d8 l+ _0 O/ N
                        }
" Z* I' }" y  [- l0 @; D                        else
9 W+ C. C$ F9 n0 d/ i4 K& \                        {
: w& X: `& u1 y/ _1 |6 [5 H                          --j;
8 j# H$ y  M  z! I                      WriteCommand(0x89+j);            //指定第三行显示位置; _: J  D& _& m3 Q9 ]: L# A$ T3 C, n
                  WriteData(0x20);, ~5 G5 O' d. ?- T- q
                        }
; H. }) M9 r5 k/ `) ~/ {2 M2 c                  }
- N! K+ ~* p9 B. z2 g" p           }
. ?/ Z  Z8 o5 y+ ?. f+ H: B& W    LcmClearTXT();
. l7 [5 H& V# M. h1 d0 W- L
4 w# e9 Y! J6 `/ W9 e3 P
" G  g& l: A. v! s3 T" Q/ s+ `          for(i=0;i<6;i++)
% k, f8 `' K* s  z         {/ h, D/ ?% d( {0 K
            UserPassword=mima+0x30;
; s( D' s! ?1 T
& h# P* F7 r6 J# e- ?6 R          }
6 q+ Y9 s/ d  F  v" H5 ~. U         if(j==6)6 r( t. N- p0 N6 t" C) S
          {- }2 g/ l1 r+ O6 |2 T
           if(mima[0]==1&&mima[1]==3&&mima[2]==1&&mima[3]==4&&mima[4]==2&&mima[5]==0)
# d' p/ z* l$ ~; O0 W5 @            Right_flag=1;
; s% d: U* m& o& k+ c7 R                else
$ G! O$ r$ T0 |+ j2 _( q                Right_flag=0;
5 y! r$ G/ k8 z2 \                      }) q. b$ Z3 \4 P: e( U
          if (Right_flag==1)
9 x; C: n8 ~2 Q3 r' W/ A1 c0 {         {
7 j: S" g7 l: H/ D% T                     Right_flag=0;, ~3 Y3 i* p7 \' l; I, @" ?0 S

- e9 v% _* r* M3 |* }9 s                   for(i=0;i<6;i++)mima=0;* d! p/ T6 I2 ^
                PutStr(0,0,"按键1 : 增加指纹");
1 g, z5 X5 W/ `                PutStr(1,0,"按键2 : 删去指纹");/ X1 v/ ^3 \7 Z( T& l! y  O! h
                PutStr(2,0,"按键3 : 手动开锁");8 Q  d$ e( E$ G" H
                PutStr(3,0,"按键4 : 修改密码");* _) w& g- _1 E
     while(i!=tuichu)
' ?* S' E0 a/ n' h      {         
+ s" F8 h0 C/ v3 V                 i=Keycan();
4 i& w+ u1 L  _, z) G  I; [3 N4 V1 ?5 _6 s! Z/ t" E
                KeyDeal(i);  
$ v2 V3 w* W% A            switch(K): s% Q3 f# c8 m, b* K& P3 ^
            {6 H8 d6 I* k3 t! p' g3 M* \" A
             case 1:    addfinger();K=6; break;
5 d. I) B, O9 U             case 2:    deletfinger();    break;
3 x4 C) }7 M. Q                 case 3:         zhu();        K=8;  break;8 w1 p5 g! o6 d' A8 C
                 case 4:    gaimima();        break;
0 V7 B3 V/ U; R7 ], u, w# I             default: break;. X1 {* B2 \7 Y! J! v5 j
            }8 \- m4 p& [/ h; c
      }
0 k7 t5 j4 v: Z, ?5 S$ {     }% }5 d- r" B! J7 _- r* O7 C9 R
    else
* i4 U2 J. W' g" ~5 p    {
) {" c2 }# j4 Z- ?
2 ~' \+ s7 N/ g/ R% j% Y                PutStr(1,2,"密码错误");
4 ], {/ V: ?+ o% j5 C" E; Z                PutStr(2,0,"  请重新操作!");
, G0 g' _; q3 S) X: H8 c                PutStr(3,0,"  按任意键继续"); , G9 t( I5 |! L4 N* t0 B7 a7 l" @9 `
             while(Keycan()==0);
4 S1 R! H: o) `                PutStr(0,0,"按键1 : 增加指纹"); ( h' `, S; R! ~) T# S3 j
                PutStr(1,0,"按键2 : 删去指纹");* D9 `+ f8 P2 o1 E+ J3 Z; y
                PutStr(2,0,"按键3 : 手动开锁");
* J5 d  w3 d4 c' [: q2 J                PutStr(3,0,"按键4 : 修改密码");3 U8 E% }& f6 K
    }9 U+ Z6 W: Y* V0 H3 [* G
  Key=0;2 D, A$ ^% r% ]2 R7 s9 H" ^1 f

# G- N; W( ~$ E9 }" I' K! q}9 z4 }# `1 V; V; l8 G8 l( d
void mimakaisuo()
. W4 `+ |$ x9 o' N' }- i+ d{
# W4 Y7 ~' f. c3 f) N$ m uchar i,j=0,x=1;8 n. q1 j1 z- i3 F/ g8 V
             uchar Right_flag;* {( F" \3 M$ \7 `6 D* ^8 n$ \
      LcmClearTXT();
2 t; o# f, a0 ~. l' [! r0 Q# P          PutStr(1,0,"请输入密码开锁:");        2 q4 |3 {* L5 D/ p& d5 c) V
           for(i=0;i<6;i++)mima=0;                                                                        
7 |- H  ~9 Z# K0 t9 x  E: u           Key=Keycan();* z5 u" c8 b# K. x- @
      while(Key!=queren). S* F/ B/ J# E: j2 h
           {
" l( |5 R. _, m+ r$ f) l             Key=Keycan();
6 ^* y; K6 D: a, A) H, W             KeyDeal(Key);( b1 y9 g  U% {
             delay(30);                                                              
) v2 H0 a7 C) L5 F. x" r  t             if(Key==0)K=10;3 c5 h& o6 ?$ z% p9 F
             if((K>=0)&&(K<=9))
% J3 V3 ^- [/ ^4 M- M+ U0 X             {
/ a- T% N! L% m% J5 Z5 L; Q              mima[j]=K;  K. r; G$ q9 L' ?8 _* c  A

8 \  V( Y* W1 W0 x6 v6 D, y- X                  if(j<6)
- s; i1 b$ A1 P: k9 `* @                  {        
5 z6 T, D  }. V# G: k, q# ~$ ?% @( T0 d                   WriteCommand(0x89+j);                //指定第三行显示位置
( F2 t0 }# i% x3 c/ |" Z$ ~               WriteData(0x0f);        
. c5 v2 r/ U. r7 |0 E" I* B! k0 b( Q6 R- E2 J, M5 C
                  }
' X8 N; L" [0 C" ?              ++j;! H5 \5 J) j" w7 ]1 w5 _1 E! o
                  if(j==7)
3 q7 U  Q' F7 H) _( m& t$ m, s              j=6;                                                                                                  * k$ m4 W  G5 N7 F; a
             }   //显示LCD12864并行显示
4 b! m3 G  ^1 m. E! |6 a$ Q                 if(K==34)                //按了删除键
" Q9 n. O  c, B                  {
2 u/ r/ S* U( }/ q                    if(j==0)
( H7 `/ [2 i; H7 j# o                        {5 r; m: ?9 J: y, ?- x, {5 E: ?! C) I
                      WriteCommand(0x89);                //指定第三行显示位置! ^- h  B1 t! f" q
                  WriteData(0x20);- R, L9 t% x$ p
                        }- v: m' i4 {0 y) M- R8 W
                        else
9 L0 X: v% P) D/ e3 @! R( k                        {+ Z' {  h' Z; y9 {7 g5 ?
                          --j;
, s) E; }1 n( A; ], v                      WriteCommand(0x89+j);            //指定第三行显示位置1 L5 B/ z/ ]" ?1 X0 ^' ^
                  WriteData(0x20);
- \& M! G5 J9 r/ B7 t+ n                        }
+ F5 g& g8 h% e# i                  }
8 w  F* w3 o6 \3 [$ M           }
' p) z, r; }6 h+ ^' A- s, }    LcmClearTXT();
5 d% e! W) A* l$ Q7 [7 s
* E! z5 k. H. F+ ]& V0 [# t$ U; O/ ]0 @# C- G; T" E6 J! @
          for(i=0;i<6;i++)0 H% O0 _  l: H% F$ G+ E
         {7 E  l0 q$ ^5 z; W0 G# E: I
            UserPassword=mima+0x30;$ _! r/ F; H% X6 p; r4 |8 z

" L" X* N' S4 Q! P+ w+ W          } 9 a* `* t* ?' L0 N/ [
         if(j==6){Right_flag=PassWord_Chack(); }
2 B- t, ?! D/ L+ l3 D7 q; ~1 }& |* O          if (Right_flag==1&&ErrorCount<3)
% \  [2 _/ |  B( A3 |. n         {' i2 L7 L" z# |/ H# ~# [& ^" u
              Right_flag=0;
1 |- I8 y. N9 p                   zhu();ErrorCount=0;  ) U1 K8 b4 W' r
                 Feng=1;3 t8 A# \3 d) n$ l. [) b
                  for(i=0;i<6;i++)mima=0;4 b1 j1 S( A5 |: y% w
     }3 @% n2 a, j) c4 r8 _
    else8 N! ]6 z' \9 \/ c5 v3 u8 |/ W
    {
; ~2 ?+ ^8 u2 P  @; z            if(ErrorCount<3)! @0 n7 [: w: W* Z
                ErrorCount++;
( h" l7 \0 p5 y                 if(ErrorCount==3)
% Q0 U) i5 ~/ h/ }                Feng=0;" k" J4 ~* h8 t: z; q; K

/ b6 w5 J/ |$ @3 S1 o- p4 Z: k                PutStr(1,2,"密码错误");
4 D- q% Q* E# `; i3 ^0 {                PutStr(2,0,"  还有  次机会");
' I( d0 A2 P) E) w  x                PutStr(3,0,"  按任意键继续");
9 c! H2 Y! }% y% w                WriteCommand(0x8a);
1 |/ i* ^$ Y. ]                WriteData(' ');5 w! ]+ U  P: ~
                WriteData(3-ErrorCount+0x30);2 D7 D2 W- w1 O. y. \' w

* g# D4 C& c9 e3 a' @4 A( g                delay(1000);1 A  N( k8 u# D/ P0 N0 r

- w0 U" ~$ n* b" o    }
) F, d' ]# @7 _* ?; @  Key=0;' ?4 L4 R1 G: A; N  P
  LcmClearTXT();( }6 J% _1 o* v& H5 R' [
}
6 Y  l( G& H) n/ \4 Ivoid fan()
7 p9 X7 L7 u2 Q" s3 L' B, z& Y8 Y' ?5 I{% ^2 X/ w, v; P! B' V. W
//        PutStr(1,2,"请先按键");2 Q' U& g2 Y& c# m9 W
//        PutStr(2,2,"再刷指纹");  S6 ~% C: {6 G. w
  if(Key!=0x81)                        //管理员操作: C/ B( g# _1 M5 s: d& ~
  {- Z& Z# w3 M' ]0 E1 {& [1 l9 n5 K
        PutStr(0,2,"欢迎使用");* L1 U. x! r2 I1 Z/ U1 ~
        PutStr(1,0,"指纹密码门禁系统");
- g8 P% g- T, o$ M; ^, d        PutStr(2,0,"密码开锁请按 C键");
( F& M7 _+ @' ~& |/ X        PutStr(3,1,"请按手指开锁");
, v: _; x* s, _; ]+ k   }" F/ T" I+ [0 E3 m
  Key=Keycan();
$ W* S% P$ {' v" e, zif(k2==1)                //指纹刷机! ^: |, l# y9 i4 c
  {
2 o! n# E2 u  a          LcmClearTXT();  U! o2 g( Q  a% a
         shuazhiwen();2 _3 L8 i- `8 i* c5 {
         LcmClearTXT();
) S/ H- v4 D" T2 j3 S, _9 J2 C/ D6 d  }- {5 ]1 ~0 R6 k5 [1 f  G
  if(Key==0x81)                        //管理员操作
6 J$ L8 Y5 x2 r6 c( A3 k+ u) v  {" z7 G' U" ^- ]& ~4 {5 ~* I# h( t" B
        LcmClearTXT();
1 F* c4 |, N+ L1 P$ T6 v2 V        guanliyuan();
" H& o5 u  C3 s% m    LcmClearTXT();
6 R* a9 n) u! s1 x  }% v3 b9 \, C$ v
  if(Key==0x84&&ErrorCount<3)                        //密码开锁; Y+ F/ \, j& A
  {4 v0 A' k2 I0 H2 `7 L# q
        LcmClearTXT();
0 K7 W8 J2 _: H( W  F7 j        mimakaisuo();2 P, }% L  J# b1 c
    LcmClearTXT();! a. o& `5 O1 [4 y" D+ @
  }4 E8 @) F- t0 `, P, o' W1 |9 T

' K) S; X' Q, t" x$ V/ U}        
# q) c% b- _$ H! z6 ]( l
9 Y- {! {. {' q1 |# n* Bvoid main()
+ a' r/ O9 K: j{         + }" o0 B# Q9 |' s* e
. D4 _- K. r/ R; q# q- i' s, Z' [
//PSB=0;
, ], P- S- {9 D  [* ^( B+ ^        UART_Init();           //串口初始化                  7 x* ~1 x: i5 Y4 {1 N1 g' w
          x24c02_init();     //24C02初始化
6 g/ |/ v4 L" O5 e. s        LcmInit();               //LCD12864初始化                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
6 I: S! i- {! U0 I2 X4 n8 }        LcmClearTXT();           //LCD12864清屏        
, R3 P* X. |) Z5 m2 m; V# k        while(1)
  i' `) p! O) D- G# i& `6 P4 X                { / s! J# X0 k3 n2 _0 b
                        fan();' S6 @/ [( T  ]2 m, m* \- m+ C
                        delay(100);                  
# m. l2 R! Z, m; H1 i) O- z                }        
* L4 E( K; L* C}3 B; e* n( d- W* g
5 Q1 d6 J% O' J. l# h
//外部中断解码程序_外部中断1( M8 q6 F) {+ w) ]1 A% Z: ^
void intersvr1(void) interrupt 2 2 P- h' R$ A9 z4 _
{
; v7 e+ f8 w5 F1 V; }# k( [ TR0=1;
' ]/ z$ _/ k  m7 u( W( A Tc=TL0*256+TH0;//提取中断时间间隔时长! D5 ?9 l1 `6 o+ {& i  V
TH0=0; ! G" A) v) z# P8 V6 j
TL0=0;         //定时中断重新置零
2 c4 _+ C5 D3 E& ~% ^8 K. H* \7 a8 V0 c8 I
if((Tc>Imin)&&(Tc<Imax))( y/ s& G& v, k4 z& E
{ # g' ^+ Z0 |  H) d8 N8 L& [7 l! C4 w
        m=0;
- i; z6 K0 }+ i5 [7 j6 r0 l        f=1;6 j4 w3 i/ A! F4 d, @
        return;& C: Z- y$ D* n( ?
}       //找到启始码% k6 o+ N/ O* s; J7 {  J
if(f==1)* `! v8 ^0 d  O# o" o3 w5 o! M
{
! Y3 n6 I6 Q$ A        if(Tc>Inum1&&Tc<Inum3)
- c6 b' w0 o6 [1 v8 k" u) q    {
0 R! U" n, l' q0 o           Im[m/8]=Im[m/8]>>1|0x80; m++; 0 v# M& X3 J- d7 N$ g1 s
    }+ }: H7 u$ m! g: I
    if(Tc>Inum2&&Tc<Inum1) + y# g9 f% y# p) j) X. G: ]5 s% v4 l
    {
4 C' O2 L% G$ D; `  p2 Z9 g, w      Im[m/8]=Im[m/8]>>1; m++; //取码- {8 B) ]% r1 M' u9 j$ ~
           }" s6 b  ?" b; ?4 J& t: L, S
           if(m==32)
8 L, w- E7 P4 k7 i. i    {
/ B" @  |: }; R! ?# ]      m=0;  $ M4 [! ^; n6 w5 s' s* W
      f=0;: F; b1 D, m: `: \9 G
      if(Im[2]==~Im[3]) 9 H# U. X0 h& w2 ?
      {8 {% n% _' R- R5 c0 \3 r3 y0 E
           IrOK=1;
: M" U3 v& J! ^9 X9 O1 O9 w                          TR0=0;
1 I& @$ R  C$ T+ J           }
3 |2 K2 {, `: Z- g6 Y# ]6 g      else IrOK=0;   //取码完成后判断读码是否正确& \( s  Z8 R( K
: Y. Z+ n# j( ^# v  s5 M3 _

) @+ ~$ D5 ?, _7 _…………限于本文篇幅 余下代码请从论坛下载附件…………" h7 F* ?) O; y6 `
游客,如果您要查看本帖隐藏内容请回复

' J) U4 U* Z7 C2 \; C" P6 J4 P7 N

6 s) [; M, D4 u3 R: C: m; ?

该用户从未签到

2#
发表于 2018-11-26 10:27 | 只看该作者
感谢分享啊 谢谢

该用户从未签到

3#
发表于 2020-4-5 09:15 | 只看该作者
* H; N, h" O: U' W3 _; V0 r
学习一下,感谢分享啊, 谢谢!

该用户从未签到

4#
发表于 2020-4-19 09:28 | 只看该作者
红外遥控指纹电子密码锁程序学习一下
/ Q0 B4 }: t, I  z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-22 01:54 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表