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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机的红外遥控指纹电子密码锁程序; [" W! M0 j  o( ?+ a( R/ v
0 K; n$ o! h$ S. j4 h
. O2 o% \- _. K( m& \* L
#include <reg52.h>
% L, `) j9 ?; o  [, w" j#include <intrins.h>" Y& B8 T! s& Y
#include"24C0x.h"
1 I' n6 p$ B- m7 q' W$ z#include"LCD12864.h"  l$ S& }$ g& O
#define uchar unsigned char  F" ~& L  {. j+ I9 ^
#define uint unsigned int
) Y4 }) |  J) O: l1 u" y( ~5 j! E
1 q2 g: v, r: ?8 L1 [) g+ r#define buffer1ID  0x01* `, q" N- Z) ]5 E$ }* r( t
#define buffer2ID  0x02- W1 q5 ]8 x: b: M$ L
#define queren  0x88
0 [9 v* r! h5 |% V9 g- Z% x#define tuichu  0x86
* \# a& j! a& [& v; {& K#define shanchu 0x84
4 z2 {1 t% m4 b* Z! g, T0 x
4 N5 ?& d; [* i. v- R#define User 1                                     . Q) b; }1 r- V- C7 o$ m

4 H9 I* E% u+ Q6 P8 Nvoid fan();
% h9 f6 I: L1 x& n; z
' D1 J, n4 g& B# asbit B0=B^0;
# U& _8 N/ \2 E' C7 C0 Tsbit B7=B^7;
6 F: b1 a: ~2 ?5 D# Ssbit k2=P3^7;
$ A  s% r* }. r* G, J3 |sbit jidianqi=P3^6;
( L! ~+ h/ f, nsbit Feng=P2^0;7 `  `5 U8 j8 c# k

! k& U* K% D. H1 S- wextern unsigned char times[];3 X& Z/ F( Z( l/ Y* z  i2 A
uchar  Member=1,sec;. ?# S! k; m: @+ P
uchar  ErrorCount;
" ?# W9 L5 H* l/ C) h" c7 [  m//////////////////////////红外相关//////////////////////////
' N- ]6 _' ]  K5 A; s) R8 q//时间计算
/ B3 r  O2 W0 P2 s$ y7 C7 Y#define Imax 14000    //此处为晶振为11.0592时的取值,
, P- l8 v/ ]) s#define Imin 8000    //如用其它频率的晶振时,
# y; d4 Q% B- {* ?) Z4 q#define Inum1 1450    //要改变相应的取值。" `2 ]) [4 u4 E( K( k, ]
#define Inum2 7000 * _+ y& c6 h( I; P* s, \1 l
#define Inum3 3000
% @- N5 h/ R2 s//解码变量) e; j" q7 I0 t0 B4 V3 P, s
unsigned char Im[4]={0x00,0x00,0x00,0x00};
/ t2 K9 {7 K7 s* ]1 }0 j1 v3 m+ u3 u' T7 F
//全局变量
2 R9 G- w  T2 ^0 D& h- g! o4 }uchar f;
* R, }, K" r0 x8 u' M# ~4 `) o) Zunsigned long m,Tc;
# S: I. f; G( |* h# [/ N. M$ J  Junsigned char IrOK;
: Q0 j% j. S. j//////////////////////////红外相关//////////////////////////
  s8 ?; d8 [/ \' s% uuchar  code buffer[User][6]=
1 s& h1 y" e1 M* [  o$ J; Z5 L{2 M% S* u0 ?/ H$ p7 K2 I$ a  c
{"000000"}
8 `6 y  B( j! G. S# R) e};
! m* E5 N5 V0 [: C0 C1 {% q4 u9 @
* K0 L! P- Z, y4 W; `5 d/ S& e: C1 S) N
uchar dz[4];% o1 x* D6 P8 C% D1 l) s, b
uchar time[4];                        
2 @( h* X8 U& d# duchar mima[6];" C: t  \  P' Q
uchar mimag[6];
* e7 w" T+ a0 J7 n9 N( puchar mimaID[6]={1,2,3,4,5,6};
- a7 b, [) ]0 e" o1 ^2 q% I- D$ F9 i& D; D  o1 k

% d8 Z/ z  X: f) guchar Address1=20,tempx=20; 5 o+ [" `" Z# x3 c  J% s- T) S
uchar Address2=20;   2 n4 U8 i9 V, M9 u
+ P4 o8 U( K+ j. ?6 x
uchar data K;9 b5 N1 c* s# U7 ~8 n
uchar data Key;
/ x6 _) ]7 `& ^  A# D- g4 r/ E& w3 Y2 [, z8 R! }8 f
uint PageID;
7 S  K4 C  |4 s+ {# juchar data querenma=11;
; Q1 e/ N8 Q$ I9 I1 iuchar sum[2];
# |$ |3 e' |+ A0 Vint summaf,summas;
; @8 S3 p) v4 t- ]8 z4 l; O- W$ q- m" b1 ]  Y" k9 {( r
uchar  xdata UserPassword[7]={0};//密码
, `% F) H. g: L/ }uchar  xdata DSY_BUFFER[16] ={0};//缓存. \- _3 y& V+ x% j1 S, j" U- x

