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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机的红外遥控指纹电子密码锁程序
; X; ]# Q9 u' C$ i+ C# j% Q# _$ \' R4 o

  S* w% I. I, z; i4 e* Q1 K4 P#include <reg52.h>
8 g+ u1 B- O8 v, P#include <intrins.h>
7 o0 R8 E. T; w# F4 i+ F: A& X#include"24C0x.h"
" S7 w, G2 o) O4 K% W" `#include"LCD12864.h"
/ ?3 i- ]" V; k#define uchar unsigned char
3 a1 r/ [- y- e! j$ Z#define uint unsigned int
  u& l, J6 L  ]0 [
: \4 e% ]( C% I5 ]#define buffer1ID  0x01
7 e; W7 h5 P4 E1 c% w& A' C#define buffer2ID  0x02
2 g9 ^3 P  q% ~2 u#define queren  0x881 K3 K, R, g% m3 v9 V* f
#define tuichu  0x86% W, O* ]$ \6 b
#define shanchu 0x84" h! L1 F6 J5 |3 J- W
8 J. O9 k6 `5 f8 I2 ~- y
#define User 1                                    
9 c. v0 V3 O5 h% F$ ]9 o. L
% Y4 j$ \/ H5 W' t  v2 pvoid fan();
2 f2 z! ?. J% V0 I3 ~
5 R4 U& j; t- K# l1 |: m; \1 e" y# ~sbit B0=B^0;( _" ]. b! ?- a% T9 s
sbit B7=B^7;/ Y* l9 O: ?% A+ z- g& ^
sbit k2=P3^7;( M& I1 {% k8 i5 g
sbit jidianqi=P3^6;
+ A* e3 p0 M+ ?% a# _sbit Feng=P2^0;
+ _! @& ?% _4 H/ I  N2 U' \+ ]2 f) v+ n1 F( n9 g
extern unsigned char times[];7 J- c, {- [# A6 f3 B9 A( l' g9 m# I
uchar  Member=1,sec;
9 E& N! p  T  z+ V/ Tuchar  ErrorCount;
4 n  u( j# o* f//////////////////////////红外相关//////////////////////////
: t) r1 j6 f3 v" a! w//时间计算
% u5 a& n0 r3 q1 h* l& l' O#define Imax 14000    //此处为晶振为11.0592时的取值,
4 P+ q4 f# A1 \4 x#define Imin 8000    //如用其它频率的晶振时,
6 S& D" |" |2 J+ ~) r9 Z9 Z$ B#define Inum1 1450    //要改变相应的取值。* R9 P( O( X6 t7 R
#define Inum2 7000 - H- K; E  a0 [. @; g
#define Inum3 3000 2 d+ l" q* H/ q
//解码变量. R; t# Q2 I  P
unsigned char Im[4]={0x00,0x00,0x00,0x00};$ [4 J" N$ N. C/ a: h  e" ^
* g7 [+ M  i; K0 n) n2 R
//全局变量1 c; y3 f2 w& _. k8 R# t
uchar f;
* m* H, x) S" Hunsigned long m,Tc;
- c3 Q6 Q/ E' t1 u9 o$ Q( Wunsigned char IrOK;( j# u# U: ?  G, u/ b8 G3 q
//////////////////////////红外相关//////////////////////////( s% k  H% T9 T. a8 y9 l
uchar  code buffer[User][6]=: g! ~3 b) ^' e( l# t
{+ G; M9 J5 E: `' U1 b6 w; Y  h& ]6 A" O
{"000000"}
0 I1 t7 e2 I  m. A1 C4 ]. L! R};
( l3 |- G5 _4 V/ @8 F% W0 v0 @/ R4 a; A

% y6 S) n: H; A9 j. Suchar dz[4];5 V. j/ x: b$ k- Y
uchar time[4];                        
- e; o5 g; S: c! A/ Zuchar mima[6];# o9 F  Z% ^" O2 Z
uchar mimag[6];
* U5 `/ w& c/ Q/ U* V. c* @" ?0 v, ~+ duchar mimaID[6]={1,2,3,4,5,6};
! |6 ]0 T  e$ d. J0 o6 A3 y, Q9 y8 k* I+ h: M+ }
9 P$ C' d0 h: l5 d/ c
uchar Address1=20,tempx=20; / {% l) R! z+ J6 f$ y: `* z
uchar Address2=20;   7 N! t! R/ T' Q. }* k% {& o0 w5 q
7 S& u+ H- F) q$ ^, W
uchar data K;
0 U' {) t0 V- G0 ~0 Ruchar data Key;2 t: Y2 |# j: g; t6 g5 `% j
- m. z3 ?; Z: ]0 d9 C( G
uint PageID;
& m8 ?- `/ y) G; `6 I' `! juchar data querenma=11;
5 w& c+ [4 _. A. r3 |6 Xuchar sum[2];
# a. l, ~( m2 ~8 v' H9 Iint summaf,summas;5 x  r: H0 Y6 r) J' d8 v! A& p

, s. \9 v! y8 W7 F  O3 {uchar  xdata UserPassword[7]={0};//密码; S5 s9 ~7 v- F4 ^  _4 X9 i+ Y
uchar  xdata DSY_BUFFER[16] ={0};//缓存
- R. O7 ]  F% n! Y5 W/ n
0 K' C  @! r! X* _# [9 D
; ^) X7 c3 O- n# Wvoid Red_Init(void);) o/ }& D8 H, W+ k3 `- W
#include "zhiwen.h"
; O- V! B2 q) X: q//检测脉冲宽度
  E, ^6 e6 k& punsigned char check(void);8 U; ~8 d  I# l. L1 U# a: D
. L! u* y' X( p4 g6 v  s: f
unsigned char redchange(unsigned char rednum);" f3 j+ n8 l# E6 v2 |& C% ^0 u5 w
( J. |% T* T- j& c  [2 G
$ L# A7 ~! l6 c. l7 m* V% v
void delayms(unsigned int z)0 g. s6 `0 _8 E% ^' K4 f- f
{
+ ^7 C7 p0 f% A1 [+ `9 I. Y        unsigned int x,y;4 ^2 ?0 M. ]9 d6 t
        for(x=z;x>0;x--)
' M* X: I! ~3 W2 W, n                for(y=110;y>0;y--);
  m/ E4 y+ r0 ?}
3 k$ e% ^# l/ [# \6 M7 J! q4 `' M6 ~
/********************************************************************/ M- @6 v: Q" X
* 名称 : Chack(uchar User_Number)
! m( z* b0 h5 r2 l1 N# T; s* 功能 : 单一用户密码检测
. P" ^, K7 T. x" w- C2 {* 输入 : User_Number
6 R- |; t) z0 f( _* 输出 : 密码正确与错误,错误返回0,正确返回10 Y: \$ I0 i6 [- T  K* l- J5 @: y
********************************************************************/
, }  Z5 P6 D8 S9 j* b0 }* C( Suchar Chack(uchar User_Number)
" o3 V& D# X& a/ j, t) ]{/ \& u/ ]; R! g
        uchar flag, i,temp[6],Address;3 D; S: I0 f9 w
        Address=User_Number*10;4 f8 o' E! l9 d# N! h7 @# j/ ?
        for(i=0;i<6;i++)
1 |2 w$ t) ?5 s# A, b        {" D* N# U. b5 E* z3 v
                temp=x24c02_read(Address);" D- `" h: x4 Z- l4 _
                delayms(10);
! o3 h0 x: H- u                Address++;8 o# l- B' Q$ F
        }4 U, d# c8 J# _3 V3 Z6 o
        for(i=0;i<6;i++)8 M) J& G# o  F3 P$ A: `
        {
% d+ e' K- T2 L/ l  F                if(temp==UserPassword)7 X5 d/ |1 J- z% h5 N! |
                        flag=1;2 C. y) W0 ~) B4 G6 J
                else         3 Z% M, M" {% l# X, {. N2 ?* o  n
                        flag=0;                7 s' ~- y: l; f$ @8 l: V! `8 D
        }
1 }& W  V0 n& p' A: A: k/ V                return flag;+ Z# Q1 g. w% {4 R1 C
}
  }: s* S5 G; I
3 {  @% _8 ?, F. n: E/********************************************************************8 T9 G% N2 T0 G" T) g6 e
* 名称 : PassWord_Chack()4 b2 @6 p: z$ f) i
* 功能 : 所有用户密码检测
4 C6 Y: t# o' _' u* ~5 F, q, ~* 输入 : 无$ N; o6 K, W: y2 J$ d
* 输出 : 密码正确与错误,错误返回0,正确返回11 C4 R! H* S% o- ~, P' q7 X/ n: n
********************************************************************/
. a/ \' }7 Z8 w; |$ E; |& Nuchar PassWord_Chack()
2 g3 r1 \& F8 C+ F  Q2 n# R{) O0 ^; l4 t. C4 Q  U7 ~
        uchar i=0;
9 f: u3 J4 r( L" }( N2 g        while(i<User)
$ ^/ y0 A7 B% A% g        {6 J' G8 W/ s1 P) j( q* D9 ^; y
                if(Chack(i)==1)7 P% E; f+ H; P- W& T+ C3 v
                {4 F' V# S+ _: v! ^# |4 f, O
                        Member=i+1;
1 M- h# l; Q  j% j                        return 1;
3 P: a: q1 U, \; ]! Y/ F4 H' u                }
2 P, f& y# }! i* e! E                i++;        9 ^, y) o( ^. a% Q9 Q
        }
" R1 u2 ?' J1 X; U9 d        return 0;        
) ~: T% e# t1 w& q}& P& U. L; N2 o$ @6 x
0 G6 P! K5 E- k9 [6 C
void delay(uchar tt)
) d# D$ w' Z# s+ e. \{  uchar i;
# R, X. y; p2 r  U   while(tt--)8 u& h5 X1 F' B# [! F" {+ W3 r
   {5 w$ A! p% R) u  D" |
   for(i=0;i<125;i++);& S" A( X5 U: b; P+ x  V
   }0 T' t( y) `" l% _$ e
}, L6 t/ @+ ?9 T1 d) ]$ y1 Z
/********************************************************************5 r1 x- O9 k+ a/ d7 o" W7 m
* 名称 : UART_Init()
0 ^* A) w% u: o) i- T% V! a* 功能 : 单片机串口初始化
9 Q, a& B" w4 A9 M$ B" b* 单片机:晶振11.0592MHz 波特率为9600bps6 t$ D5 b. Q  p; `: S
* 指纹模块:波特率为9600bps,
1 k6 L  n) u9 T2 b) C* y- Y********************************************************************/        
1 ~$ {. u) Z" H* i: B$ }void UART_Init()1 I+ W7 O5 ?$ x' T8 T- f9 t6 b
{' ^7 {; N) }, {
        SCON= 0x50;               //串口方式1        //REN=1; 允许接收
+ e- s) y- z: Y# u. {: e. m/ R8 i7 F8 V        PCON=0x00;                //SMOD=0* A( j8 q7 q% o: D- o: |( E
        IT1=1;
" [, a5 Q7 J/ e* \        EX1=1;
% j2 \3 _2 u" u        TH0=0;
" N1 R  i, q! i1 i/ j- a6 H  F        TL0=0;$ t) F. ~% e+ x) z4 _
        TR0=0;
0 ^* B5 T9 r& D; b% G" B3 ]/ r        TMOD= 0x21;               //定时器1定时方式2
( C& D. R5 E0 v+ ?; d        TH1= 0xFD;                //11.0592MHz  模块默认波特率为9600bps$ f3 W: A) m8 J, c! i- {/ y
        TL1= 0xFD;                                                                                 
% n4 ^  B# {+ Y7 [; ]6 Z        TR1= 1;                   //启动定时器 % B" K5 u" I( \$ \
        EA=1;       + `2 W! y( N: X3 f# p# b8 T
}
" l- K4 {. D$ e3 Z: \( t4 |7 G+ m+ Z: v) q. x1 Z
unsigned char Keycan(void) //按键扫描程序 P1.0--P1.3为行线 P1.4--P1.7为列线3 f* J- U4 S* H  g$ l/ t
{
  _/ a, M8 D( \  l, B  unsigned char rcode, ccode;: y2 g" W& m0 [. B' e
  P1 = 0x0f;      // 发全0行扫描码,列线输入
# [. z, Q* v2 p7 M* \  if((P1&0x0f) != 0x0f) // 若有键按下' G) `+ {* [& N3 _
  {
+ b- d. r5 e4 Z8 J6 @# F+ A    delay(1);// 延时去抖动
7 `7 D* K/ t5 d    if((P1&0x0f) != 0x0f)
6 V' V& d/ q" v2 D) w    {  rcode = 0xFE;         // 逐行扫描初值
, I; E; p& W: r6 A7 A- d2 A$ w    while((rcode&0x10) != 0)
6 B  f% W1 E! y6 X" R8 C' a    {0 q  l* R0 O7 r8 H& Z7 a
       P1 = rcode;         // 输出行扫描码
2 M4 L  L1 \- k! i! L) U, m      if((P1&0x0f) != 0x0f) // 本行有键按下5 w4 j' ?0 ^: t( t  h) U9 a
      {& T% F" a3 E, J. i5 }
       ccode = (P1&0x0f)|0x0f;# X1 p9 [* c! Y9 d
       //do{;}
; B. I3 {  Z, z9 B           while((P1&0x0f) != 0x0f); //等待键释放
# E$ }# M  o: O; T' c            Feng=0;8 [) `1 [  a' p9 `# Q
        delay(100);
0 b; Q4 {/ k2 A. \9 N" z        Feng=1;6 Z" C/ p8 J* k5 u4 O2 p* q/ O5 O  D
       return ((~rcode) + (~ccode)); // 返回键编码
  \% X& L- J% D; P% Q& R      }
4 C8 F: M  b+ j# u. S) z, _    else
0 H' y. I* u1 B    rcode = (rcode<<1)|0x01; // 行扫描码左移一位
1 g) B! Q4 g0 Y9 q3 I    }& X; M. }0 z3 q1 h8 ^, i' N
    }; C  h) r- f- [
  }
+ X: F, ^$ w. A4 X  if(IrOK==1)
- |: D! k9 [; U8 G" V, {% `  {
3 `8 B; \3 d; m5 {2 |   IrOK=0;
8 X+ k: G4 d  @$ b% |2 q   Feng=0;
, H4 O. K1 K- Q1 N8 P. t   delay(100);
4 t) P- y6 R# ]# z, P- F0 M   Feng=1;
7 b: Z' g; i$ k% |! c   switch (Im[2])2 H9 q0 ~9 k2 u3 Z$ k
   {  H9 N2 L! `4 G: Q# \- g
    case 0x16: return 0x28;break;                  //0
* Y' e5 _+ N) A  S+ M        case 0x0c: return 0x11;break;                         //1% u- ?% B/ m. @( v1 q
        case 0x18: return 0x71;break;                                //2
0 A- H0 T) `  V5 L8 Q% K        case 0x5e: return 0x41;break;                                  //3: C: E, d5 K) J% I
        case 0x08: return 0x12;break;                                        //4
- [) U) o3 q; M6 i, F6 l8 q4 ^9 p        case 0x1c: return 0x22;break;                           //56 @$ K: H& U0 n8 M
        case 0x5a: return 0x42;break;                                //6: v1 W8 B! N' B) T% q2 l: ^5 H
        case 0x42: return 0x14;break;                                  //7
! Z/ n* @* `5 l9 N) n1 e! y. V! o        case 0x52: return 0x24;break;                                  //8
: {6 x# K4 n$ T3 Q$ G5 `/ s        case 0x4a: return 0x44;break;                                        //9
/ l) T" H. G  E- _" E8 Y/ t- b  `        case 0x47: return 0x81;break;                                         //a8 m  O- y# r" j& M3 `/ U# l
        case 0x43: return 0x82;break;                                          //b4 N% @* H( }7 Z: A. p: f, X8 ?. T
        case 0x0d: return 0x74;break;                                           //c