" L9 O% E) g3 H5 K( `: A
( @# R, _# h& F6 z) Wvoid Red_Init(void);
4 T8 D+ ]3 d# L, Q7 u#include "zhiwen.h"
3 s% r. [! I/ _6 c) h9 u, r/ u//检测脉冲宽度
# {6 W: f# K- ]. Gunsigned char check(void);
5 t+ A- f# `' t  j( T% B% G6 ~
' B8 a4 s7 x. R. `+ e' Iunsigned char redchange(unsigned char rednum);
$ B, {4 G3 o* F% y1 f# s* U& _, q5 M+ ^0 @0 S6 w5 U

6 {  P9 S3 o# @9 Y2 i% z3 A$ k) ~1 q( Evoid delayms(unsigned int z)
$ M/ w9 a. a0 ?$ g  [{
; ]5 V0 ~3 X9 U3 H- G        unsigned int x,y;
$ {! [5 g( D) b" G        for(x=z;x>0;x--)$ _" i0 N) o2 V# r8 c; }' h
                for(y=110;y>0;y--);
; d1 b3 l' x; \( y4 g9 Z5 I}  N) L" L/ ^4 o( Q. {1 }( J
& j2 Q. `3 a! O8 P& x
/********************************************************************
5 v+ Z8 ^& Q# @( Y0 g+ P  N( U* 名称 : Chack(uchar User_Number)
  |' b5 O$ M7 g9 R* I' D, ?! `3 }* 功能 : 单一用户密码检测
# Q# a; `' u% \' t* 输入 : User_Number6 s) k3 I  t+ c- k5 ?+ u
* 输出 : 密码正确与错误,错误返回0,正确返回1
, M! [9 Q  L+ E1 S3 z********************************************************************/' |$ T% V. z6 t3 M: o* F: n4 J
uchar Chack(uchar User_Number)) ~) ^* }9 X0 {# p
{8 X! g9 U! s0 K" ~* U) S2 o2 j
        uchar flag, i,temp[6],Address;
+ i/ B( P  A# i6 s! ?9 U        Address=User_Number*10;# Y' v& ^2 ^7 e$ b+ ?5 E1 S
        for(i=0;i<6;i++)0 a( ]& U* N6 s! p7 {
        {
3 G% [* C' M2 P) e' V                temp=x24c02_read(Address);, s- V/ I* N" z8 V$ {' i2 U+ [2 h
                delayms(10);! W( t1 H5 o' S/ f
                Address++;
3 ~% \2 D; C- i0 Q6 A  F+ M6 Y* S0 ?        }
$ ~& k, J0 C- A+ ^+ B+ M        for(i=0;i<6;i++)
6 \4 A6 n! [# q        {
7 W- @6 h) Z& g: i7 H                if(temp==UserPassword)
0 J+ _& [3 L. S# h, t, L                        flag=1;5 o9 s8 i' T6 P0 H: H% o+ h
                else         
, y6 d: T& S: Y! n  n$ T                        flag=0;               
1 X: S1 ]1 P, F% Y        }
8 G& W( f" s1 X& Z                return flag;
' R) Q" g- f+ _/ S9 U}+ v2 \: t) ]4 b2 M5 C1 }' }
6 X( w/ B$ G" \+ k4 m* b
/********************************************************************
: i! d. h+ n5 H; w, P$ p% h9 e* 名称 : PassWord_Chack()
* a" M/ v' R; ]" c9 A! Z* 功能 : 所有用户密码检测  |0 Z' Z- ~3 {3 h4 t, c
* 输入 : 无) D1 j/ i) r8 h) y: A* Z
* 输出 : 密码正确与错误,错误返回0,正确返回1
0 a( C& J# T, M# |# o' S; @; l5 [********************************************************************/
! [/ J0 }" w+ [: r- R! fuchar PassWord_Chack()- [& T5 a9 B6 {* Q. H2 q+ _% R
{  P1 E/ x- b  [; f
        uchar i=0;, t- D  T! z: n: l- H
        while(i<User)
# z, ~7 Q5 A2 J7 t" e3 ?        {/ D! t2 y$ w1 o) X
                if(Chack(i)==1)
& Z6 u) _+ s, i% @0 y$ R, S$ E                {+ Y8 R4 p  O* C
                        Member=i+1;+ |8 r, M1 S/ V' p7 B/ q* S& Q9 Z
                        return 1;
% n0 j# p6 r. s( j# t) z" O5 H7 E                }
  T# W+ H, h- N9 @+ T' v/ q: a0 U                i++;        
8 h, O% S9 b, c. D& y' ^        }4 G' F. c2 d! |: Q8 e9 f8 G9 i
        return 0;        / Q9 y$ e0 G9 u9 U
}
6 h* M3 O. n6 f+ j2 w4 @- d/ E% s1 Z0 ~4 O% m
void delay(uchar tt)
7 e6 q3 T0 t7 b1 T. V1 j9 l- ^1 G: z- z6 [{  uchar i;
6 S" V1 I* K' W( y% W   while(tt--)
: @" |+ B5 h( a9 R   {
+ @- ~9 \, K) w9 i   for(i=0;i<125;i++);
( n1 c0 R) O# a& j. S8 I( A4 e. C+ B1 k   }/ w  ~. X8 @- k2 ~! E
}
0 K3 b% T/ T1 ?  K2 R2 C4 m/********************************************************************
' }! D/ m# ?6 l* 名称 : UART_Init()
; @$ a: i% l2 i* 功能 : 单片机串口初始化# H' g3 o5 N& L- m- o
* 单片机:晶振11.0592MHz 波特率为9600bps
, t; e% ]; o* J/ H# P* 指纹模块:波特率为9600bps,; u6 C$ r2 ~6 B6 f; i) i
********************************************************************/        6 _: Z% W3 q- o2 a' _/ ]9 l. R
void UART_Init()+ r/ a: @" X' ]6 y9 M# I0 f% n
{  P/ \" D6 M( N. ^
        SCON= 0x50;               //串口方式1        //REN=1; 允许接收/ N" \/ s1 X+ N" |/ I( n( @+ z; @
        PCON=0x00;                //SMOD=0* T& R# @/ V, m6 P2 u
        IT1=1;2 Y; A9 i* W1 o  Y# r) u- L1 y- H
        EX1=1;5 c% w4 K& Y+ D% H
        TH0=0;1 [# x/ c6 P' W
        TL0=0;% ?3 _# Z* K- G
        TR0=0;8 f& K# o2 W! W+ n0 D7 n, G% J0 N
        TMOD= 0x21;               //定时器1定时方式2
- v  u% r, X: N* O8 N6 G        TH1= 0xFD;                //11.0592MHz  模块默认波特率为9600bps& z! I- X( y# ]3 n8 ]
        TL1= 0xFD;                                                                                 
. y3 x& S3 T/ i& v% i8 O        TR1= 1;                   //启动定时器
+ y% p9 P0 g, {) h, Z$ ~  d" b        EA=1;       , G2 F" D  {( y/ |; B' |/ c1 J
}  r$ h0 R* l( H
  d; X. F0 |8 ^, U7 k
unsigned char Keycan(void) //按键扫描程序 P1.0--P1.3为行线 P1.4--P1.7为列线
4 z: f2 M" o) }$ G- l{% E0 d( r' y0 G3 U- }
  unsigned char rcode, ccode;
' f" \. T* G# j( f6 n+ v  P1 = 0x0f;      // 发全0行扫描码,列线输入/ I, p) z: [" E0 o) t
  if((P1&0x0f) != 0x0f) // 若有键按下
9 t! V# H6 |1 R% X* q6 h, h, a  {
  o) q' a! K9 m( Z1 \    delay(1);// 延时去抖动 ' p+ ?3 {$ j0 }$ {$ v& p2 p
    if((P1&0x0f) != 0x0f)! W' E! m: y  T) P
    {  rcode = 0xFE;         // 逐行扫描初值8 f8 R, g' g. A: L
    while((rcode&0x10) != 0)6 u% M) N% D" a0 e) K6 F
    {
, Q3 A, I( ~: z3 K( {9 Z6 D       P1 = rcode;         // 输出行扫描码+ L  A% I/ O  K& ]
      if((P1&0x0f) != 0x0f) // 本行有键按下
( @$ x2 W5 C, N" c* ]1 _      {# N7 Q/ k3 V  ]
       ccode = (P1&0x0f)|0x0f;
. C& |. J% z7 ^  h* j7 O4 z- K       //do{;}
5 z. I" B5 X$ D) v3 s' ]           while((P1&0x0f) != 0x0f); //等待键释放
  l6 R" a# m2 X0 `' b            Feng=0;
3 e- }! r: x0 @7 h1 D        delay(100);9 z  a+ B& c" g, s9 f, c
        Feng=1;
8 D3 I$ {9 t9 |0 a! e6 s       return ((~rcode) + (~ccode)); // 返回键编码, B9 g1 L7 q# G% U# w" S
      }
$ u: Q3 t* S' B$ O7 J$ H, O1 z    else
3 `8 e1 [0 E! e4 S3 {$ I    rcode = (rcode<<1)|0x01; // 行扫描码左移一位1 e4 @5 V' ?( X/ c1 G: s$ u
    }  S+ p( x4 g# U1 V6 R
    }
2 n6 ~% n- i1 _, e; m# j  }
) {6 a4 f! @6 T2 L: p  if(IrOK==1)4 C4 Y( U: c9 P- E! i0 h. e
  {# h0 f" L/ Z; {. G" i* X
   IrOK=0;. p" d" V7 R$ `9 e( E: }- O0 F( G' b
   Feng=0;& p  p: q& y8 M; Z
   delay(100);: E" U, ?8 M2 U  w  G4 Q
   Feng=1;% F, G0 m  d% W6 b% B2 U
   switch (Im[2])
7 x9 P& ~! i# z8 ~: C   {
2 h) s1 f% d0 a0 t, l    case 0x16: return 0x28;break;                  //0: k( J! l+ t! l. @1 z5 g
        case 0x0c: return 0x11;break;                         //1/ v. r, N' V3 \1 q" `# Y9 Q
        case 0x18: return 0x71;break;                                //2
" |# M5 I& d2 S( m1 A  A        case 0x5e: return 0x41;break;                                  //37 ]! H. N* x1 s$ T* j
        case 0x08: return 0x12;break;                                        //4
! k" G) `8 ]. A! Y$ o        case 0x1c: return 0x22;break;                           //5
' L# @- _6 _9 }0 b, m# F        case 0x5a: return 0x42;break;                                //6( ?$ |% i+ U3 f9 _, F: k5 y" z
        case 0x42: return 0x14;break;                                  //7
  W) H% `; h! V6 L. Q7 v) E' U8 L        case 0x52: return 0x24;break;                                  //8
2 i8 c% Z$ U0 W8 m3 i3 f        case 0x4a: return 0x44;break;                                        //9: Y  x, `7 L# ^/ ~( a( t
        case 0x47: return 0x81;break;                                         //a, S; |; L, P5 ?' \3 x
        case 0x43: return 0x82;break;                                          //b. T; g! D  h; v: }8 l; C
        case 0x0d: return 0x74;break;                                           //c
8 ]" [) y* z5 M4 q& S+ N        case 0x15: return 0x88;break;                                                //d
% F5 o' D/ S+ Y        case 0x19: return 0x48;break;$ G4 y. {3 K! |
   }
6 h+ [1 ^4 T6 g" X0 P: I; I  }  2 u, W$ q5 U& ], y1 {
  return 0; // 无键按下,返回值为0
( {/ o7 l# N1 u7 }  ]}
! N2 |* X3 F! n/ h* s' Y7 c1 _5 L1 u" t2 s
void KeyDeal(unsigned char Key)
# D# n6 T; F. S# J{  //unsigned char n;
: i8 q- G( D; E0 _' f   if(Key!=0)6 m& p. \1 {2 j9 y0 d
{3 j7 k* |# N  q7 l( @, t

7 _, F9 ~. V4 \; r9 ^: z6 S+ |                   switch(Key)7 k! b9 @5 _5 W- l0 F" C! q, X
                   {" Q7 T4 O" @7 x( b8 P) a
                   case 0x11: K=1; break;         
" u8 H2 r) S: m# H: m8 s1 z1 V                   case 0x21: K=2; break;  , z1 @% c  ^* P
                   case 0x71: K=3; break;  , l: E  r' o! ?$ d. E& h
                   case 0x81:  break;      
+ ~- R$ k2 I2 A, j/ D                   case 0x12: K=4; break;9 u: p- ^1 {+ ?
                   case 0x22: K=5; break;
: i# ]+ f/ f" B: s! X                   case 0x42: K=6; break;; O5 t& b0 t3 p' w. X: s
                   case 0x82: K=34;break;                  Y* P5 U9 C, r( o2 n) W4 c
                   case 0x14: K=7; break;0 y' j7 |) ^+ p' h% Z& K3 |% y
                   case 0x24: K=8; break;* G8 H. p7 a- z( x$ j9 C7 ]8 S
                   case 0x44: K=9; break;/ T  `% {& }  Y. `  {- r, @
                   case 0x74:  break;               
  ^& ?- ?3 f; i                   case 0x18:  break;                % M* A8 p9 g/ O- g
                   case 0x28: K=0; break;
# A. Y5 \1 D/ U; P* [                   case 0x48:  K=11; break;6 M3 w; E/ B3 c6 v6 \
                   case 0x88:  break;                5 z1 G3 j; ]/ ?' Z- T
                   default: break;/ C4 d( \9 v! g
                   }& r0 _- V6 `2 P* Q
  }
& H; s: G: S7 W3 x* L$ A* `}+ ~$ A8 f9 b  {4 D$ O/ E
3 N0 \6 _! J# e7 M* |& c
8 K2 T# v' ]- {7 ^1 d1 q1 {- p+ B
void shuazhiwen()2 y3 S: b6 F  U# i+ P% a
{  ^. Q, e1 w; A# ?1 S7 ?" Q
    uchar IDs1,IDs2,IDs3;         
8 h$ H1 t+ P' H# {( m2 n+ s        LcmClearTXT();
' I! b* I4 s! I# r" C0 v) B        PutStr(1,1,"请按手指开锁");      
4 J( j1 g( z* c  s' E        SFG_identify();4 k1 A: b. y8 j; j$ ?
        while(querenma==2)
5 z* r8 Z* h9 i6 y        SFG_identify();
5 b: \+ e# S+ `        if(querenma==0). u2 i; Y7 b2 j  z: \
   {8 L* r8 u5 y8 Y9 U- G/ E7 h  A  X
                LcmClearTXT();
4 d. o7 _9 P0 i, I! |9 A; U                PutStr(1,2,"门已打开"); ; N8 \* u5 S8 Q. l# x/ z6 }
                IDs1=PageID/100;
7 v! J8 p1 f, c; j                IDs2=PageID/10%10;4 I& a. o, l7 V3 S# d7 [6 Q
                IDs3=PageID%10;
" E; [, k- l1 t! ]+ S                PutStr(2,1,"编号为:");& M+ |0 B/ Q$ W7 q1 ~$ W4 a7 r# ^& S
                WriteCommand(0x8D);                //指定第三行显示位置! Q7 n0 r7 N- k) |! ^( \( s# z/ n0 W
                WriteData(0x30+IDs1);" W/ k! O: d- X$ Y3 Q! r
                WriteData(0x30+IDs2);( Q1 N$ G/ ]. a
                WriteData(0x30+IDs3);
; E" p! R* r1 m/ M  D                ErrorCount=0;) w; b5 U1 D( D) Q$ O
                Feng=1;
' Z/ `+ F: b) c! m6 a7 A7 t                jidianqi=0;, y% T1 F1 w7 x! M; b( u
                delay(2500);
& a) g  V  J) R                jidianqi=1;
" |) Y' V5 O3 P3 i6 X, M/ S* V' [$ S3 T& B
        }
% q8 Q! `# a* {' i; N           else if(querenma==9)& ^7 Q& V; `  e9 y- e( u4 C
                 {; ?6 F$ ^: r! j1 a  P
                        LcmClearTXT();' u; S$ \9 t7 L
                        PutStr(1,1,"没搜索到指纹");
3 z8 c0 v2 y' L* R: V: N: G1 q                        PutStr(2,1,"请重新按手指");5 r, e/ O2 A6 R; O
                        ErrorCount=3;, @1 s  t4 l2 |
                        Feng=0;
* p, {% P6 f' r; X; u3 i4 N                }: |- s2 ~3 I/ F& U
                   else - }1 U1 E' R7 n1 v
                {
! t( M# k0 Y% @" u5 H) E: d/ N                        LcmClearTXT();+ W$ }2 a% l/ H3 i; P) x
                        PutStr(1,1,"接收包出错");& a- K3 {8 T3 E) B: V2 g
                }
. p- @. j) j  i( W6 m* ~                delay(2000);
; _  {; f2 J# q" e  C   //         while(Keycan()==0);+ J( T) T8 ~1 K9 D5 I
}" A, ], a! y# x. h5 g
void addfinger()* I/ a$ a. ?' O/ C- S
{  R  s: Q6 o+ m* m+ G
        uchar IDa1,IDa2,IDa3;
! [6 Y# d) \& S1 T4 W        LcmClearTXT();
( W) O. J& ?& r8 e        PutStr(1,2,"请按手指");   
  m! ~! D* F6 K6 H        SFG_getimage();, K% f6 w# B, [- h' t
        while(querenma!=0)$ Q4 H& x1 g3 y  t, u2 `1 `" Z
        SFG_getimage();
8 B( ?3 V, L8 U: U: I        SFG_genchar(buffer1ID);
% @  |3 q* r* D3 F8 ]# s        UART_Init();
7 c4 M* p) a8 @8 f        SFG_fastsearch(buffer1ID);
7 @0 y8 ~7 G2 ~6 ]9 B% m2 B2 D0 t        while(querenma==1)
' z9 d' Q6 m1 p        SFG_fastsearch(buffer1ID);0 B" [3 w: T! M/ V% M0 Z. {

8 o. y* |* f- T3 g+ `6 u5 ?4 s; h        if(querenma==0)
7 H1 X# U. H; F. O        {
* R8 g! i% P0 ]- G                LcmClearTXT();7 P: r7 c/ y& t; z8 }
                PutStr(1,1,"该指纹已存储");
$ p, @: q) v& X# ?7 A7 z! }/ K                PutStr(3,0,"  按任意键继续");
% _1 x( \: i8 W4 K1 G            while(Keycan()==0);
4 ]( _. @  n  ?        }
6 J0 @* Y$ }7 w4 B& _/ S& s        else if(querenma==9). u/ V! w. W. Q& L- V
                {4 @' b& P2 f- J
                        LcmClearTXT();6 {# L3 K/ H  W6 P3 x4 S8 _$ K
                        PutStr(1,1,"请再次按手指");1 B, W  _5 P6 D* w5 \) L
                        SFG_enroll();
! c) w6 L0 k1 {) v9 i5 |; R/ ^                        while(querenma==2)
' C# a  \) T5 o0 x/ x                        SFG_enroll();' Z" L+ S' z# F, M" \* W
                        LcmClearTXT();
3 M- n/ @0 D' m                        if(querenma==0)
) M1 M' v3 I# j% I: K9 [                        { % |' q( ^1 o4 C; c$ f
                                IDa1=PageID/100;IDa2=PageID/10%10;IDa3=PageID%10;
4 |2 G4 d  y# K, d! E" w                                PutStr(1,1,"指纹采集成功");
0 u  k( w& {/ `$ ]1 Y* u. G                                PutStr(2,1,"编号为:");
0 H) \0 n5 t, _                                WriteCommand(0x8D); & r- H1 {& O) Y7 E) R
                                WriteData(0x30+IDa1);WriteData(0x30+IDa2);WriteData(0x30+IDa3);* f  F3 a. l5 X* j8 d0 H
                          }% ~  q* {1 w" Q8 \. C
                  else  if(querenma!=0): k) O4 k% e2 Y3 a$ r% @: f1 U* X
                          {
% }) C1 _& }$ W- [/ N  N
+ M3 Z. ]' D& L                                PutStr(1,1,"指纹采集失败");0 t* g* [- K2 M. p$ J" L
                                PutStr(2,1,"请重新操作");
' f  A' ]& ~! ~5 ?% |                         }
/ |, w& J+ [; {1 s9 I                PutStr(3,0,"  按任意键继续");
$ p8 J+ H) B: k1 c            while(Keycan()==0);) l7 R: S) }. k, }: w  B6 p- |
                   }5 v% F; Q! {+ L5 @* V0 R0 }' I
        LcmClearTXT();: l( u% c3 k& ]* ]0 b" F
                         PutStr(0,0,"按键1 : 增加指纹");
% X4 d3 b' h% f) I                PutStr(1,0,"按键2 : 删去指纹");
  T/ S5 s- s' X) }4 D7 p& |                PutStr(2,0,"按键3 : 手动开锁");9 c. v* ]  K: p# N. p1 O
                PutStr(3,0,"按键4 : 修改密码");
/ m' X" l5 \" h2 G}
3 h: p8 k" w" L* ~void deletfinger()
0 i, `- s7 S6 t* V! [: V( M{
% K7 H. F. p, {6 L1 q: _* X        uchar i,j=0;4 J* i7 n+ c& D% ?: @, ^9 R: ^
        LcmClearTXT();  G% Y/ W! q6 Y/ S- L
        PutStr(1,0,"输入删去的指纹号");7 L2 h2 K. c( {  a
        for(i=0;i<5;i++)dz=0;        
5 o) W" v5 f/ Q( Y* c2 Y0 b5 J           Key=Keycan();
2 k* e0 f/ m" E2 m! \           while(Key!=queren)( ~5 x# n! r/ [; U6 d0 c! z) s
           {
. Y6 O: [! ~( a1 F5 F. i6 E7 D/ W             Key=Keycan();4 U+ u5 O  i& p) n+ S3 _- ^; D
             KeyDeal(Key);
* f8 y+ L, k$ K             delay(30);                                                              //按键有抖动@@@2 a( a) h: |( L! A
             if(Key==0)K=10;
1 c  K1 e' P9 Z8 A+ ~9 O             if((K>=0)&&(K<=9))
+ o' u8 e, K- M* y, [# m             {, D! Q3 n5 j5 T
              dz[j]=K;
% j/ V0 w) t" M2 Y( {! O3 Z4 _) G4 H                  if(j<3)8 F$ I, ?: M; r7 [  n
                  {        6 x* U% }3 \2 t- z2 L0 Q( k
                                WriteCommand(0x88+j);                //指定第三行显示位置
5 W! {, d8 O1 p: }- V2 u: t                                WriteData(0x30+dz[j]);        
2 D+ ?5 l- ]+ t. e8 a6 v4 }7 m                  }  i0 ]. r1 t- A7 F/ L0 W
              ++j;
1 P* f3 G7 o/ U                  if(j==4)  A' n* z/ H3 P  h5 \0 g* J
              j=3;                                                                                                   //@@#yinhuang9 d' o2 m. k8 ^) ]( J  E
             }   //显示LCD12864并行显示
2 {0 N% |% r- k                 if(K==34)                //按了删除键
5 h+ _% {' m- Q7 z. _1 P                  {; K0 w' a4 M. D/ @
                    if(j==0)5 D2 Y% q1 o+ I+ g' z. X
                        {. D# ~- |' f! z
                                WriteCommand(0x88);                //指定第三行显示位置+ L% O" y8 H4 U% b: f
                                WriteData(0x20);
) Z% ^& O$ Z. S( q$ B7 g' ~. W                        }1 u4 P! h1 O/ D( E+ v. \) W
                        else
/ l6 i0 w* Z! {% W                        {: u- O  @! P9 `! w" w
                                --j;) P9 \8 G4 Y7 G2 a/ s8 r
                                WriteCommand(0x88+j);            //指定第三行显示位置, K. E2 L- C4 `( e
                                WriteData(0x20);
( ^- U3 W. r9 x, g8 v! J/ P                        }* ~, C) y! ]  Y& P, [  k
                }/ n8 C  i! Y# X
        }
% u' r3 O, b  ~% s        if(j>=2)- c. w& }7 K8 u6 W1 f
        PageID=dz[2]+dz[1]*10+dz[0]*100;
8 v# l3 t3 z0 @9 n: X3 O6 n        if(j==1)
* O# p) }% s2 C        PageID=dz[1]+dz[0]*10;
) A9 s$ L) [0 E/ K: |: T/ c        if(j==0), t! |8 d; Q1 I+ }. g# O
        PageID=dz[0];
7 m" u' m" G. n# e, R% c/ J' C+ M        SFG_deletchar(PageID);! Z/ ?6 j6 c% L5 {& z- _
        if(querenma==0)( y# m: ^( M/ K) f8 G
        {
3 G8 K( A/ e% g( H) t( d1 {                LcmClearTXT();: a! w$ C# w# @6 C3 B7 |
                PutStr(1,1,"删去指纹号成功!"); % n7 z& k' {! S3 U" q" ^. y
        }
" p- J& Q& N$ F  q2 t, }. f9 k        else
/ f2 |: i5 E7 t        {( K- H7 N: p7 s" V# E# h+ P; C& m& s7 D
                LcmClearTXT();: w% x# l4 y( P3 p8 I$ n8 M
                PutStr(1,2,"删去指纹号失败!");  
0 [9 F9 T# H. F! {        }2 q* D2 ^. |' y' Z% Z) r$ x
        PutStr(2,0,"  按任意键继续");
+ s9 F6 u- H: p8 r0 \  E        while(Keycan()==0);$ V7 n8 d2 h# J3 j, p7 d) `
        LcmClearTXT();
# @% J& q" `+ f3 i  }1 x( b                         PutStr(0,0,"按键1 : 增加指纹"); 6 u+ U/ Y" h  D& K
                PutStr(1,0,"按键2 : 删去指纹");4 X. E0 l: Q# y* k
                PutStr(2,0,"按键3 : 手动开锁");  T7 n1 H% Q6 I$ [6 V! w
                PutStr(3,0,"按键4 : 修改密码");
3 w! D' @3 t' \: s. z}
$ H6 g9 u( D3 D# }0 T/ {! X& X% K# Y0 x3 v% ^6 ^0 O- M8 C, J, E$ O
void gaimima(): L0 y: F* x, L1 P* |5 W
{
9 e; m2 |* ?  H+ E  Z' Y        uchar i,j=0,mima1[6],mima2[6];' b* n, b! ^/ a  Q  @
        uchar k,temp;
2 Z; g! k* j- ^+ ?, T        LcmClearTXT();
" A! L$ p$ r1 d6 I$ F        PutStr(1,1,"请输入新密码");
, [* F$ `* E6 x' {! a4 H6 b' B/ k        for(i=0;i<6;i++)mima1=0;                                                                        
4 J9 t  ^" |! A3 i3 m$ n- Y           Key=Keycan();' K8 E7 h# c  T" [: B
      while(Key!=queren)
1 P: E5 l' |) Z  K           {
% D0 l) w* U  Y- \/ H4 K             Key=Keycan();
7 m8 \8 K  b$ }/ T             KeyDeal(Key);% m5 v- L: L) u- \& B  o) v
             delay(30);                                                              0 P8 k0 G9 p( a, @1 b; `0 `
             if(Key==0)K=10;
& Y& b4 O1 o2 ^4 h' p. B2 z             if((K>=0)&&(K<=9))! Q6 T; ^" v5 [" z
             {
. r! R! p2 Q0 I; j% n              mima1[j]=K;
! p- R  {+ F0 h2 L" ~0 {                  if(j<6)4 ]) }# c, F/ Z; j7 c
                  {        " K" I! m4 S9 T$ |3 p
                                WriteCommand(0x89+j);                //指定第三行显示位置) H* C' G- [! F" g3 \" D
                                WriteData(0x0f);        8 E4 R' m8 d0 j9 Z
                  }
$ v, @1 D" {' Q- h2 N" Y              ++j;
5 p$ T! e5 [; w, W8 d% e                  if(j==7)/ B1 r1 I$ b8 i( G$ A& _4 N( o* g
              j=6;                                                                                                   //@@#yinhuang- g" L1 l. b5 y- p5 A+ U
             }   //显示LCD12864并行显示 0 ?& i! ~1 k4 ^3 l% U6 \
                 if(K==34)                //按了删除键
% \7 G+ A# f1 j6 e! X8 O                  {
( u, @# G9 X( U# l0 M- W# @) Z                    if(j==0)
0 \  t9 {/ c5 Z; L                        {
$ A+ u/ `, f- {, z. s                                WriteCommand(0x89);                //指定第三行显示位置
2 X; L. w6 i1 q! R( P4 k                                WriteData(0x20);
7 o% N. T% `) Y( C: n                        }5 g+ B8 ~1 b' @+ x" S
                        else
) D4 K+ i) |; p+ j/ s: |                        {
+ P8 ?: F# T5 p                                --j;
* J9 P% d) k; |  \/ m: g- D% m                                WriteCommand(0x89+j);            //指定第三行显示位置
$ k) e8 S: f6 R! E4 F; {                                WriteData(0x20);$ d5 y- q& A  ?) e
                        }- r& G* _) j3 e9 P
                }
$ A7 j* ~, l: ^        }
# J* C5 e9 x- `0 ?/ g$ v        LcmClearTXT();& g6 `4 \. b! `5 |( O% X
        LcmClearTXT();
* s  o" n' D( @( F        j=0;
% n0 ^+ o7 x' p. I4 J        PutStr(1,0,"请再次输入新密码");$ u' j- x/ I* U9 Y
        for(i=0;i<6;i++)mima2=0;                                                                        
) B- d0 ]; }+ a; w           Key=Keycan();
6 ^7 K- ~! l" a      while(Key!=queren)
8 d' I& C5 W+ B* Z* a1 r! ?4 \4 a           {
9 U2 _. n4 E/ N5 {7 p% z, X             Key=Keycan();
# N& K4 w: R$ Y( i             KeyDeal(Key);3 |+ |0 K1 y$ A" E, {
             delay(30);                                                              
# w: ~/ T8 j! v             if(Key==0)K=10;2 D5 f  A0 Q+ S' ^! s' ^& h0 Q1 B
             if((K>=0)&&(K<=9))/ F# o3 a5 t4 N$ N/ ?
             {
  R$ k  Z+ m& U4 Q: n9 d+ Q" e              mima2[j]=K;
+ j" f& o" v/ B, M                  if(j<6)) w- w* l+ r- @* Y( d
                  {               
: f% q4 E% y! A9 @! t. k                                WriteCommand(0x89+j);                //指定第三行显示位置+ i; g" O6 T) p1 I8 H3 h" k5 B" K
                                WriteData(0x0f);        . x/ p; t+ y9 g
                  }9 h$ H" F% l$ t2 ]9 h8 l
              ++j;  R+ k0 K, P& v6 w9 Z! d5 V3 Z- V
                  if(j==7)/ d" b. T: g% r4 c% `" Z
              j=6;                                                                                                   //@@#yinhuang6 ?9 U( Z+ t9 v4 d; W7 K& M' B
             }   //显示LCD12864并行显示
0 h9 o: X# ~$ h* u1 [                 if(K==34)                //按了删除键% \0 h$ [; a# r
                  {! Y% n8 }9 Q. o) a1 K' b/ M3 [$ g7 i9 |. ~
                    if(j==0)2 w% W. d6 ?+ b) M& F" ], K' E( Q
                        {
. }# q" c0 d) {0 v' Q                                WriteCommand(0x89);                //指定第三行显示位置' c! j9 Y& |+ q# q9 e+ R) ~
                                WriteData(0x20);
. n" D+ k+ r2 e3 q$ a                        }# w. ^4 t+ j  H
                        else) _4 F* w) E6 Y8 z! v
                        {% ~! Q) I" U  Z& g$ V$ C9 q
                                --j;
* D2 |( [. z. s) b/ ~* A                                WriteCommand(0x89+j);            //指定第三行显示位置7 f- r/ q( k* R+ M0 f4 G
                                WriteData(0x20);
: p/ O# L6 V# H  U" \                        }- Z+ `* R, l1 \5 K- [5 b
                }
. d' [" Q# d4 \' b6 ?. ^        }$ A( [* `3 f( x0 r7 [# j. k
        LcmClearTXT();5 e* {/ h# `( s3 W% G5 u3 F: N
        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 t: @* f2 d/ P        {; u( b! n9 T- b
                for(i=0;i<6;i++)0 P! w  c$ C- e. X# W
                mimaID=mima1;( r3 e$ Z7 I. W# S$ r
                /////////////////////////////////////////////////////
! T% J% W  s: M) Q2 `  z                for(i=0;i<6;i++)           //密码限制在6位以内$ @) m6 P% t+ x! @  f9 R/ i
                {
. _! U- c+ g4 H( o% b- @1 F6 s                        UserPassword=mima1+0x30;                                  ) v' C3 ^: ^# L, y
                }
8 [6 e4 H4 f/ }: s3 k                temp=(Member-1)*10;        
9 u/ W$ x3 O4 ?                delayms(5);1 j3 m3 [% e. d: _2 w% S
                for(k=0;k<6;k++)
' E1 p# }' ]/ N+ ]                {
5 }3 x7 ~8 Y% d1 W# }                        x24c02_write(temp,UserPassword[k]);
! q5 J9 g' }3 ?. x5 u/ c  X* I                        delayms(10);2 V8 c' a+ B' w1 b4 N9 }( |
                        temp++;* ^1 ^7 h: D6 C: i( w6 D! c& M8 A
                }  . l- D8 v/ T$ f# L6 e) L7 g
                //////////////////////////////////////////////////////
9 }" X/ M0 r& Q. ~/ Q                PutStr(0,1,"密码修改成功");
* S3 X1 i4 t! W& S# C( v5 B                PutStr(3,0,"  按任意键继续");3 j; Z, t1 ]# \( d) e
                ErrorCount=0;. c1 r# ?: l9 ~
                while(Keycan()==0);
# S8 H' m# G# c7 X6 t$ l/ A) g        }
( Z5 t: F1 G. m5 i# B9 P        else/ C; a9 A; k  j6 R5 x5 z
        {
& V1 C! ]" |" l                PutStr(0,0,"  密码修改失败  ");, o* C5 u' S; ]* e; F
                PutStr(1,0,"两次输入的密码不");
1 Y. H- ]* X4 b3 l7 W" U! ?: U                PutStr(2,0,"一致,请重新操作");      
2 ?- q( V& K4 h                PutStr(3,0,"  按任意键继续");
" l- w/ I3 ?( U/ \8 v                while(Keycan()==0);9 P5 s3 B/ B2 \8 X5 {8 q
        }
. v. B8 V1 {0 F, k* V5 C; A! k        LcmClearTXT();
; D% E! e, Z# r2 p                         PutStr(0,0,"按键1 : 增加指纹"); 9 U2 k5 @* e: C& a
                PutStr(1,0,"按键2 : 删去指纹");, K. ?; h! A0 Z& h
                PutStr(2,0,"按键3 : 手动开锁");
2 X- B) }* m* q7 q                PutStr(3,0,"按键4 : 修改密码");2 r/ ^5 m$ I5 [5 }3 M4 z
}
" u7 o/ c  B1 x4 n* l4 \
, f7 d; T$ `6 i6 ?4 Z2 T2 R0 ?% e. B; e
void zhu()- }, c+ x. N) `% X: n& q0 j8 f
{           ' Y5 G  y4 x9 A% U+ z+ o
    LcmClearTXT();
- {' m- L" ]6 a9 v& _        PutStr(1,2,"门已打开");' y: I) }- k5 @+ k
           jidianqi=0;
9 S4 f# i( L& C) M! T        delay(2500);
* n0 a# L; s- G- \; U% E        jidianqi=1;( ^7 C- K8 |/ R/ }( z  u; [9 g
        PutStr(3,0,"  按任意键继续");
7 {8 Z. W) Y& |, F0 _& }( x5 l        while(Keycan()==0);
& H$ x/ a3 }( J% M- D( k# C7 J, k                         PutStr(0,0,"按键1 : 增加指纹");
) h% X$ [/ _( y+ {, o* |! Z                PutStr(1,0,"按键2 : 删去指纹");/ y4 i0 d) n3 F! X  p' r( S
                PutStr(2,0,"按键3 : 手动开锁");2 j* J6 s6 F+ O; t
                PutStr(3,0,"按键4 : 修改密码");
' h7 ^1 a+ w& N2 h  E* i9 [6 F3 M}4 \+ F  V( ]$ m! Z4 Q/ B4 e

6 u( P0 L4 Z7 n
4 g  @$ N: {, {8 Y4 e5 Tvoid guanliyuan()& t; E) [" T  ?2 _1 T3 U+ w
{    5 J5 B' a. W3 M7 N- k
      uchar i,j=0,x=1;) o- C! q  h; u& Y9 v# o
             uchar Right_flag;
+ B- N8 T' d$ F/ H. S- f6 F      LcmClearTXT();% }7 Y. ^- x4 i
          PutStr(1,1,"请输入密码:");        7 g/ P2 J1 l  [9 x. e' y
           for(i=0;i<6;i++)mima=0;                                                                        
- ~' I7 x) e. s. _           Key=Keycan();! t/ L3 T1 }" \# j  A% B, A
      while(Key!=queren)
% J/ q2 H% d' S8 ?0 P( w" Q* ?           {
, u. _' z: j- f9 h2 p, c1 Q             Key=Keycan();$ F8 Q7 W8 H, |- x+ T, ]
             KeyDeal(Key);8 e0 @3 G4 W' C
             delay(30);                                                              
6 F! V, \! z+ N5 D0 s7 R             if(Key==0)K=10;; P2 G  f$ ]9 M5 s
             if((K>=0)&&(K<=9))! y; V% L, d. k0 O; P) S9 G
             {
' t( V0 O$ K8 J3 @# j4 x0 F. z              mima[j]=K;
: f3 n' V% t  A3 {: d5 P
5 H$ e$ ?8 U% M2 ]& j! E( b                  if(j<6)
/ p' K. z4 B" r# ^# N% z2 g                  {        * W8 R" h. J$ i( h/ b5 W
                   WriteCommand(0x89+j);                //指定第三行显示位置) T5 @2 k4 I' V- Y# z
               WriteData(0x0f);        
- ?/ m3 D+ i! ]/ E. m, a% o* V5 ^% {4 P1 T; O' Q8 j/ P
                  }
& Y1 |: o6 V0 n0 @4 ^/ v  l              ++j;$ S; V" m4 K) Z" V* C& T1 d- `
                  if(j==7)( V/ L7 q1 P) k8 B; L+ i* E. P6 o' y7 n
              j=6;                                                                                                  
: j  m, x4 q& a1 o             }   //显示LCD12864并行显示
! S5 L0 ^" ?  B2 L                 if(K==34)                //按了删除键
( ^) p' o7 H8 y. t. g3 W                  {8 H7 P" x: b3 E+ w- \; G
                    if(j==0)
& f2 h+ Z8 L' c8 g* Q                        {# Y- {7 \0 U5 v3 g% O
                      WriteCommand(0x89);                //指定第三行显示位置3 ^7 L* h! @* {! K' d4 D. @
                  WriteData(0x20);
/ l0 v* ]  A. t$ z                        }$ m. T; W' r( C  v
                        else7 }/ m; d$ }+ i% x" p% x
                        {4 g/ t" F3 G0 h4 c) o
                          --j;
# w4 d7 \6 {3 X                      WriteCommand(0x89+j);            //指定第三行显示位置
1 e& _- Q% y$ D                  WriteData(0x20);# S+ Z- k" q: ?2 S
                        }
' G% X" x. `% E                  }
0 d, ?4 }- ]( T. A8 P4 N           }. ^9 l% ]+ S$ `2 E; S2 o
    LcmClearTXT();
2 {/ I: V* J& y- s+ F
' Q2 ]+ p- S- d3 D$ i7 p7 o3 E5 P6 `3 S' A# ^
          for(i=0;i<6;i++)  ]& x1 B. |! Y# z, |- k" v
         {; u5 ]1 b4 |( `1 z' l
            UserPassword=mima+0x30;3 v6 b" }2 m- O/ C
) f+ \- @) Z- z1 G
          } 9 i/ s: {5 B8 ?1 S2 c# f4 ^5 f7 S
         if(j==6)! K3 s/ f0 o# N/ L
          {  @1 J; D/ e% g- \
           if(mima[0]==1&&mima[1]==3&&mima[2]==1&&mima[3]==4&&mima[4]==2&&mima[5]==0)
, z/ w: w& o$ M5 S            Right_flag=1;
& q6 _( |1 u" l8 a' U1 e                else3 K' t0 U8 m6 s  h' D& c' {
                Right_flag=0;
6 R* ^2 b5 T5 n+ i' v                      }
1 `1 R8 P2 |+ L0 ^. y- M+ L          if (Right_flag==1)- c, h  K5 T' s& L% z4 Y* j$ x
         {
8 T: \1 \9 j; }8 Y0 b                     Right_flag=0;0 C8 w9 E* `1 Y

" X6 }$ H1 U% b( n. {                   for(i=0;i<6;i++)mima=0;
2 C. h9 @8 F; E4 N( Q# m, y8 F                PutStr(0,0,"按键1 : 增加指纹"); . U* W5 O3 w  g' B/ F" d# d- a
                PutStr(1,0,"按键2 : 删去指纹");' U8 I" ~, I' M
                PutStr(2,0,"按键3 : 手动开锁");5 q) a+ Q- `3 x0 F7 v, `+ X
                PutStr(3,0,"按键4 : 修改密码");
8 r$ h5 }# i7 o% S, z     while(i!=tuichu)( a, k7 f- a: r. G% I
      {         1 R2 @3 v9 b' ~6 c
                 i=Keycan();
0 l# t/ s' f9 Z, r% |
  W2 e3 i1 ?  E7 [                KeyDeal(i);  
7 q3 @* F# P2 r# M( ^6 S9 J            switch(K)
; U% _9 O1 i6 G8 H  f: \            {
, y% J# Q3 F2 x! Q4 K% l& f             case 1:    addfinger();K=6; break;
; N1 C8 M5 G# K. Y             case 2:    deletfinger();    break;' Z% Y( m* b  `3 f( o
                 case 3:         zhu();        K=8;  break;  c7 d* e  L/ b" c
                 case 4:    gaimima();        break;4 v5 }2 J1 V! W+ F
             default: break;& K8 o$ O+ j9 ]* O* @" x. g
            }+ f) H( ?" F. A! e- w8 G1 l
      }
; a7 W4 b7 l" B) X# z* D     }
3 A/ ~8 J( n9 }1 w: Z5 w" \( `    else
" |: D/ a- s$ \  z% {    {
& c+ p  W1 a( R. S: Q+ \# d% O% r4 o6 H, c% |, {7 Q" S
                PutStr(1,2,"密码错误");1 J& Y9 M, p9 Y9 ^  v
                PutStr(2,0,"  请重新操作!");
0 m* z) e: K' p                PutStr(3,0,"  按任意键继续"); % g5 U  C5 M' R, [) Z8 i/ [% O. |) _
             while(Keycan()==0);
* I9 |- }9 b) J4 I                PutStr(0,0,"按键1 : 增加指纹"); 2 Y6 Y+ m9 A5 d! Z: `/ l" m
                PutStr(1,0,"按键2 : 删去指纹");
4 s9 x8 E, j3 C+ f                PutStr(2,0,"按键3 : 手动开锁");
5 C3 _8 j' B% M4 Q                PutStr(3,0,"按键4 : 修改密码");
1 z% ^. K  G  l8 @7 d8 @    }/ v( j% U4 H# O  v1 k
  Key=0;
0 J# C2 x- `. f2 |* p6 i( [, |
$ E* n4 j  F9 J& B. `% t}0 g& a- y! t& j
void mimakaisuo()
! i, v& h% c( N4 P{
& `$ J4 C. p9 b+ ` uchar i,j=0,x=1;! a0 ]: m( }5 y$ S
             uchar Right_flag;
* A7 L0 r8 x2 W0 D. a      LcmClearTXT();
. R0 ~: Z5 ?/ Y& Q          PutStr(1,0,"请输入密码开锁:");        % {. F5 d' P3 h$ s0 |/ A
           for(i=0;i<6;i++)mima=0;                                                                        
; o, P; {5 S' ~' c2 L) N* P" K* g! y3 u           Key=Keycan();
% x! Z2 q9 q! n( u2 P5 M9 r      while(Key!=queren)
; F. P; \7 S) j* t           {" h, t& R1 C$ l- `, d
             Key=Keycan();. m; x4 E. U5 w7 y
             KeyDeal(Key);
; @' W( z: F( z, l/ Y% Z/ {             delay(30);                                                              
& \2 B/ J/ F; M             if(Key==0)K=10;
2 l1 z  d5 s. F3 u5 s( A             if((K>=0)&&(K<=9))# y9 o4 I: I9 l2 ~. Y
             {) P/ B3 X4 x' i; D% K- P& R2 u* ^
              mima[j]=K;
3 D' F% K9 y# W6 [1 X. @, I4 }
7 [3 ?4 E0 q) U9 b6 S1 h                  if(j<6)
8 X5 S  m) v0 n' G                  {        
& x' o3 D' @: o. \                   WriteCommand(0x89+j);                //指定第三行显示位置( u$ N; Q) ~! {4 }; ~
               WriteData(0x0f);        # V( O+ N! D9 y: O3 y4 A/ |! M
+ {; l7 P/ ?# |; i% _" S+ L
                  }
) m+ @  f4 |9 M% C, B$ z              ++j;
2 X0 s/ ^7 h+ G' t# d                  if(j==7)
+ o- y8 R% x3 L  q! J, t3 {* H6 w              j=6;                                                                                                  ( |0 ^( y' S  G: e
             }   //显示LCD12864并行显示
4 M, k" P* B" |: V  p$ Q- c                 if(K==34)                //按了删除键
% ~) ~% P6 p3 p9 Q+ o5 t$ G* |1 i/ c                  {
  \% N2 B$ C/ p! v                    if(j==0)" \# r. ]! g' _: h* ]
                        {( A' {  h7 x, s2 U; m8 P. \
                      WriteCommand(0x89);                //指定第三行显示位置
$ a# ^% Y! N5 l+ |8 i* ^                  WriteData(0x20);
% `! I# D, J5 \8 z                        }3 t  ^7 @7 I9 D7 g6 K# R; ]( f
                        else& Z7 P; c: E& ^
                        {
7 T7 r! }( m8 f- I& e6 [% x                          --j;  `5 P. ]+ X8 t4 T
                      WriteCommand(0x89+j);            //指定第三行显示位置9 d; e( K) `& ?
                  WriteData(0x20);
9 K- H/ a) Y4 `+ {: V, r5 K                        }
1 }) C2 A3 ~* Y0 E, Y                  }
( ?2 e* m  z6 ?4 J* m           }) _+ p  r- ~$ ^
    LcmClearTXT();
8 I9 L1 `( i; Y2 @, \0 a; j& e# m4 g
" b6 a7 K2 O# |, ^/ V
          for(i=0;i<6;i++)- E6 _, n( M8 N" x% `6 R6 Z. E
         {0 g, G) H: x( G( f% Z9 S
            UserPassword=mima+0x30;8 A/ F5 U3 @2 d) W$ b
$ m) j* Q; M9 o7 X8 }* e2 t
          }
: j9 ^8 y; F' z* I6 n% B& o' P         if(j==6){Right_flag=PassWord_Chack(); }
6 k4 t: `3 S8 H6 Z5 D          if (Right_flag==1&&ErrorCount<3)
! \( h" r& W& `- s4 J         {
4 G) z% {' Q* j# [3 a              Right_flag=0;
: W% J' s1 A6 i7 |& D# L0 V                   zhu();ErrorCount=0;  1 e6 a9 F' X- s" r
                 Feng=1;- J. s* s5 A+ J
                  for(i=0;i<6;i++)mima=0;8 n9 ~! u, `3 f4 S
     }. x. ]6 V6 c5 j3 n9 @
    else
& \6 ~5 [. Q, U5 w) V, B  k    {1 y) V/ E5 g, k. {5 h& P7 _! X( N
            if(ErrorCount<3)# ?5 c  B" G1 w; y: J4 d
                ErrorCount++;9 R9 w: n' F" p  X
                 if(ErrorCount==3)
7 K7 t7 a1 K6 Z; u7 \2 ]& |% ]( M                Feng=0;
+ R6 M! f5 E. v, r
6 N/ B! z  a; i  L5 g9 O5 i* p                PutStr(1,2,"密码错误");
0 q) J# W; L9 m                PutStr(2,0,"  还有  次机会"); - M; U1 B( w5 i9 N  k2 l7 P& E
                PutStr(3,0,"  按任意键继续");
4 _2 ~+ q& E) W( d3 j1 Z                WriteCommand(0x8a);
- q4 n9 o, M4 w& S, a- e                WriteData(' ');7 T/ c4 e/ K% T; x5 v# j5 L
                WriteData(3-ErrorCount+0x30);
+ X- m3 H  J2 |: a6 U2 v
. f# w* `* I( k                delay(1000);" C: _0 w/ Q7 j

- H5 U' x1 j- y$ [- W3 b  g    }
7 {9 O; k% d* f. O$ z, l% u  Key=0;1 Z8 |( F4 `7 f: O' j. c
  LcmClearTXT();3 ?8 v; R9 b7 n$ T* v, T0 D
}. T1 a/ |9 ^5 i! _! q! _5 Q
void fan()
) t% ~/ j4 [  D{- G( P  L; g4 P" v
//        PutStr(1,2,"请先按键");
) ?/ Q( b9 g3 u* e6 }  V: P//        PutStr(2,2,"再刷指纹");1 X( e1 C* }# `  O) R
  if(Key!=0x81)                        //管理员操作) K4 v0 U; ~. d2 S: a4 G
  {
1 p- ]& h0 g& n4 Y        PutStr(0,2,"欢迎使用");6 A7 A5 ]% k9 x- i& P4 L2 E
        PutStr(1,0,"指纹密码门禁系统");; G; }, }" }" z, I! @
        PutStr(2,0,"密码开锁请按 C键");6 M8 T7 v9 i5 |7 w
        PutStr(3,1,"请按手指开锁");
" \& M7 [' T- r+ I2 b/ R   }
2 D$ R6 m! L; J( x+ f  Key=Keycan();
# R" F5 v+ S8 b- Jif(k2==1)                //指纹刷机
5 z/ \7 B% i9 B$ L) w  {
' q" q: ], f; t. V6 E& F0 i$ j          LcmClearTXT();
! c2 z' r9 _% E- t# o, P         shuazhiwen();5 |3 {) T  q! }  I; I9 {
         LcmClearTXT();
9 }  A, X" t6 U$ Y- Z  }6 w! c/ e, o/ j# ]
  if(Key==0x81)                        //管理员操作% I1 x! d# t: q; ^7 ?* P% u& l
  {
& x2 o3 v4 K6 ]7 t$ V) C4 H3 d        LcmClearTXT();
3 z/ Y1 V" m) R! _1 Z# C        guanliyuan();
$ C' l! H) Z* H& Y    LcmClearTXT();
' @- d$ y+ k1 W! h5 i0 `- ]  }
& K0 k+ S( U+ z# l$ B7 g% R/ Y  if(Key==0x84&&ErrorCount<3)                        //密码开锁
7 F2 s7 ?3 ~; d  S% }+ r/ r  {' z5 U3 }7 p) H) ~  M4 W
        LcmClearTXT();
/ }8 n- z5 G% p; f        mimakaisuo();
6 V8 P6 P# \  h- z+ p    LcmClearTXT();. n$ ]. ?# H1 K$ n
  }' k9 Q) h* a) P( N3 Y
4 j: I! S0 ], h* _5 [: L, P) p
}        ' z3 d* V' J* q% g: k) Y
4 I0 d8 B' E8 {* ^" s" s4 n
void main()% n( `# P8 ]% H% A, k8 j- K" Y
{         ' ^  u2 g, {8 G9 K# W+ |# F

* ~$ y8 P$ k8 ~7 e//PSB=0;
1 O/ D$ G, J" q& S' [! z7 M+ T        UART_Init();           //串口初始化                  
. H8 A; |: x  q9 Z  b          x24c02_init();     //24C02初始化
6 D; W; M5 Q, {        LcmInit();               //LCD12864初始化                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            - a: S0 Q. ]& u; u) J3 G
        LcmClearTXT();           //LCD12864清屏        2 b8 C- ~; ^& U! l
        while(1) % `/ Q4 E9 K! b
                {
' L  a/ q6 S2 S% J) [                        fan();7 S* ~4 Q5 {6 K4 F  T
                        delay(100);                  9 g3 v* }6 `  C2 ?
                }        9 N9 I6 B. u- q" i. w  Q- G
}
) K5 d. q$ U3 L! g0 Z
1 ]  i3 o. ]% ^( M& C* p0 O) r$ q//外部中断解码程序_外部中断1
9 A) b3 T3 _/ r( i- X% y' Xvoid intersvr1(void) interrupt 2 ; L+ K  Z7 F6 k. E' v  `3 }
{1 `% _9 h$ N( M
TR0=1;
6 j# X3 ]1 C- f6 E7 W Tc=TL0*256+TH0;//提取中断时间间隔时长- A5 B* A1 h  }% \9 Q
TH0=0;
( }" K+ r* U) X9 h1 Y TL0=0;         //定时中断重新置零" W" y" X( f1 @( t. A7 o1 `' r

2 C5 a8 L) N5 ?2 f" D3 e: |& j# \/ P if((Tc>Imin)&&(Tc<Imax))9 c# D% j7 j, w1 f3 N
{
6 r; x, u# k- q3 i        m=0;
' N  X+ d/ Z- L        f=1;
) u1 d+ Q/ l  U/ J: X        return;6 c0 E- q3 T- W! F8 F' S; R0 G
}       //找到启始码
% g- j; o" ?2 l, W% @( u; k! Y if(f==1)
: F& Q7 P$ ^! ?- k4 }* P) e' b! n {* j' ]2 r+ b/ u1 G
        if(Tc>Inum1&&Tc<Inum3) * O$ J+ N' d# ]$ @. {2 T  d
    {
) N+ g3 N- K" i5 u6 O           Im[m/8]=Im[m/8]>>1|0x80; m++;
3 W3 S& G6 Q( n- l5 M/ q8 U. Z    }
, @, J; \* _" G. a$ |2 K9 z9 c; j    if(Tc>Inum2&&Tc<Inum1)
/ o6 N/ D/ ~3 h    {
6 ~+ F6 t: J0 t      Im[m/8]=Im[m/8]>>1; m++; //取码$ f) K1 Z! I2 [- f: y' D1 }5 z
           }' |7 }9 g* x; R2 W! N! K5 t
           if(m==32)