% F) N" c4 O  K! q        case 0x15: return 0x88;break;                                                //d1 k8 u; x  i0 i$ _$ Z
        case 0x19: return 0x48;break;, N% s/ |8 m% e6 x& D1 ~
   }+ a: t9 w6 S5 B8 C
  }  
- }+ S# K6 g& @, U. d  return 0; // 无键按下,返回值为00 f4 s/ V! i3 ?2 {4 ~) [
}2 |2 j! H& S, D8 x8 X

* G0 L8 E& c. x3 C* Kvoid KeyDeal(unsigned char Key)
  r4 C1 N7 n  z1 X  ]; P{  //unsigned char n;' G5 `. S1 [, J, L
   if(Key!=0)
! C  ]/ y& K( K% m9 s0 `2 y1 v6 ^ {0 @: a" H' v3 V. L5 q2 K
9 x6 c( y! f1 ~: |0 q. x7 P9 X% h7 q$ b
                   switch(Key)$ w- ~* q3 w, I. H& P
                   {
9 }1 A" @- O' p4 @* U' C                   case 0x11: K=1; break;         . n/ v* {% P. K# p+ x6 }: p4 g! o
                   case 0x21: K=2; break;  
  q9 x9 Q- K, H, v" G  p9 ~# T                   case 0x71: K=3; break;    s" _9 P: m1 y, ~# i4 Q4 ?: P
                   case 0x81:  break;       / w* |3 T2 p+ s1 E: M+ U
                   case 0x12: K=4; break;2 @) S" }* k6 f# c% e
                   case 0x22: K=5; break;
! Q$ l; U& Q/ E1 _                   case 0x42: K=6; break;
8 ^1 s3 }# E5 A1 _+ O( N                   case 0x82: K=34;break;                - r+ I; {; i6 e4 o; K
                   case 0x14: K=7; break;
% K# t' f6 ], O4 p1 |3 n% y                   case 0x24: K=8; break;
! J/ j. r  \$ S5 Z                   case 0x44: K=9; break;
, k9 L- }/ W9 D, V1 t( f                   case 0x74:  break;                2 a9 y7 [1 K9 K6 c6 ?/ O% _! ?
                   case 0x18:  break;                9 _& G" j+ W+ r
                   case 0x28: K=0; break;8 g! I& l- F" Y( f' i
                   case 0x48:  K=11; break;
1 V3 N4 `' L2 |4 J& ?                   case 0x88:  break;                8 a, y' x: W1 U: g) w. `2 t
                   default: break;: l+ J/ R9 v. R- z7 B  R
                   }" i3 Q1 l5 ~$ ^
  }
7 ^) ]( m# h8 Q& r}' N& B, G- y7 V( h) m7 X  y& p! S
$ t2 v/ e; O8 e9 r# L$ d. ^0 a
, N. W& S# n" ^, p6 Z9 j  s1 X- Y
void shuazhiwen()
; }6 `7 u- K" n9 r2 P* C{
4 \, n% [: c- f  P) Y    uchar IDs1,IDs2,IDs3;         
, r  Z0 S2 m2 k9 i) Y( q        LcmClearTXT();5 H) y' x* U/ B2 z4 K+ \9 ^
        PutStr(1,1,"请按手指开锁");      ) X5 U0 f; z% A, q1 t* O
        SFG_identify();
" m5 @" l' Z" |5 i! y& _0 Y        while(querenma==2)  U5 F5 a5 u2 t+ E% v
        SFG_identify();
8 I' K" v! [" N8 q! j, \$ J: Z        if(querenma==0)* i5 |) Q  R6 q% `" @% J3 w0 I
   {
* ~* I9 d$ c4 [4 Q6 I                LcmClearTXT();
. |- J" W% n- D! {                PutStr(1,2,"门已打开");
$ v' a7 t" a) F  v                IDs1=PageID/100;1 D. T  b* C+ N; R/ W  j. r1 a
                IDs2=PageID/10%10;  r- C$ U* f# b5 x  V% ^- J4 J
                IDs3=PageID%10;
5 \5 P" W$ G1 p- U; T! B. L                PutStr(2,1,"编号为:");# A2 E1 r  _& Y% U
                WriteCommand(0x8D);                //指定第三行显示位置
6 x8 J6 u) i2 m0 J+ @! F                WriteData(0x30+IDs1);2 L% k8 X, u$ }/ q, {( O. N# ]4 y
                WriteData(0x30+IDs2);
; L. a8 C1 o8 |3 ~( W3 ]7 d7 h, [                WriteData(0x30+IDs3);
' y5 I# {+ {! E$ f7 s' j                ErrorCount=0;% F7 }$ s; v  D& i- v. k/ c7 V
                Feng=1;0 K2 X8 s- w' g9 ]5 \, W% Y
                jidianqi=0;
" C5 J2 J/ a5 w$ m9 \                delay(2500);   c) J3 g. t% _5 m' {+ O% N, C
                jidianqi=1;
( J2 m, ~9 X. n& p
8 A/ e$ H  G6 P, ^) e        }2 n1 u& S: o$ p* |7 M
           else if(querenma==9)
# S  r6 q& K3 _9 S4 `: K                 {
  w0 q6 s% R/ r5 a, f" f5 [                        LcmClearTXT();9 \% d+ T- X/ y. O9 N- q
                        PutStr(1,1,"没搜索到指纹");
# Q# x* X; ?1 S6 R4 q6 t                        PutStr(2,1,"请重新按手指");( }9 v6 }; M8 @4 z+ d6 _) N2 V
                        ErrorCount=3;
4 M/ Z7 w& e) Y, ]# k# C; ?4 {                        Feng=0;
$ ^0 [5 a! i& K* ]$ Q7 l, B                }
* p' g% \  `4 T: P( D  c( F                   else
3 ]1 f- q5 ?& |+ L1 ]0 h                {
5 \+ f+ C$ F* I% J) |                        LcmClearTXT();
; ]. ]) Y" L) y7 y7 _6 E) z4 B2 [                        PutStr(1,1,"接收包出错");
3 H% e# q, ?2 F' k                }% S/ f# U5 \2 A6 P4 B9 X' X$ ~
                delay(2000);
3 C; P/ R- e+ I& b! }   //         while(Keycan()==0);% `4 w5 r# p! U9 Y
}/ H, i- l- Z" H- n- n6 {
void addfinger()
0 L+ E* R4 k1 L8 x{7 r7 n& o* x5 s& y  `. r
        uchar IDa1,IDa2,IDa3;- W  a3 z9 m6 Z; |7 z0 `+ {/ q/ {8 G
        LcmClearTXT();
  U/ I9 O. B. S+ Q. |        PutStr(1,2,"请按手指");   
+ y0 G1 a$ Z- A; J) |6 h        SFG_getimage();
4 X/ ~1 Y% s- g3 A/ b) q- d8 C        while(querenma!=0)) k  w1 U% E: F/ Y; T
        SFG_getimage();3 r/ C% ~+ p0 ^
        SFG_genchar(buffer1ID);; j  e$ N2 X% N. E- m4 }# |1 I3 ~
        UART_Init();" M4 y  ?5 s7 D: e- S: m
        SFG_fastsearch(buffer1ID);