9 m; v3 `2 h8 j$ h" _    {
+ r* _( a; v% r+ E9 e, Q- l5 `      m=0;  
& ]/ i5 ~; j2 a/ ]1 H7 _      f=0;* r* x6 c) ^: `3 _) }+ e# a+ W7 A
      if(Im[2]==~Im[3]) / u. r, j) s5 j% `( X6 K1 C
      {, E7 b# K7 }/ W5 ]- O6 }3 I
           IrOK=1;' |+ L6 R" e9 H2 F, s+ u* T
                          TR0=0; " a+ a/ G3 U4 U3 Q
           }7 w" S& ^  G5 G4 W! w1 @
      else IrOK=0;   //取码完成后判断读码是否正确
; E' [; x$ i4 l5 `: \/ b9 ]' a" R3 U( w5 l1 y* _* w+ Z7 k0 ~# {6 E3 Z0 L0 ]
& I! \& L/ S2 e+ \' A
…………限于本文篇幅 余下代码请从论坛下载附件…………
' g  f: }* R% X0 y+ C3 d
游客,如果您要查看本帖隐藏内容请回复
3 Q- n, |5 `) c3 E1 z7 y+ x

* H- I3 \9 C- ]! \6 }" [7 m: c

该用户从未签到

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

该用户从未签到

3#
发表于 2020-4-5 09:15 | 只看该作者
; K. F, j' K( b4 a
学习一下,感谢分享啊, 谢谢!

该用户从未签到

4#
发表于 2020-4-19 09:28 | 只看该作者
红外遥控指纹电子密码锁程序学习一下' |; F' Q) p1 c' c$ M8 Q' c8 R" h( S
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-16 13:11 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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