7 C& d0 x$ ~8 j0 r9 E, J; `) m        while(querenma==1)
$ u0 B$ G$ B' n        SFG_fastsearch(buffer1ID);3 J8 M% E+ O, H! @& _( Q
+ e6 k8 }" ^2 z* L" J$ E& L  m- [
        if(querenma==0)7 i- G+ t8 d+ ^( C0 k( N! R
        {
/ I( B* \) R  s                LcmClearTXT();
: \' [% M8 E9 j" u# U& V/ a. A  y                PutStr(1,1,"该指纹已存储");# j; T' w$ N; P: {  N  i5 o
                PutStr(3,0,"  按任意键继续");
7 r+ ?( ?) a4 T0 n4 I+ }            while(Keycan()==0);
, O% F3 C5 m: P/ c1 Z        }
& D0 R8 z# b- o3 T        else if(querenma==9)
& ?: |$ N; J* r7 e& r& f                {% A9 k' a8 u) i, W9 e1 g1 q, {
                        LcmClearTXT();
  t  T: q+ U3 Z# _, V                        PutStr(1,1,"请再次按手指");
5 v/ c. s6 U: X) d2 p5 y$ q                        SFG_enroll();+ V  H( w8 [) i* J
                        while(querenma==2)6 d/ q- g+ K/ U3 m& {2 y1 k" y8 I
                        SFG_enroll();5 Y/ K" d$ M& F  Z$ K' }  J
                        LcmClearTXT();
6 [! s3 L: k! E2 s% S# u, }% @                        if(querenma==0)- Y& _6 |1 M, ~+ p% ^' \
                        {
, I7 W+ G3 m* c2 y                                IDa1=PageID/100;IDa2=PageID/10%10;IDa3=PageID%10;
' |. s- f2 s5 e6 C                                PutStr(1,1,"指纹采集成功");
5 A$ p3 c: ^$ {+ D* |                                PutStr(2,1,"编号为:");& O" G1 J  V" X3 W: Z2 L: S
                                WriteCommand(0x8D);
) o8 {/ r7 e/ K% `7 S$ m                                WriteData(0x30+IDa1);WriteData(0x30+IDa2);WriteData(0x30+IDa3);( d6 \7 _/ E7 W3 [( J3 r) }
                          }  N; |3 B" D' X9 s, z8 ]. A/ y
                  else  if(querenma!=0)& @5 L0 ~5 A: k
                          {
- ?# o4 x/ M9 }# t+ j3 T; w3 U
& c* u! W# p& H5 Z* x                                PutStr(1,1,"指纹采集失败");4 N8 B8 `' A+ Z$ E
                                PutStr(2,1,"请重新操作");! ?/ T% Q3 l/ `
                         }; X$ c) B7 R! W. u) D. a3 l/ W' Q
                PutStr(3,0,"  按任意键继续"); 7 D- R) W3 S2 M" o& o$ P
            while(Keycan()==0);& y5 k9 L* f$ C4 ]
                   }
6 Z' @' l! ^  J" e& ]3 F; A: E        LcmClearTXT();
6 X' j" A8 b8 n2 H4 f6 o                         PutStr(0,0,"按键1 : 增加指纹");   B: X: B! N' T: v- T4 L( ^7 l
                PutStr(1,0,"按键2 : 删去指纹");
7 _3 z7 S3 a/ u' M& L                PutStr(2,0,"按键3 : 手动开锁");3 W# D$ h) I* V# t) j' u% B
                PutStr(3,0,"按键4 : 修改密码");& z7 n/ y$ V3 N+ r- |; \' M, U
}% q& _0 L* w8 M+ s* O
void deletfinger()
" E' [! ?2 W- T4 S{
/ g+ x  A$ S, n9 g        uchar i,j=0;
" {) k9 _$ Q8 E, v# S# N        LcmClearTXT();" _4 R/ h0 Q* J% Y8 n& S
        PutStr(1,0,"输入删去的指纹号");& k" T6 r5 Q' n% \3 ^/ Q, P
        for(i=0;i<5;i++)dz=0;        
6 T5 z! \4 T/ T4 H8 o4 Y8 x           Key=Keycan();
$ {1 O/ @7 `" `; S5 _           while(Key!=queren)! @' o3 H7 b, o* P. A8 H1 m* T3 B' u  u
           {# Q6 T% u1 [7 J4 R8 v
             Key=Keycan();! Y% L. K% i; T
             KeyDeal(Key);! A. k- h3 ?2 B) R; C
             delay(30);                                                              //按键有抖动@@@
, H5 l$ X# m! {: k" n             if(Key==0)K=10;  N& a! q5 o& y
             if((K>=0)&&(K<=9))7 P" m/ \3 F$ c2 K0 d, l
             {
% o( {( h' P: e  ^              dz[j]=K;0 s& x# Q3 D% e. n/ w
                  if(j<3)
/ j: c7 L( @) a% c! \8 V4 V                  {        
0 g" g8 ^6 g5 B# G                                WriteCommand(0x88+j);                //指定第三行显示位置
+ V  Y$ h* d4 P. t                                WriteData(0x30+dz[j]);        + z2 ]* _6 K  Z) |! q5 [0 a
                  }
, n; Q* p( l1 M# {  g! N! a# [              ++j;
: g; W0 I- R. J: V) Z5 a) Y                  if(j==4)
/ z! l* w- A+ z9 J  d) `" ^2 f9 X              j=3;                                                                                                   //@@#yinhuang
) s2 [# l# F! H3 b! I( J: R( D             }   //显示LCD12864并行显示
' V, a2 a+ I( x- P2 K                 if(K==34)                //按了删除键
6 n& `! }* X' |. V% Z1 D                  {
6 H& _5 D$ X; Y3 M( Z                    if(j==0)4 [$ i" p3 K4 o: x2 ^1 {
                        {
! J; \' v, I! L% ~9 Y& Q                                WriteCommand(0x88);                //指定第三行显示位置
" ~6 n9 a5 ~- a7 {6 m4 S                                WriteData(0x20);
9 D4 k* ^: K( j2 u. n9 I% u' O( u                        }7 p* {/ g" Y5 |, E' F
                        else
- u7 e, K8 y" D                        {: g2 v; T  {( I) q" \) K
                                --j;- H% c; c& O. \
                                WriteCommand(0x88+j);            //指定第三行显示位置
4 W( b: E8 W' u8 @; N: i                                WriteData(0x20);8 ]9 E% j1 j. H. Q" Q6 j; h$ N
                        }
# o; u7 _" u4 b: ~1 f" S                }
+ w5 p8 m' n$ c$ d        }
5 h" U# u/ b! G        if(j>=2)
. B' [1 b/ {( A: U4 v9 S# r6 W% r. R! K        PageID=dz[2]+dz[1]*10+dz[0]*100;0 ]* f( q4 n! \* T2 G+ _
        if(j==1). s% \0 f9 {! j, `$ I- u$ f& p
        PageID=dz[1]+dz[0]*10;  s+ f6 B9 Y$ X
        if(j==0)4 d' B. L8 J1 x% D$ X$ _
        PageID=dz[0];
0 u0 s3 Y8 l, x  b! z* v        SFG_deletchar(PageID);% U6 }9 H! @. r7 `. }2 `
        if(querenma==0)% F% V; b, z' n9 ^7 l. l
        {
% k* V( M, V; t                LcmClearTXT();
& d: z, B3 L" H0 Q: u0 g                PutStr(1,1,"删去指纹号成功!");
1 f2 e& b1 r5 e' S3 J" l6 j, c        }
( S) C' P1 k7 N- ?4 W9 D. E        else" x0 W, C+ U3 G. E- u
        {
1 H' T: Y) a1 v% S6 L                LcmClearTXT();
3 K: g% x2 k+ H: }4 n                PutStr(1,2,"删去指纹号失败!");  , L# f  }% }: x# R+ a3 F4 h' N
        }
. C4 H) D1 m2 f: B) M0 e. I        PutStr(2,0,"  按任意键继续"); 2 A- J& E0 B' C  ~$ v! n
        while(Keycan()==0);
# z, r4 g7 C7 p$ P5 T$ D4 [        LcmClearTXT();* b1 B% L( H( J: Q+ u
                         PutStr(0,0,"按键1 : 增加指纹"); # p0 J  B' P2 K; l
                PutStr(1,0,"按键2 : 删去指纹");
" `% G9 g  d4 W5 Z$ P8 e9 U. H                PutStr(2,0,"按键3 : 手动开锁");
; W- b5 D' x6 H6 _% w, v8 ?. N                PutStr(3,0,"按键4 : 修改密码");
; ]+ ^# V/ w. [1 V/ R1 x6 |, Y) ~}
6 _% ]: s6 N& q3 L! [  `
5 e7 e$ _  q6 S* r5 ^# k6 B: `void gaimima()! t# w; d3 a9 ?" C
{
$ m$ p. z& y  @* [: ]( M        uchar i,j=0,mima1[6],mima2[6];
* i8 ~- w4 |/ Q0 p- F! a! E9 W6 c- L        uchar k,temp;# ^9 h( z  B, R3 @. b. f8 f' m7 d
        LcmClearTXT();
2 P; p3 `, \) Y+ \9 J        PutStr(1,1,"请输入新密码");- L3 Z: L. q+ e" L4 S7 G; x
        for(i=0;i<6;i++)mima1=0;                                                                        
( s" }1 o+ q* l! Y+ ]0 n$ {           Key=Keycan();1 K- o3 `5 n1 y4 @9 ^2 ~
      while(Key!=queren)5 A0 c: N4 t! v! Q# ?+ k
           {- o; j. V; s, f: h8 V/ N: x
             Key=Keycan();
: n4 v5 ^; H0 S7 m# t4 @             KeyDeal(Key);
+ @! m" z3 m  j+ v; C) M" s2 {% Y             delay(30);                                                              5 Z; D( h- r, _4 {# z6 j* V6 k
             if(Key==0)K=10;7 ~; N% a1 x( h$ m
             if((K>=0)&&(K<=9))
5 s9 O% L8 p+ {3 s6 P             {8 @# C# g. b$ K6 A
              mima1[j]=K;6 d& i" E; ]8 E) j- ]
                  if(j<6)$ R$ f4 D$ \! h3 S" v- J3 m5 A7 ~
                  {        * ?3 ^/ B. I- b6 a7 j; B( A
                                WriteCommand(0x89+j);                //指定第三行显示位置
- `; b3 m4 s0 R4 v) ]2 g; p9 D8 {                                WriteData(0x0f);        
4 s/ S& V0 y; b$ ]/ y/ y0 K                  }0 s7 Y- K3 t1 s& u  g
              ++j;
" A9 v' `$ M; J! q7 A9 s1 m                  if(j==7)
& _1 t3 v7 _5 ^4 c/ L7 _% z              j=6;                                                                                                   //@@#yinhuang- ?+ z. O/ {5 k2 ^
             }   //显示LCD12864并行显示   x. Q6 r, e% b6 s) Q4 F6 k
                 if(K==34)                //按了删除键# J, f: X0 r5 ~& u8 E
                  {
9 D( X5 P% Y7 s1 |. C8 q& r. H                    if(j==0)6 k9 c# ~7 r5 \1 I( g' A( I
                        {
% |8 F# t; @4 W  R# y' e                                WriteCommand(0x89);                //指定第三行显示位置+ S7 m* J* Y2 A. H9 D. F  T# A6 T
                                WriteData(0x20);2 [. L1 b5 d, L& w# ]; g6 p4 ]& b
                        }
( r( N  s3 N$ q( V" ?                        else- ^% a- p9 N! p, z8 A  ~+ M; P2 X
                        {
9 ~4 y+ {/ [8 W" Y. V  `, l- N                                --j;( ?( R  T5 \+ c  B" _3 w+ [8 j
                                WriteCommand(0x89+j);            //指定第三行显示位置
% f1 j* q0 W; A5 n% p                                WriteData(0x20);/ M! Q7 J* t4 g- e$ ?6 c
                        }7 R/ w, d4 T* y$ o- C# G
                }. K, m5 A3 w8 ^
        }% X  @. V# S2 |" J- {
        LcmClearTXT();
/ M- t& O7 A7 {5 V9 x        LcmClearTXT();) m* `8 o. b/ _3 b! g6 f$ ]
        j=0;0 f2 [" \6 |6 j+ V+ ?
        PutStr(1,0,"请再次输入新密码");: f4 f5 m- H% e% j! A7 D
        for(i=0;i<6;i++)mima2=0;                                                                        " b: L9 z; @: v/ y/ J5 V1 d
           Key=Keycan();
7 e' T" v& x1 r& c1 ]' T' }$ `* k      while(Key!=queren)- T( u4 g! t6 P; E( h; ~
           {( Y% _/ `) ]7 }8 K" T3 j
             Key=Keycan();
* x! b0 E; B; D7 ^& l0 T/ p0 l0 }8 e             KeyDeal(Key);4 q; f9 P. W+ [& Q
             delay(30);                                                              
5 a6 L+ D& D8 s0 \/ O4 ]* C7 Y" A2 S             if(Key==0)K=10;
7 S( @' p6 O& X: F' e             if((K>=0)&&(K<=9))
3 z( h' n9 a" G5 e             {
/ |* T& i& e0 Q. `0 c: j% X              mima2[j]=K;
9 W) M! N1 p1 T: Q3 r; M0 {; g                  if(j<6)
6 Y# b  {4 O, P                  {               
; T2 F4 g3 S& \5 j  {                                WriteCommand(0x89+j);                //指定第三行显示位置
$ t7 S* r' T8 ?0 f1 S                                WriteData(0x0f);        
9 T" J9 M3 |- h& Q! P' ^+ ]+ M                  }
" A9 X/ x9 R( m5 t' |! `              ++j;
6 s6 ^  `" a* t6 G1 y5 Y                  if(j==7)
1 b& Y/ W1 o" v* V              j=6;                                                                                                   //@@#yinhuang
. _: B- k7 o/ c  ~: C1 Z             }   //显示LCD12864并行显示 ! k5 ~. x$ F) s* o1 }6 K; R8 \8 r
                 if(K==34)                //按了删除键
4 D4 x. p- R& R                  {
4 l8 q8 U! f) j3 H' d                    if(j==0). \3 ^, s0 J; K' V2 u# j
                        {; k- w; j! W2 c0 n7 \$ O/ i
                                WriteCommand(0x89);                //指定第三行显示位置
: H% F! P2 U7 `1 J% j                                WriteData(0x20);
. v1 p" `+ N) z& k" s6 E' J                        }$ i( x3 a9 m) n7 Q0 c6 L0 l
                        else
, H* m/ T: R) @6 |* k4 X; B                        {5 G' D; |7 g% J$ t; [3 e% r1 ~
                                --j;5 w' O( L. |: Y+ x, R, o. h
                                WriteCommand(0x89+j);            //指定第三行显示位置
! {9 P8 L8 P& T; V( J# s" I& v4 W* x                                WriteData(0x20);5 Z' D# q% x/ O! t  v
                        }
  N  U3 [% }2 V; Y& \                }1 }+ m, N/ `. ?4 k& D, N
        }
! _/ ]" r- F* j& \' H        LcmClearTXT();$ h4 L# o* W: |5 s& [" P
        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]))8 U5 f& K, X% u9 L( F% I
        {/ N6 c2 i1 [- r$ y7 s. W
                for(i=0;i<6;i++)4 w( Q# G  l" J
                mimaID=mima1;( x$ q6 A, D! T( M- W3 l
                /////////////////////////////////////////////////////1 b* X$ K( i% K' L( x' w0 k1 o4 F
                for(i=0;i<6;i++)           //密码限制在6位以内( {5 |5 X' x/ p7 L7 J% o
                {
$ E/ _% {9 \0 o                        UserPassword=mima1+0x30;                                  : G2 c" F5 e# g) e
                }1 }" n" J2 z/ x0 n7 g5 p
                temp=(Member-1)*10;        * E3 X% L4 G) R  S, H0 T
                delayms(5);
  O. I6 B: `( b; n' n                for(k=0;k<6;k++)
$ p$ `. e4 @5 x2 t( m                {
8 |- V( _. s7 c& ?. B. _                        x24c02_write(temp,UserPassword[k]);
0 B* p% i- N% c% r. l. ]                        delayms(10);" c) ^( X, f0 K7 i  ^
                        temp++;
$ ~; e  @. j8 B3 i* ^4 y$ |                }  
. A9 y4 I$ m2 K% _                //////////////////////////////////////////////////////- p! n, B0 V& N6 @; R$ o. C
                PutStr(0,1,"密码修改成功"); ! ]8 t, S+ V! F. t
                PutStr(3,0,"  按任意键继续");
5 e( q8 c5 s! U. C                ErrorCount=0;  q, D8 |2 Y4 r9 V6 x* D
                while(Keycan()==0);
- l% v" M' k. m" P        }
, t. r. I! K  [4 j- v        else& o" H; S( ?8 j& L$ b/ }
        {
# z% k/ Q) x5 A3 |4 ]4 S* a4 ?                PutStr(0,0,"  密码修改失败  ");
; v$ u3 i4 D# c4 ^/ f5 H                PutStr(1,0,"两次输入的密码不");
7 g$ d8 r8 v+ R$ z6 Y/ X                PutStr(2,0,"一致,请重新操作");       5 M2 N. x% k- O/ n$ a
                PutStr(3,0,"  按任意键继续");
9 e2 f/ C! [4 W5 v2 H                while(Keycan()==0);
  k  j3 X3 }' T2 ^        }
# f* J- s; O* F$ [        LcmClearTXT();
: ^3 y  L1 g" n! U6 a+ i0 D$ T2 P                         PutStr(0,0,"按键1 : 增加指纹");
3 W% q1 ]) d% J7 a2 v                PutStr(1,0,"按键2 : 删去指纹");
7 s) N4 m0 R, v0 N+ j                PutStr(2,0,"按键3 : 手动开锁");' U$ |9 M2 d& _' _: o* r
                PutStr(3,0,"按键4 : 修改密码");
) P6 v8 m: Y, B% W! a, i}
. P7 x( ~9 w# ^, L, A) U7 r. b" {" ]; d5 |. z7 s

$ l; @/ b  a5 {5 T9 W& hvoid zhu()
) s% C" r8 b1 B; q{           
: m% p4 j1 u& b    LcmClearTXT();3 {  P. T! H- D) I8 H$ C5 Y( ^
        PutStr(1,2,"门已打开");, J* J5 L+ c9 q9 c+ u
           jidianqi=0;
4 P) J/ p5 g% {        delay(2500);
* S# N7 E0 H3 J7 z5 p+ n/ O% n( C        jidianqi=1;- J5 o# b/ g8 @
        PutStr(3,0,"  按任意键继续");
. N3 A* T4 @( q        while(Keycan()==0);
6 w1 W0 [: l% m, |( w1 \3 v# U                         PutStr(0,0,"按键1 : 增加指纹");
. A, A* v" u: f7 X/ F" b) {                PutStr(1,0,"按键2 : 删去指纹");
& U9 ^1 H) F% {- K) S; t# |5 ?                PutStr(2,0,"按键3 : 手动开锁");
) p& S$ C; S. y# W                PutStr(3,0,"按键4 : 修改密码");
* B( m8 j, c; a, q. z% h( y. x}
% |/ F+ i% X( {0 f8 S3 r9 f' `
  X+ c2 ?+ r; F3 Q  H7 I
0 U, J4 Y9 E/ [' p) P* Dvoid guanliyuan()' @& f  H- M, S% ]: _( o
{    & Z5 v1 ?: Q! }+ h. k$ x7 E: \
      uchar i,j=0,x=1;
1 g; H- M! L1 S" B             uchar Right_flag;8 J% h1 s/ n  C& F' s9 D
      LcmClearTXT();( B9 [( M+ ^$ ~! P; Y( Z* ?
          PutStr(1,1,"请输入密码:");        2 w0 X7 M" k( G
           for(i=0;i<6;i++)mima=0;                                                                        
/ Q" O$ }# q  @           Key=Keycan();
5 }+ @& ?/ _2 O5 X  q9 ?1 u      while(Key!=queren)
/ Q0 j8 R! [  l9 b" E" Q           {
# @5 F( q3 x( \5 r5 V' J             Key=Keycan();. K& z$ R) M+ k, p5 L+ f5 m
             KeyDeal(Key);1 d% [' o5 A$ o: @% S- H$ B' [! e  c
             delay(30);                                                              8 R* E# S) \- s& k
             if(Key==0)K=10;
- a  {0 [% r7 E/ g% f( D+ u$ D             if((K>=0)&&(K<=9))- x! z% l* Q* V( y& i
             {
" ]* W  z: N! H0 D/ k* q% ^              mima[j]=K;0 \  R( E, D7 j4 K5 d% b7 p
0 A0 H# H: U1 D0 |6 U
                  if(j<6)4 l. K3 H! n: ~* I3 \  I$ @
                  {        
% Y5 B- [- w( s/ H. M. }% D4 V: @                   WriteCommand(0x89+j);                //指定第三行显示位置; G% P1 [, ?) D/ ?5 H9 J* e
               WriteData(0x0f);        3 N% ?7 J4 d6 @6 X8 d* q7 Y: ?

: }8 S% U+ F$ P8 X6 r4 N2 ~) t                  }+ `( V& E6 V: [. d3 ?2 p7 a% q! D
              ++j;& ^- T3 d4 }* T0 \- y
                  if(j==7)
- Z  |7 W* m, `+ O: w              j=6;                                                                                                  
+ z  A3 O: Y( m7 a             }   //显示LCD12864并行显示 3 D- X. O; x/ T8 M" Y6 Q
                 if(K==34)                //按了删除键7 u. ?2 H( J( N& F9 x6 e9 r7 ~
                  {
. v7 b4 r5 J, p  v" {                    if(j==0); p: d8 e8 T6 I; e! x" n2 O) F. v) z
                        {" \6 J2 d7 N* ]
                      WriteCommand(0x89);                //指定第三行显示位置8 z2 M5 o% u, O3 K9 B1 t
                  WriteData(0x20);3 X% g, c1 p3 c- Y: v/ s7 ~
                        }# }7 A1 I. f$ `' a7 Q' c
                        else
1 y; f7 }# n2 w" r- M7 x3 W% N                        {# D1 u: v" ~# |, V( i( O$ o
                          --j;0 \! h  X, K8 t8 z% T
                      WriteCommand(0x89+j);            //指定第三行显示位置6 L, J' @5 H  Z7 q$ Z
                  WriteData(0x20);
0 K" i  V4 e4 V) [9 u9 F' M* x$ g                        }
# B- ?5 ?0 Z, V                  }
9 b- j4 w' N. K1 @/ T1 e+ ?0 F' Z4 f           }
( |0 j. U' W, ^4 x1 p$ |  D) g! K    LcmClearTXT();; [4 k% E8 a9 Y

! s; b: J  W4 p# |( l
* P0 H* z% r9 H/ _" X2 T          for(i=0;i<6;i++)7 c* V) T3 K* h4 w. Q: f
         {! K/ C  ?' `' c, c( y
            UserPassword=mima+0x30;
8 @4 p5 d" x- e# |  f6 `) \7 f/ ]. V6 |0 u( n( O& q# c5 u
          }
" ]6 r% p" r9 F         if(j==6)$ i4 ^9 U( f6 c  d4 Z1 w
          {( z4 B- p! i& {" d3 t! v% J7 Z
           if(mima[0]==1&&mima[1]==3&&mima[2]==1&&mima[3]==4&&mima[4]==2&&mima[5]==0)9 `: l/ {8 H1 A: F" [$ W2 |  w
            Right_flag=1;; G* \$ |. s4 N+ G$ Z/ }
                else
7 k: |  i- _& w1 d0 |+ t) z                Right_flag=0;
) F% y! a5 @" a                      }% A" g+ @+ ?3 M6 j8 d* ^+ ?4 S
          if (Right_flag==1)8 I, Z% g- j  T' Y; A
         {
/ i% P6 k( o9 }                     Right_flag=0;
% ]( ]5 s! ~. b$ [* Q9 S( Q
# _, g9 q0 Z- }% ?  c                   for(i=0;i<6;i++)mima=0;) \6 B$ l# Q7 r9 J; G1 A8 L# h4 A
                PutStr(0,0,"按键1 : 增加指纹");
( l/ Q7 N  k( K3 l# f; ]                PutStr(1,0,"按键2 : 删去指纹");
% J5 _: h# B5 y  E- U                PutStr(2,0,"按键3 : 手动开锁");
* ?, O+ P) Z! w  L! Y9 a" h                PutStr(3,0,"按键4 : 修改密码");8 u8 o% b2 i1 h1 \0 R3 N
     while(i!=tuichu)
7 [9 ~1 O- G2 U& A2 F; X3 s      {         8 G9 r: K( |, G# v3 ~0 O4 T
                 i=Keycan();
% X$ i4 h& C# H- _
% x" u7 x( ?0 b% t: m                KeyDeal(i);  2 }! h; h4 f! H1 ]2 }- q! g
            switch(K)" `. U/ h% ?6 u! |! a
            {* `! z! |" G- r) B( c
             case 1:    addfinger();K=6; break;$ q- t+ s; {8 q# u$ A$ X
             case 2:    deletfinger();    break;- d9 H# E! H/ |  J- Y4 ~/ y
                 case 3:         zhu();        K=8;  break;* C4 n+ M4 V# Q4 y
                 case 4:    gaimima();        break;
( U- s& Z. @3 @; x1 F$ g1 @             default: break;4 ?: M, u- ^4 L- O& {
            }
: z' ?3 i6 U8 v6 {! t& d0 R      }, |- f1 f0 m& c0 l# r5 |
     }
# o" p' g+ \( V' b    else
" i+ {5 ~( r' {& l- J    {3 j% g  F% k$ ?7 p
5 ^; B$ y  s8 [' T9 l* O
                PutStr(1,2,"密码错误");+ P+ R- ^- n+ u& N1 m" c
                PutStr(2,0,"  请重新操作!"); : L( D* {" Q! H8 W  D. F
                PutStr(3,0,"  按任意键继续");
+ i) {4 N0 D- |0 s" w4 U  g             while(Keycan()==0);, Z+ o. q1 ~- `1 ?6 t0 p% b7 `
                PutStr(0,0,"按键1 : 增加指纹"); * J. Y1 s9 V0 y9 a- E! p0 B
                PutStr(1,0,"按键2 : 删去指纹");
. R3 B5 G; |+ b7 x                PutStr(2,0,"按键3 : 手动开锁");
7 J  c. C3 d& T7 ?                PutStr(3,0,"按键4 : 修改密码");
/ b- t0 R# R. v3 M    }  F, |+ d- D  ^$ ]% n
  Key=0;! x, q& b2 F2 g  ^) x" d3 a, L
& w% B" ?: w, C: a9 s* E2 N$ s% l
}- l; ~: T/ i0 i* y
void mimakaisuo()
5 g6 M  \$ j4 X) X, @4 K! ^{3 z- S9 U) x" m
uchar i,j=0,x=1;
. R$ D% B# l- c/ y8 S& D% t, ]+ k             uchar Right_flag;2 k1 V) x$ j; d$ C
      LcmClearTXT();
& k% d- p) B8 F4 N1 ]          PutStr(1,0,"请输入密码开锁:");        
, E3 v5 Y; y6 C% _3 {4 ~           for(i=0;i<6;i++)mima=0;                                                                        
. \3 Y' b( r* x' P5 g: D/ @           Key=Keycan();$ P/ ?" m* o0 t, ]! [! C9 E# j! r! p+ ~
      while(Key!=queren)/ T3 j  g! z: f4 L# ~
           {6 B4 Q" W; q  t+ T5 s, s
             Key=Keycan();
! u. c& u7 k) [; [) A             KeyDeal(Key);
1 G9 X+ ~3 t3 ~. P3 q; u             delay(30);                                                              
4 ?: X% L, h4 N" u% |9 v8 a             if(Key==0)K=10;
8 ~) }7 c0 y. H# y             if((K>=0)&&(K<=9))$ {  V( q. l* t' u
             {
3 I$ t. f! i" c5 i4 z9 ?              mima[j]=K;
3 D' f8 `/ \8 o* y8 k
! ]; y% w; X: E2 P                  if(j<6)6 W& h1 k6 L' t- S. O3 n+ y' H
                  {        & m( \0 \5 U5 E8 \  L3 o
                   WriteCommand(0x89+j);                //指定第三行显示位置4 s: ?, Z: @4 Y" x/ G8 @
               WriteData(0x0f);        : l8 y( F9 Y  [0 u
* Q8 A: x: Q: Y* Q- M1 S# `4 u- {7 Q7 J
                  }/ A- V4 }5 K7 @2 }2 i
              ++j;9 b2 S/ E' Q  a4 z$ k! Q
                  if(j==7), O0 D$ A$ I3 [
              j=6;                                                                                                  ! U3 O& x: b% p" m/ b6 Q4 R$ h
             }   //显示LCD12864并行显示 & \: F. M+ W+ w" O" G3 p" V! z5 \
                 if(K==34)                //按了删除键% ^0 w: h% t! u3 d! ]3 @7 `$ j
                  {
1 J* R5 m6 m( G                    if(j==0)- s1 k& y: h$ `1 x
                        {
! u7 ^; r+ J$ X# m6 W( D3 E                      WriteCommand(0x89);                //指定第三行显示位置
% \6 N( A* E) |+ e; Z# Z/ p, d                  WriteData(0x20);# I+ E  X. b- F) o
                        }6 `1 [+ V0 @, ]1 O  X8 o. l" R
                        else/ ^. m; n( D; |! e. t: Y
                        {0 K/ W. Y3 h6 g6 b  H0 |
                          --j;- z, ?0 e3 V2 H
                      WriteCommand(0x89+j);            //指定第三行显示位置
! Q9 H! z. f1 `$ Q# p! j                  WriteData(0x20);
1 l6 c! o3 n9 M& v                        }
9 ?9 M+ p! m5 c                  }2 M1 ?* ?. s( h% p: r
           }) x" q$ e/ u' ~8 O7 i( @
    LcmClearTXT();
5 N! _. U# ]! S" E2 O' u9 Q# U1 F! V7 T. U3 I. z

/ J& S7 Z2 N" N! N, q7 `! h6 B          for(i=0;i<6;i++)0 I  c+ x7 B$ z& E2 {
         {6 `6 U) \( H) w
            UserPassword=mima+0x30;
: g% m& N0 f  D. Q
! b* a" _( D8 l5 t+ w9 I, Q9 e          } 5 |6 J* R7 Q! `) t' |2 w
         if(j==6){Right_flag=PassWord_Chack(); }) P- u% [, d% W) R9 I
          if (Right_flag==1&&ErrorCount<3)/ |4 R( q5 W7 \; G/ G$ Q
         {
% H' K/ H" j3 A* [- E) @              Right_flag=0;; J+ D9 l9 b3 F! z7 Z
                   zhu();ErrorCount=0;  ! J. b2 |0 g  M# j, _- h6 b
                 Feng=1;* I$ K/ l8 o  |/ I; x$ x
                  for(i=0;i<6;i++)mima=0;
# w: A& L. R7 j8 t! u  ~" }5 U     }" \! D' }' S; C9 A. z. B
    else
2 O7 P) M; @% d. G5 M, J    {
  J3 m) L$ q, [2 y# n            if(ErrorCount<3)6 x: k# s! [0 |8 ?2 {; }# t8 Y
                ErrorCount++;0 i5 e; \& r5 H2 [; R0 `) m+ l
                 if(ErrorCount==3)  @: G, b9 [5 M  _' \3 R
                Feng=0;  D- ~3 z- V" V0 O1 [+ i

/ l( f; L& |- m/ d7 @  [" C: ?                PutStr(1,2,"密码错误");4 r; m9 t/ }" B/ \2 _
                PutStr(2,0,"  还有  次机会");
" s) \2 P. i7 h1 ?$ y( p                PutStr(3,0,"  按任意键继续");
5 Y/ e0 q1 D+ z. v, J                WriteCommand(0x8a);$ Z& d: E) E4 \- c1 V: b0 f. ?
                WriteData(' ');! p* j7 p+ S* O4 h8 O& c3 U
                WriteData(3-ErrorCount+0x30);3 B7 U1 L( o" W/ r

8 ^6 z, k. g# [: g( e$ R/ L, z                delay(1000);: {9 x8 u9 Z, l

. z& M) \0 _& X    }; P4 U% S! b$ X+ p
  Key=0;
" g& p; X( s& e; L  LcmClearTXT();
1 N$ u5 b' J, J}
. A4 A0 I; [- t3 D. _void fan(); R( s9 g6 q: d# k1 N
{
7 |' [0 ^( m  t% L! R//        PutStr(1,2,"请先按键");3 v/ a8 k3 d' M0 z5 r& o
//        PutStr(2,2,"再刷指纹");
3 @: K1 ]2 q' C0 u& Y  if(Key!=0x81)                        //管理员操作, s' P2 z" D% M3 u* x& d9 @
  {
0 c( P8 w  L6 l$ D        PutStr(0,2,"欢迎使用");  C# d; [9 _& Y) {' U
        PutStr(1,0,"指纹密码门禁系统");) \: C' [- C+ g# r
        PutStr(2,0,"密码开锁请按 C键");
6 o5 k# e) ?# {- g; q2 I        PutStr(3,1,"请按手指开锁");0 `* b0 k. [' E/ b+ |7 |3 F# h
   }) `* v1 M0 e4 X3 Q' z" p
  Key=Keycan();0 a' _! o! T/ r4 V
if(k2==1)                //指纹刷机" ]9 I" u) u9 m4 G+ ~
  {+ k5 r5 X- e' Z" \* k& Q; L
          LcmClearTXT();
( g  K% {9 A/ x- P4 m0 q( C' l         shuazhiwen();
7 a7 K4 K( |( H         LcmClearTXT();/ B' M. m% F% |; }' A# i( S% d5 V
  }
, H* P' j" |) u2 W$ x# n: }4 L+ W  if(Key==0x81)                        //管理员操作
* \2 l6 ]9 k2 a- i  {
- V/ b  X( _7 \+ j        LcmClearTXT();
  Y1 ^" {# o( H" O) h        guanliyuan();
. o) I' Z) d: z! `& I3 c" W    LcmClearTXT();
  Z0 f! M  b. R4 r  }+ ]; Y. W% `: m
  if(Key==0x84&&ErrorCount<3)                        //密码开锁  g! R8 K. O2 k% O0 d! c
  {
; d, B8 Q) E3 o; E6 G        LcmClearTXT();+ W! W1 i* ~* z2 |3 b
        mimakaisuo();
  L$ {' H8 g( ?% U    LcmClearTXT();4 {' n3 z# l2 L8 \( k' r; {
  }
, j1 u$ m$ G: q$ W$ H) s: `) F. \
}        0 m- B3 {0 n0 X2 Z& K

- W: f5 ^2 H  u2 G7 C. @void main()
/ U% `$ b/ A3 x# ?8 p* `{         
. n$ E* w& e) P$ m5 h" I9 S  t; Y( ?( |, O# E% @
//PSB=0;0 T! J5 \, G  h8 Y0 z6 r1 p, c
        UART_Init();           //串口初始化                  
7 \* o8 Z: A+ N% a          x24c02_init();     //24C02初始化
, q! I+ @% J2 S; ?5 m1 w0 `  y        LcmInit();               //LCD12864初始化                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
1 j1 f# s( ^$ G3 w        LcmClearTXT();           //LCD12864清屏        
- l9 O- D; B4 v4 Y9 w+ U% \        while(1)
' |& O  }; \( V! t/ }                { $ [1 n2 f6 ?- a; x
                        fan();
3 y: h1 R, O/ b. O2 d9 K( q  t/ q                        delay(100);                  
; }% e/ ]! s* _: t7 |0 D" \                }        
6 d  D4 w* F: ?% ?; I}% Y7 H) N7 A- w9 @" `% k; R/ Y
( Z. n; h$ v. w& K4 U
//外部中断解码程序_外部中断1
8 t1 }4 W. q$ p. @. E; hvoid intersvr1(void) interrupt 2
4 H$ |6 m4 r# V2 r{
: j0 ^* v4 P; R  }: j: E" C( r5 b  W TR0=1;" I' B* h; w& ]& T5 n& S. V
Tc=TL0*256+TH0;//提取中断时间间隔时长
& H5 H! r* C) {' G5 q2 N1 [8 n; Q TH0=0;
1 C& m4 z5 {* t& p4 E" N TL0=0;         //定时中断重新置零
" m8 ~6 q1 N5 g
  T) D; N4 V& e; R& b& Z3 p if((Tc>Imin)&&(Tc<Imax))* @; P$ o: v1 A
{ / @/ j& u% x& c2 y0 ]1 G& f; d1 ~
        m=0;8 _; x" C7 M8 s
        f=1;
, s' z3 x) W3 B# k        return;: D0 K4 E' }! N; S" M, d
}       //找到启始码$ r% G; w9 N1 T) z+ Y
if(f==1)
5 p0 C9 @- s( h) ~8 h# `4 W {, \9 M- d# E6 a1 m
        if(Tc>Inum1&&Tc<Inum3) ; R+ b2 Q- ?8 ?2 }& M
    {3 o! ]" s% u7 M' f
           Im[m/8]=Im[m/8]>>1|0x80; m++; 3 `) y: K& A9 b. [% z( e" {+ g
    }+ Z( ^! s8 t+ x9 A! t2 u6 F
    if(Tc>Inum2&&Tc<Inum1)
' w. X) J8 M5 K9 Q) }: p: s4 U    {
, S7 j2 i- B# Y3 q      Im[m/8]=Im[m/8]>>1; m++; //取码
3 ?4 j6 q; @, t$ v7 g           }; z# A& t4 A- A- W' y9 X7 c; S. N
           if(m==32)
; y% v% N$ f' r+ H6 `% e: f    {
* i: [, w: A# E5 g" r0 t) r9 t      m=0;    g% n- ?5 u6 m& A+ S- ]
      f=0;* g4 e6 M3 o8 n: }  V! [
      if(Im[2]==~Im[3]) * A5 B) C; D  h# w+ B  s" M
      {  a. G) e' F9 a) c8 f$ o$ d& f
           IrOK=1;$ Y* P7 i% n0 Q5 H. l- }
                          TR0=0;
! S: ?0 L- k9 I2 a% j1 x% M) q6 f; y           }' ]& f) }3 `( o0 p8 L# t1 R# o
      else IrOK=0;   //取码完成后判断读码是否正确/ |+ z) l3 e) a

9 n# ^  a) N+ w  Z- h2 x$ A  T" t2 \- [# t- i
…………限于本文篇幅 余下代码请从论坛下载附件…………
, d( h6 \+ C: ~5 u% O' n
游客,如果您要查看本帖隐藏内容请回复
2 i9 b. q) g+ {; t& p1 i

- h+ v6 L4 q  f8 Z9 l) s& A

该用户从未签到

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

该用户从未签到

3#
发表于 2020-4-5 09:15 | 只看该作者
: A6 C$ t' c3 X( a7 j
学习一下,感谢分享啊, 谢谢!

该用户从未签到

4#
发表于 2020-4-19 09:28 | 只看该作者
红外遥控指纹电子密码锁程序学习一下: ^& Y7 h) C+ b& z  H) c
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-7 05:49 , Processed in 0.203125 second(s), 27 queries , Gzip On.

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

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

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