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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机的红外遥控指纹电子密码锁程序2 p/ H$ r; h& g3 B
. g2 W1 s9 Z2 z5 k( f
9 }9 ]( D6 F% r) D
#include <reg52.h>
6 y7 L& ~' E4 C, a7 |#include <intrins.h>( W3 x9 X4 |+ k' n. w2 F. X; e
#include"24C0x.h"
0 K5 L. }: c5 |" t" x5 ?+ Q% N#include"LCD12864.h"
$ p! I( e7 z2 w' q4 }' g#define uchar unsigned char
# w' k# |4 P( m+ l9 I2 W#define uint unsigned int& ?/ H) ~4 y0 n; x' Y) g" X# {

% b4 y8 X* X( X$ ^#define buffer1ID  0x01( G* D2 f9 p6 U9 K. a8 V1 E
#define buffer2ID  0x02
3 C* M* A5 y8 Z/ |$ |( k#define queren  0x889 G' m: n0 u  n% g
#define tuichu  0x86
4 X6 W; K& V) \/ l9 j9 q# f#define shanchu 0x849 \3 t; Z) F( c7 }  q
4 y5 s3 g2 [  I
#define User 1                                    
+ g0 {9 o- g" u( g2 ]
3 `0 @& X, N; g! [* X: [/ lvoid fan();
2 D% [8 L5 M. F) w4 z$ W
/ x7 p: h+ D7 ~/ ~$ B1 bsbit B0=B^0;
- C+ w. |7 C: @  ~7 Fsbit B7=B^7;$ Q  n1 j$ ]3 J: a# Z1 k/ G
sbit k2=P3^7;) L# ~1 L9 A6 Y6 w8 P) u* t" J
sbit jidianqi=P3^6;
5 t0 {( J0 D9 [4 u4 ^sbit Feng=P2^0;! _7 Z4 w& W1 f' N* P# L, M9 x; U
* f- E( K" {  O  n7 b" R
extern unsigned char times[];
8 `) c7 g- d; X" q) ?' a; p' q1 [uchar  Member=1,sec;
( }9 P2 ]7 L* k: s# l7 iuchar  ErrorCount;; K+ ^: `. f' E
//////////////////////////红外相关//////////////////////////
, L" F+ c" u- M: C% ?% g7 o0 M3 _//时间计算
( l) c5 S. I, G9 i9 F#define Imax 14000    //此处为晶振为11.0592时的取值, / V( M  @. K& [9 N) T+ h
#define Imin 8000    //如用其它频率的晶振时,
5 n1 A  D7 _$ X2 o3 t( \- M+ W#define Inum1 1450    //要改变相应的取值。
, r: w) O, d( R9 R8 C$ M#define Inum2 7000 6 `+ r( q+ ?0 x6 C! g
#define Inum3 3000
9 L2 t% j* C5 c+ W* k//解码变量" n' j3 h# e7 ]$ R
unsigned char Im[4]={0x00,0x00,0x00,0x00};
/ h  J9 A4 D8 ~/ N& F
* G: N8 G) ^5 b/ P) F, d0 M9 O//全局变量& t2 ~$ E& b1 ?' }
uchar f;- O4 L& G7 E5 q3 Q6 Q$ ]
unsigned long m,Tc;+ j2 A" N  o, u
unsigned char IrOK;
1 A/ Y1 P+ B  w# u//////////////////////////红外相关//////////////////////////
: p0 F: F$ C3 L$ R* M# f/ S7 e: S2 K" muchar  code buffer[User][6]=! S5 X! w# q0 h0 z2 L" |3 l. a2 w9 e
{2 F7 k5 Z& d' ?5 L9 N
{"000000"}
- f: \, i  |/ M' T1 G- ^};7 c3 o6 R4 u6 k) V: v
7 g" ]1 Q' _" P
0 h( V# `1 @! c
uchar dz[4];* |& [+ W- |2 y
uchar time[4];                         * }# s' t( L: d! L( l5 e
uchar mima[6];7 n: A+ d" Q( T3 ^5 L6 @+ [+ Q
uchar mimag[6];5 q* x: m0 K, t" E2 X3 v
uchar mimaID[6]={1,2,3,4,5,6};
! B6 C: ]' |+ ?
' C: A5 n" e: @# z6 _& l
( z) m: |, N& y+ f* h' huchar Address1=20,tempx=20;
% ^) N4 M% o' O/ E) Guchar Address2=20;   , q" j2 u( w' b3 _

2 M  g: m. z; C' Z4 k: z) buchar data K;+ @/ j, Z% b  ^6 _
uchar data Key;
' u# t( w1 E2 Y
' u! q' {4 T- G# V* {' n8 {  W2 j( {uint PageID;1 Z3 T. J$ L% f/ P' e1 b# f
uchar data querenma=11;
! m5 o2 D9 d0 W) Z1 b" fuchar sum[2];
! _, S& C* U" F* Sint summaf,summas;
$ Q* l* o; `" m" `$ D& M3 [& W: t; Q, v5 _# o( l
uchar  xdata UserPassword[7]={0};//密码
6 Z. ~3 N0 C- I2 Huchar  xdata DSY_BUFFER[16] ={0};//缓存  N3 r; j$ B* c1 e" V$ J

! N6 Y+ I" d- @+ }7 |
3 f2 X* v4 R* `void Red_Init(void);
6 p& X3 f( D* L#include "zhiwen.h"
6 S0 I1 F- P+ d0 y  Z//检测脉冲宽度2 }% I0 O7 @4 p5 a. @( _9 i
unsigned char check(void);6 t( K9 T/ s# H/ o0 s0 Q7 r9 }

% m  D9 _' W% S3 K( T6 sunsigned char redchange(unsigned char rednum);- F. K, E, o& h& v
! ]# @% }( I! t8 A7 ^

6 h* @4 x/ w! \: s- N' tvoid delayms(unsigned int z). h6 a6 [5 i9 k$ S& u' |8 t0 K
{
. g- N0 ^& I9 V. T& I2 U        unsigned int x,y;. h  \( x- ^# J; j# A
        for(x=z;x>0;x--)% {; |/ N( q# p. ?( M
                for(y=110;y>0;y--);
5 o$ `9 r+ ^6 B" }+ Q* P4 P/ Z" g" c: ~}
4 j3 p1 m7 w& s& r
/ L- {/ g& V! O( D2 h8 g/********************************************************************
6 O; E& I/ W3 Q' v" `$ r* 名称 : Chack(uchar User_Number)
: O) N! W/ R" N9 ^/ j% v4 W* 功能 : 单一用户密码检测6 e+ v% {, b, X" K6 d. `
* 输入 : User_Number
5 `/ M  D* g5 a7 O* 输出 : 密码正确与错误,错误返回0,正确返回1
8 G# O5 _4 t& Z# `2 U  r% r, ^/ R4 W********************************************************************/5 V+ w6 P9 T6 _/ ^
uchar Chack(uchar User_Number)
/ l& {0 ?& ?* S9 R/ t1 c. r/ J{
# a. e5 w6 e! c        uchar flag, i,temp[6],Address;
% Z& Z- S7 F& o" `2 W        Address=User_Number*10;& B0 A' d% M2 U" w% I+ }* G* i0 r
        for(i=0;i<6;i++)
! W# q& J/ A! H- H7 E3 \! q        {8 ^, w7 B1 D$ U/ W* ^; S
                temp=x24c02_read(Address);
' B& N: {' \! n/ T; X3 K; v4 f2 H! w                delayms(10);
4 Z9 ^1 A6 d& i# W5 I                Address++;# f' B) H- b: J9 }9 ^
        }
- @2 L8 p, S0 W6 b; e- U: C        for(i=0;i<6;i++)7 [# c3 C' L0 a
        {
/ Q) J) @' X5 e                if(temp==UserPassword)
& D) e" R( G6 c1 l  ?# x                        flag=1;; J% R4 b: w+ s6 z. J( E
                else         
( w* B/ a. \; m$ b: C. Y8 y                        flag=0;                  y4 V( n) [8 ]% @
        }' k: I' t& ]. F" \1 C" K$ q; A
                return flag;
- i9 c" d5 `8 T5 N( G9 f}+ m  u; v( K" ?( e0 p1 X# p
: u' Q/ S! ?5 r4 D( P
/********************************************************************6 m; ~8 n2 T, M( \  J5 E
* 名称 : PassWord_Chack()
( v: b8 y) T, O* 功能 : 所有用户密码检测
6 C% O2 t$ `& O$ X8 ?* 输入 : 无, O/ Y9 _" }$ }& b
* 输出 : 密码正确与错误,错误返回0,正确返回1
, B) v# D3 b& m- O% D********************************************************************/: |. B- m3 d, `
uchar PassWord_Chack()
) k" E( X# d2 [" Q; E! h& Z' ], Q{3 R" r% K5 ]# }# ?6 ^. Y5 Z; [7 ^
        uchar i=0;& J# {% T3 {8 Y' l# G
        while(i<User)$ f+ I% c+ B4 Q* E+ D* I
        {* C8 C+ u+ k- K
                if(Chack(i)==1)
' K' Z+ b* N* D" S+ t                {- Z  v7 g1 _+ R& p: ]. x  i
                        Member=i+1;! A2 I  p* D5 n6 w
                        return 1;  J; U8 W6 u& n5 O6 R/ _+ `( L
                }
' k, M9 U% x3 }6 V$ a                i++;        
# w8 ~0 z1 t9 |        }
, K5 @6 A, ~( X2 @8 z0 H- w5 W( @        return 0;        
* Q& ^& q' P5 M! |9 Q}
; @, @* t+ _* n; _$ P5 z7 Z( P7 G4 }2 t( P
void delay(uchar tt)
; R% n! t8 S7 N3 d{  uchar i;: N8 M/ y* ~3 C3 H1 c5 C0 h3 l
   while(tt--)2 e0 d  o5 l3 `8 Y& y# G7 [
   {
9 V* r+ A9 F* c( ]   for(i=0;i<125;i++);
+ D+ C0 S7 m  V   }
* G+ k2 s: t; f4 o7 ]6 H9 j( C}
2 Q. x; y) ]: z- }' E1 S) n- z/********************************************************************
# G5 O" C+ D3 A% l* 名称 : UART_Init()* y( f! f8 j+ q. @# o' V) g
* 功能 : 单片机串口初始化; }9 `5 ?9 k8 X4 l
* 单片机:晶振11.0592MHz 波特率为9600bps1 R% f' Z8 m% q
* 指纹模块:波特率为9600bps,1 K% W3 X6 `) A. [% o  }3 X
********************************************************************/        
8 ^; q! o# T/ ^! a- kvoid UART_Init()0 G0 W8 M: q0 [+ D$ a" O) w4 F. `
{
+ d, w# h" P5 e5 d) |" P        SCON= 0x50;               //串口方式1        //REN=1; 允许接收  F( ~+ p9 C8 ^9 M/ c
        PCON=0x00;                //SMOD=0+ ?: q* X7 }$ F( b$ L
        IT1=1;5 O9 L* p7 N9 `5 b& X
        EX1=1;" ~: e- `( R' g4 p. a  w5 ?
        TH0=0;; O. R4 G# a$ z6 W$ _( C5 R
        TL0=0;
/ P3 q! ~1 P" H) U$ A  n2 V        TR0=0;
+ U% w0 M' G  N! |        TMOD= 0x21;               //定时器1定时方式2! k$ V4 |6 Z$ a. |5 k( ?  P- N
        TH1= 0xFD;                //11.0592MHz  模块默认波特率为9600bps
( g! s, [  O' [6 m( {8 K+ T& e& N        TL1= 0xFD;                                                                                 " k  e' c; ^) D* g! l$ }5 o
        TR1= 1;                   //启动定时器 ( d+ P/ V( F  v' c0 ?% l
        EA=1;       ; X& D0 [! ]# z1 X. l$ k
}3 z7 j7 Q/ t+ M  m5 m- {9 U

3 H' @- S9 V: R) G1 sunsigned char Keycan(void) //按键扫描程序 P1.0--P1.3为行线 P1.4--P1.7为列线
$ e' z8 g: N# y+ W5 Y* b( n{' L2 r; m7 P7 u
  unsigned char rcode, ccode;$ L  W3 U) g2 v; `  ~' v/ e/ n  B
  P1 = 0x0f;      // 发全0行扫描码,列线输入
+ J: K2 s% ]+ v: m* w0 A  if((P1&0x0f) != 0x0f) // 若有键按下0 }6 Q! r1 b& I$ }
  {
+ q. y( B5 s3 B0 \* p: I    delay(1);// 延时去抖动
! Y: f' r: |) o& Z6 n6 Z  X    if((P1&0x0f) != 0x0f)
: r7 d& R# f4 M) Y3 q1 N0 X    {  rcode = 0xFE;         // 逐行扫描初值; M& q% j( q, U. u# x. M( K8 a
    while((rcode&0x10) != 0)) K! u4 _- R. I* i; p$ G4 j  R
    {+ e# U: t. L  n
       P1 = rcode;         // 输出行扫描码% ?) D8 ^& |3 y% U4 o' C) a. u2 T
      if((P1&0x0f) != 0x0f) // 本行有键按下( o5 n8 K* r8 g% i6 E
      {
! z: y! l! \3 I5 M! F% F) q7 G) H       ccode = (P1&0x0f)|0x0f;! B* |0 [/ F; X$ C# E
       //do{;}
" u8 O/ {. Q2 u0 k, Y+ ^; K) |           while((P1&0x0f) != 0x0f); //等待键释放6 Z/ j4 B6 H7 o* k' h' U
            Feng=0;1 |/ [, w. C' H8 u" x" n4 G
        delay(100);
- ]/ L& L7 D# D0 S        Feng=1;) P, l% x! ~5 b1 v7 [, ^
       return ((~rcode) + (~ccode)); // 返回键编码
' z3 `5 r9 u1 N      }* V: K- q0 C5 i) G+ W
    else9 k) R$ s* h( F* {+ O4 t
    rcode = (rcode<<1)|0x01; // 行扫描码左移一位
7 j; y. U; z2 E2 m1 a    }7 E4 a9 C/ r% Q' Z  S
    }$ ~! l) I  e1 R
  }
- \# ]" z1 m2 X5 l' }- l! P. p# `8 ^  if(IrOK==1)
. H7 x* X  ~4 L6 j8 G+ _  {* r7 v4 a6 [) q
   IrOK=0;
# I- d2 y3 |9 r5 z6 E2 L# E: O- \   Feng=0;
' c& @0 A4 Z% W0 d. G   delay(100);
& I0 m5 l  ?3 Y5 i( E) n6 k   Feng=1;
: [' Z5 J$ e+ z# v$ y   switch (Im[2])5 S9 H* B3 E8 F; k# i  u, u
   {
% X( Z+ T; b6 e2 v0 ]5 r% T    case 0x16: return 0x28;break;                  //0
7 N4 B+ o7 J' n! X' y        case 0x0c: return 0x11;break;                         //1
9 j: f, P( w5 o5 _- r( ?1 p+ Y        case 0x18: return 0x71;break;                                //2% E( b  L" U+ X# T6 Q9 H: ]. u' ?9 o
        case 0x5e: return 0x41;break;                                  //3
/ Z9 t+ \7 q& ?        case 0x08: return 0x12;break;                                        //4( B' R. L# X5 E4 W2 Y) Q& p9 Q+ v
        case 0x1c: return 0x22;break;                           //54 {* L6 t, {4 `5 M) W2 }0 A
        case 0x5a: return 0x42;break;                                //6
2 s+ g: ^4 L# r; G8 C: D  e" [& n        case 0x42: return 0x14;break;                                  //7' V9 H& f5 K* U7 B
        case 0x52: return 0x24;break;                                  //8
) j) w( t2 k8 _. q6 Z& d; ?) L        case 0x4a: return 0x44;break;                                        //9
7 ]2 j! j5 e  J, p8 j2 d        case 0x47: return 0x81;break;                                         //a
* |( ]7 K7 J( Z5 }) s        case 0x43: return 0x82;break;                                          //b; a, e8 ~- P/ G8 D
        case 0x0d: return 0x74;break;                                           //c
/ B" O- b' O& I& ^5 z( D3 H4 K        case 0x15: return 0x88;break;                                                //d
. j% `1 a, [' h; j) ]2 Z        case 0x19: return 0x48;break;% j) I$ J3 I  }& a& D; R
   }
5 @4 H+ D  {+ {  }  ! b4 H+ Z) j, ]% X9 _) }2 t
  return 0; // 无键按下,返回值为0
& D" X5 j0 J) H. w/ o& `8 S}6 A/ v4 x+ w. p/ k+ X: v% i$ s9 X
6 ?+ L% E9 n0 i* c; g3 D# W/ @
void KeyDeal(unsigned char Key)
2 b9 U9 f, w6 J# O/ Z{  //unsigned char n;
' Z& g0 E5 G7 u7 y& S   if(Key!=0)) `$ A# ^9 ^- @$ H
{
+ ^  Z6 s, Z! ?
. h% N1 w, \8 h2 n                   switch(Key)
9 I& t4 O9 \2 d+ v6 {, ]) Y2 k6 g                   {2 M. d% t7 Q. b6 `
                   case 0x11: K=1; break;         9 [; X! W9 _, p" H+ n
                   case 0x21: K=2; break;  
3 M2 X0 W% u2 s  b                   case 0x71: K=3; break;  % D' \( r# ?% A5 T- U
                   case 0x81:  break;       9 A: O% x1 J5 x' u
                   case 0x12: K=4; break;
' t+ x4 w' V2 ~& a                   case 0x22: K=5; break;3 M" |3 N0 A( p+ e
                   case 0x42: K=6; break;& B) q7 _, k. p9 `! P' ]' y
                   case 0x82: K=34;break;               
) h8 w+ Y; g3 E. t9 Q. M* X  [+ V0 S                   case 0x14: K=7; break;
9 |4 m8 \: D- D: P3 x# R' ~                   case 0x24: K=8; break;
% X- ~3 H' D" n/ g# v8 v8 G0 x                   case 0x44: K=9; break;
; a. j$ `$ s& x! P* }6 K                   case 0x74:  break;                  U+ A- @, E% q
                   case 0x18:  break;                ; ^! [- a, Z& Y
                   case 0x28: K=0; break;: _) ?% n/ V+ I; ?  |
                   case 0x48:  K=11; break;' B) H; z! y7 Q
                   case 0x88:  break;               
9 b7 m- d/ u. C; q! X1 f: F                   default: break;8 f% x4 v* K) k
                   }
5 l( _9 |: w: l7 w) s2 Y  }
3 W4 F5 m. U% Z7 s& Q- s}
- u& d+ U  ^. _+ \3 @, D6 T5 a% V+ F( P. Z

& {6 S& |7 e8 K* {- g/ b4 hvoid shuazhiwen()
) V$ E1 _* E8 V: B2 p5 m{
$ X( d8 ^7 ]( H% x    uchar IDs1,IDs2,IDs3;         
( [; `0 q1 u6 q2 r# P  ^        LcmClearTXT();
& @, c+ e9 G) G' m. m" H9 O7 Y0 T        PutStr(1,1,"请按手指开锁");      
+ d6 Z- `+ z; m. v        SFG_identify();0 V4 p! q! Q; w3 f1 \5 w1 S
        while(querenma==2)
- ^! J; Z* O9 Q$ F        SFG_identify();
; U# v6 B3 b3 m# R; f0 a. U        if(querenma==0)
8 Q9 N- V" r/ H4 j% m   {
: [1 D$ E- c' _& d                LcmClearTXT();
2 T+ V# }; z8 i! N3 W: \                PutStr(1,2,"门已打开"); . B1 ?' D/ d6 ~. z8 c
                IDs1=PageID/100;, z  r$ q$ x- b- J2 l6 W+ D
                IDs2=PageID/10%10;
% M0 |: A8 O6 m& [3 P                IDs3=PageID%10;8 |& C8 e! |, n
                PutStr(2,1,"编号为:");+ L  S, t4 {# u7 J& o
                WriteCommand(0x8D);                //指定第三行显示位置/ A" N" n2 J, c5 f
                WriteData(0x30+IDs1);
' a* K& J- D# k/ c; b, L                WriteData(0x30+IDs2);
$ @2 ~& \! G# ^$ d  E/ y+ V                WriteData(0x30+IDs3);" a# S) s6 L1 I8 ^
                ErrorCount=0;
. _6 a$ o2 D( s! y( Q0 `$ e                Feng=1;
: j3 C. e# K6 m4 K                jidianqi=0;
. j" H% U8 f) J8 V/ x$ M. a* [                delay(2500);
0 O4 i4 \; v: o7 G/ N/ c                jidianqi=1;( J* s1 l( B: p* a+ y* q3 `; {
0 q; c( J; X9 g  L& K6 q8 z% l. v" i7 r
        }: u9 u/ y0 q2 ]
           else if(querenma==9)
5 E  J' l& n) @3 b4 g. Y/ p3 @- F                 {; J# p/ a+ S2 H8 [# |% b/ N( D
                        LcmClearTXT();9 y) s" a7 c0 M' v
                        PutStr(1,1,"没搜索到指纹");
8 n$ D; S& s" q% q                        PutStr(2,1,"请重新按手指");
9 S; o* u' {# d+ Z2 l/ N! g. }                        ErrorCount=3;5 U5 T' q; T" c3 e
                        Feng=0;
7 X' `  A! d6 S( n                }
" J* I2 j) v, B" q' F0 U& u                   else - H0 M! {9 J# r  B  `" F( i$ P. S0 ?
                {5 j/ \  c, d6 ]" Z' h9 w( R  v
                        LcmClearTXT();
+ {7 S* p& u7 f$ N7 U                        PutStr(1,1,"接收包出错");
0 c6 v! U5 m$ V4 t+ M                }
5 `7 X" D- H6 C7 i                delay(2000);) J+ `6 P" m: S" g- k; p
   //         while(Keycan()==0);
/ @7 J& G# m3 q) T" X}
0 v# Y  w: F; i) _: @void addfinger()
. G4 Q, g$ U& F/ v# p$ a{
; ~. |- g+ @$ w- P3 M. V% M. Z        uchar IDa1,IDa2,IDa3;" I4 }/ I, O5 m3 i( C
        LcmClearTXT();3 k. @/ w) p. w0 x$ A( }
        PutStr(1,2,"请按手指");    1 c1 B$ N1 n# v! f/ k/ r- i9 S* x
        SFG_getimage();1 t1 l+ o3 ?. V* m8 \
        while(querenma!=0)
- J' R' {, E* D- p3 k# [        SFG_getimage();' q# R: U; w# E9 f. G, \
        SFG_genchar(buffer1ID);
7 k: z  n% G9 _$ x6 Z- h# b# o        UART_Init();
5 u* J* v3 p% O: [2 f! B        SFG_fastsearch(buffer1ID);
/ q; W1 I9 x9 {/ m  c, _4 \$ Y        while(querenma==1)7 G0 T. ?. b$ b3 y# T# D; d- z
        SFG_fastsearch(buffer1ID);
' L% \6 n5 M7 A( T) b- J* X4 o. m: ^) z* q* N% ^% p; H! W
        if(querenma==0)
! Z" A4 \" B. F' H$ A6 {        {! l6 ^, B1 ^/ f: s* V3 `
                LcmClearTXT();
# W6 Z  M9 g. q                PutStr(1,1,"该指纹已存储");6 x! ~4 y% u! E; ~/ r4 M; x' f& f
                PutStr(3,0,"  按任意键继续"); $ A' }6 W( X( ^7 \8 p) \/ q
            while(Keycan()==0);
6 Z# z& s2 {% {% D$ L' q# c        }- A: D% @" K) h; {2 d4 |
        else if(querenma==9)
9 O6 f; j9 M% o0 x. x                {+ m/ [2 W) p5 N% Q
                        LcmClearTXT();
9 A$ W' O9 L2 e( {7 y' K                        PutStr(1,1,"请再次按手指");
1 f' i( F; Y. }6 D3 v& n7 D' x                        SFG_enroll();! V: `" s" [# }) j; g( |$ x
                        while(querenma==2)8 y- z4 t3 W# ?
                        SFG_enroll();. h# ?$ G. T% ^3 G6 w+ M
                        LcmClearTXT();
. F: O' o( t- @9 L! ], U3 ~+ R) u                        if(querenma==0)4 i, k/ K- ~: F* X  f/ z, y
                        {
( a. r/ Y9 [! \3 l5 N                                IDa1=PageID/100;IDa2=PageID/10%10;IDa3=PageID%10;( j7 C; r- n) |' y$ X$ B' ?
                                PutStr(1,1,"指纹采集成功");% O+ m0 N. f  D& \0 m, Z
                                PutStr(2,1,"编号为:");
, e* W3 h6 ~1 N/ ?  {7 @! b                                WriteCommand(0x8D); / |$ @: ]! G8 [9 b, P* r* e
                                WriteData(0x30+IDa1);WriteData(0x30+IDa2);WriteData(0x30+IDa3);
8 {5 A% C; {* r; n! _                          }0 O4 K! w) U1 y
                  else  if(querenma!=0)
* w2 n5 i1 o) }% d) f                          {
6 r  {2 }7 m& `) ]2 k1 M' t# K6 J6 S1 O$ R  g- S- h( @
                                PutStr(1,1,"指纹采集失败");
( d6 f1 q) M  O" j4 R" B- p& |                                PutStr(2,1,"请重新操作");. w8 P8 m; E' ]
                         }
7 |" S+ P2 U0 p                PutStr(3,0,"  按任意键继续"); / `% c2 w, M2 B2 b3 O; G* M
            while(Keycan()==0);0 l( {+ H+ `. f6 l: \
                   }8 B+ i7 [  m9 x( x( }% b
        LcmClearTXT();  B4 M; F; g4 g8 D- Y
                         PutStr(0,0,"按键1 : 增加指纹"); * q6 W1 y4 P. }  c0 H  G
                PutStr(1,0,"按键2 : 删去指纹");0 p) v& E) R5 p6 L
                PutStr(2,0,"按键3 : 手动开锁");
. X2 y8 T: _0 ?+ F                PutStr(3,0,"按键4 : 修改密码");
) Q2 @$ F8 R6 {8 M; k" Y  i}
# B( Z: F( k' ?% }void deletfinger()
3 x" ]" Q9 X9 R5 }: ?{
- v6 K8 F+ H3 c% N9 w# _        uchar i,j=0;* p, \& s7 m; T' u8 D% O% ?" [
        LcmClearTXT();
# C3 y9 G+ C  \; T- R        PutStr(1,0,"输入删去的指纹号");
( y  g7 B- `( ^2 G        for(i=0;i<5;i++)dz=0;        % I3 X, v& m1 }  _2 ~6 n4 S: ^8 G
           Key=Keycan();% j9 M- T; F5 u- I! t% {4 l0 Y
           while(Key!=queren)
" f( U* S' D5 D           {
& I9 x1 a, i4 w8 X             Key=Keycan();
- U' c! S: L4 [$ y5 K) w             KeyDeal(Key);3 Y( Z7 n/ Z* d- H& V+ q
             delay(30);                                                              //按键有抖动@@@
- B  ^5 u1 Q5 @) z# |- r! Z* _( i             if(Key==0)K=10;* N" `0 h+ l; t! l
             if((K>=0)&&(K<=9))
: q, x$ G+ D1 F) k" ?             {
" x+ K& s* X. j/ \+ X& v              dz[j]=K;  ^  v% s# `$ A. Y
                  if(j<3), w, ]- C5 A/ s6 W6 Q
                  {        
' t# H  o+ K  O% A$ S5 P                                WriteCommand(0x88+j);                //指定第三行显示位置0 a* M) d' l4 l9 `
                                WriteData(0x30+dz[j]);        . c, C: [- a/ x8 S6 N
                  }/ w) F. B) k# I  M
              ++j;5 d( j4 ]6 v9 w
                  if(j==4)
' s6 o/ x$ H% x% G3 F$ h" M' t7 p              j=3;                                                                                                   //@@#yinhuang% |6 }2 e) ^$ ~) |$ M, t
             }   //显示LCD12864并行显示 * ^6 ?  K/ M3 N- l/ e' {
                 if(K==34)                //按了删除键" ^; j& Z, U4 ~% K/ E* g" S) U
                  {- F1 m$ l; y. c) X* p" u, d* G
                    if(j==0): |5 Z# n% R( Q
                        {
  p( b4 }" c0 ?& K+ e; E                                WriteCommand(0x88);                //指定第三行显示位置
7 t/ X/ L0 N* W3 @8 B) s+ }6 H                                WriteData(0x20);/ q, D& O) j! u+ W4 V/ m- C- V2 C
                        }
) ?0 W+ f. [; u. L9 ~                        else
% h7 W% m0 t- q0 Z1 h8 b                        {2 L( E( x& R& P* A1 g/ I. y' x4 s
                                --j;& \5 V. \2 a9 o1 |+ E# s& a
                                WriteCommand(0x88+j);            //指定第三行显示位置3 a/ _1 c0 P# v1 b$ \
                                WriteData(0x20);% O9 J( T3 [# k0 K8 Q
                        }  G  E8 U. D0 F4 E' V
                }5 y5 c+ s) E) B. X
        }. X6 y1 v% |1 C1 y/ n
        if(j>=2)
, I3 m/ F, j3 w        PageID=dz[2]+dz[1]*10+dz[0]*100;
$ g; v9 o9 G" N* a, C# b% ]        if(j==1)
3 r+ |8 Q" {: i        PageID=dz[1]+dz[0]*10;
" w+ d$ \$ h. |% i        if(j==0)
. n& T+ U; e) i: C        PageID=dz[0];8 I2 a) O- J4 }
        SFG_deletchar(PageID);1 C5 r" ?2 Y! j, g2 A: v9 z
        if(querenma==0)
  w1 Y' ]. O9 ^7 m  M$ [0 [: J& y        {
5 z5 ^; w' k3 I" P  s                LcmClearTXT();
9 D) t# J; g2 {% W                PutStr(1,1,"删去指纹号成功!");
! p4 ^  l6 o$ k+ v7 _! @1 z        }
% i* p1 Y  }+ }8 l        else
4 H5 ]2 W$ j6 X% b# [        {" h2 ]) c" i/ q' C1 a# Y0 z4 ]9 n
                LcmClearTXT();6 e/ \1 Z( E% `: O" r
                PutStr(1,2,"删去指纹号失败!");  # i9 c$ t7 E/ [, r" p, b$ b
        }
( }1 m+ m4 r* L* o2 F7 d7 D        PutStr(2,0,"  按任意键继续"); 9 w3 G' K  V% @- A( \6 \0 n
        while(Keycan()==0);: `. k) ~4 s1 y& o3 a  F
        LcmClearTXT();: q# Q# S# T  X
                         PutStr(0,0,"按键1 : 增加指纹");
+ J' H' x! z. C- U7 h1 R9 [                PutStr(1,0,"按键2 : 删去指纹");
% U$ O* a. M+ z; `                PutStr(2,0,"按键3 : 手动开锁");
' ~1 ~5 R; `# j6 k6 j                PutStr(3,0,"按键4 : 修改密码");
; J  v# Q! [7 b( g3 }+ r2 }5 W}) n% p3 ~# {/ u' y

- p" p2 r1 p& |0 H6 W/ S5 T* A# J4 I& Pvoid gaimima()6 X# Q8 z; `, i8 E6 g
{
4 N3 _1 E- s% L# K: O5 u        uchar i,j=0,mima1[6],mima2[6];; u; G9 K( e( Q! ]& ?8 o
        uchar k,temp;& k$ @7 X2 b5 _
        LcmClearTXT();# _  L- w6 O% d
        PutStr(1,1,"请输入新密码");' F8 V1 f3 i" W1 M2 ]7 @
        for(i=0;i<6;i++)mima1=0;                                                                        
6 G' w0 W( _" V. Z0 ^9 `! y           Key=Keycan();! b; D( h5 c0 |$ V' z; h
      while(Key!=queren)( S  t/ a9 e* g, T% ^: {" y
           {
# I5 e8 s' l- Y! D+ b8 D             Key=Keycan();% O5 `# e3 |" W# U
             KeyDeal(Key);
& `& t  O$ e# l  c7 s             delay(30);                                                              
1 u/ _2 b; T6 y# u             if(Key==0)K=10;
/ `" i( `1 h5 Q# q( b             if((K>=0)&&(K<=9))
8 w8 C7 N7 N# f# h% J( u( j' b; ~             {# g, |9 \5 A3 y( ]' ?, a* N
              mima1[j]=K;
7 F, z: ~: ~% i4 i9 |  L: z0 q! \                  if(j<6)5 u. E+ H8 h1 p4 [
                  {        / L8 Q; n( a6 s
                                WriteCommand(0x89+j);                //指定第三行显示位置0 b! @% N+ a7 W; K# }
                                WriteData(0x0f);        1 Y: ^' {6 V$ x% A$ \
                  }4 D* d7 X5 @9 N0 ^
              ++j;  J4 q9 q' F( p1 I% e6 h
                  if(j==7)
/ }/ ]; }  M3 W) ]              j=6;                                                                                                   //@@#yinhuang
  i1 ?: j  M7 \& D' s             }   //显示LCD12864并行显示 7 r$ j, E" r* C3 g7 H
                 if(K==34)                //按了删除键
/ t5 T; r6 a+ P) `7 q                  {( m+ h1 P. R1 |* g; K
                    if(j==0)
4 [" E+ V4 ]" O                        {
, N' r9 }+ ~$ O" A9 c# r+ k                                WriteCommand(0x89);                //指定第三行显示位置
: m; N. y5 c- E, W8 X( p                                WriteData(0x20);
7 N" u5 f9 ~! H0 F5 i$ @# c7 a                        }% D2 D2 o9 c* ?! [0 O
                        else
5 @5 `* L  f! M  j3 E+ }                        {
( y/ C8 Q$ y! U1 F  \# I- P                                --j;
3 s% B. x2 h/ W                                WriteCommand(0x89+j);            //指定第三行显示位置: O9 ?7 v( ~( ?4 C1 j
                                WriteData(0x20);! J* ?5 |* G% t0 I
                        }
; b$ R: ]: @9 c0 x6 f1 o' ?                }9 Y2 J' u# _4 n
        }
6 v, I) O* o. j) L        LcmClearTXT();, I, I( A6 X# I2 Z$ N0 x4 M
        LcmClearTXT();
* k. H; J6 ?2 H        j=0;' S" L7 |6 I* ^$ \
        PutStr(1,0,"请再次输入新密码");5 r0 f; x9 W6 Y- r* r
        for(i=0;i<6;i++)mima2=0;                                                                        4 U3 T# c0 P; u
           Key=Keycan();, p3 y$ W- L/ q2 l
      while(Key!=queren)
, c, i# |- B9 \4 {: w- y2 c           {( W3 ]5 F8 ^8 P  t" |3 X
             Key=Keycan();
( W, {/ Q/ i8 @6 `& P) u7 d2 C             KeyDeal(Key);
# o% d( Z7 a6 x" {' l             delay(30);                                                              / e+ u* ~/ U6 b6 e# p, m
             if(Key==0)K=10;
' _& [% }& Q8 n! y) c             if((K>=0)&&(K<=9))
0 q1 `1 L+ r! P             {" U$ |% j" t1 U8 Q* e" _5 P
              mima2[j]=K;
* g' H0 p6 W5 C4 r                  if(j<6)
1 y( a9 V: {# M                  {               
5 X! k, o6 T" f, Q7 s) Y                                WriteCommand(0x89+j);                //指定第三行显示位置
/ m& f2 l  H  P7 b2 o& M6 P0 V1 V                                WriteData(0x0f);        4 A+ t8 y' ^4 s
                  }: T, r' K$ v: g
              ++j;; @0 x1 u7 N& J$ F6 g8 l
                  if(j==7)$ H: y0 ]" [$ ^# C* R
              j=6;                                                                                                   //@@#yinhuang
. _3 z  v/ V  J! w             }   //显示LCD12864并行显示
# |9 l* a6 [! @7 D8 b6 R( A                 if(K==34)                //按了删除键
. b$ t7 G0 Q" Y# j                  {9 [, E" @7 ~/ |1 y2 t9 C
                    if(j==0)' Y& k) s! G0 z/ q
                        {
- Q2 G3 T( K8 N. s- d                                WriteCommand(0x89);                //指定第三行显示位置6 [8 d, l- T9 X8 ?5 |5 Q# F" d
                                WriteData(0x20);. n5 }/ o- r0 [2 G8 f) o
                        }- ?  L7 P0 u' }+ k1 _! L' H
                        else
* I* D4 q" g" ~% B9 l! B0 z                        {. {) n2 c8 }: r! \
                                --j;
# U/ w# t  Q1 Y0 m: R; h6 s                                WriteCommand(0x89+j);            //指定第三行显示位置0 ~& n/ H6 Q" {: [8 r( B! x1 u
                                WriteData(0x20);
- L& z; r2 N9 N" j6 Q" n                        }( L  M  J# _; l! ]2 z4 a1 I7 O" I! \
                }
0 D7 f. y/ F' n! r% ~        }
; a  |1 }" U# g& ^7 ]+ C. X        LcmClearTXT();
7 U0 K; F: x% X6 K  H        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]))
* U1 t9 u; n6 x, Y$ F$ a7 B% n  `" x        {
# Q" x# y& }+ E. M' `0 ?5 r7 O                for(i=0;i<6;i++)7 Q" m) X$ Z8 f$ v
                mimaID=mima1;
8 j6 m2 z# D5 |$ ^& E                /////////////////////////////////////////////////////
/ p4 X1 C# L  e8 A4 v                for(i=0;i<6;i++)           //密码限制在6位以内
8 l, q' R/ E) Z# W& C" f                {
/ F5 J; M. n  f7 Z                        UserPassword=mima1+0x30;                                  6 `. N$ t8 v/ l
                }. p; R- D) N, e, ~3 t
                temp=(Member-1)*10;        
, |% x" |) }& D0 r6 n+ i$ ~                delayms(5);* h3 n: Z+ K7 c' E2 D
                for(k=0;k<6;k++)
) O( Y; L, M1 _+ G/ F( ?+ \6 ]/ |) w                {5 e. O- B, k- Y; i( R3 u
                        x24c02_write(temp,UserPassword[k]);
% D2 a$ J( H# g( o8 N: {                        delayms(10);* w  c9 ^3 D* ^! }4 \0 U2 c( y3 d
                        temp++;
( X, ?1 W5 Z1 ^7 [2 ^                }  
9 K1 {* x# f+ o8 R: Q6 y" N2 F                //////////////////////////////////////////////////////
2 x$ s1 F# b4 U                PutStr(0,1,"密码修改成功"); & Z8 p; O7 u; b
                PutStr(3,0,"  按任意键继续");1 N- B  l5 ?7 q7 U) c
                ErrorCount=0;
; i' W2 p& B% |                while(Keycan()==0);
8 }5 {4 L& y  y1 ~        }
2 v, F+ U" J5 ^/ K5 s& K        else
1 z, R& m6 P- G  K        {
/ q% u/ ?2 b! b; f1 r                PutStr(0,0,"  密码修改失败  ");% ^* |/ S- W* u/ z+ A$ @
                PutStr(1,0,"两次输入的密码不");
+ `# N9 |, l1 R" |$ c/ X( r0 D                PutStr(2,0,"一致,请重新操作");      
& {1 F* M, A9 v( r: K' o                PutStr(3,0,"  按任意键继续");
7 u2 P1 ^& ^& }4 i( [2 D                while(Keycan()==0);9 S  x+ g5 s5 u, B; N+ _
        }
+ f* @3 M4 N9 D3 _% a4 ]" J        LcmClearTXT();2 i2 f- B: c2 X/ x4 T+ W& ^
                         PutStr(0,0,"按键1 : 增加指纹");
' T0 H6 t% }" c, W* |                PutStr(1,0,"按键2 : 删去指纹");
7 d+ c$ ]; O0 b8 f+ h2 G) c                PutStr(2,0,"按键3 : 手动开锁");
, s$ ]- J% U: i+ t: q3 k                PutStr(3,0,"按键4 : 修改密码");! U: L5 G# |: K/ w4 Y
}1 ]9 n- v9 e% I3 v2 w6 O
3 h2 t6 M- D# T& x

  N/ j8 p, R1 |, }void zhu()
4 X: R0 Q2 D6 Z9 _) b* Q% s1 t2 ^{           $ a+ _8 z2 n5 G+ n  G5 U- E
    LcmClearTXT();
0 S* g; C0 ^3 u        PutStr(1,2,"门已打开");6 F% h7 X7 f2 s- ]/ i
           jidianqi=0;
2 @; w1 R0 d( G0 i        delay(2500);
- n" T+ S" N/ D$ L; A- a  e        jidianqi=1;: i/ ^9 E0 I& y  n1 {/ b
        PutStr(3,0,"  按任意键继续");
! K1 J+ X8 T6 \0 d* d# J/ q        while(Keycan()==0);
. y9 ~# T: ?; `7 l                         PutStr(0,0,"按键1 : 增加指纹"); ' }+ L) \7 y& Z- U( l9 e$ x
                PutStr(1,0,"按键2 : 删去指纹");5 d+ Y: y1 Q- u0 v! e2 {% F2 l
                PutStr(2,0,"按键3 : 手动开锁");4 c- Q8 h+ @6 Q& x- p* h; ~1 y
                PutStr(3,0,"按键4 : 修改密码");
% z6 L# a5 ~( _}# k( e* r5 D- H1 l" F" @+ j

# a$ P4 ?( V' j& `/ |! U2 \* ]6 D7 ?
void guanliyuan()
& |2 V/ t' S0 `# L% u. d{    * X7 A- J8 h; p7 W, l8 {/ [
      uchar i,j=0,x=1;
3 W; x- d) s/ I' q             uchar Right_flag;. R  E+ y6 Z" Z) g; o
      LcmClearTXT();
8 }/ |' o7 K) q& T, e! P6 z          PutStr(1,1,"请输入密码:");        ( r, v+ U8 Z! M1 f3 @
           for(i=0;i<6;i++)mima=0;                                                                        
4 ?  i! ^9 n, A+ E           Key=Keycan();
& `/ B) M6 p* U. t      while(Key!=queren)+ F7 U/ z, j$ `! r$ X7 k# T
           {
2 L6 N; t7 H2 w             Key=Keycan();
2 a- i( e% J8 C. B* p             KeyDeal(Key);' ^* d( M# t  S) b3 R& B8 y' F( a7 O2 ]
             delay(30);                                                                A" G' w5 O/ o/ _8 Y6 D/ p
             if(Key==0)K=10;+ ?8 D+ I6 j5 V4 ]5 F; X( S
             if((K>=0)&&(K<=9))
! S$ Z; \) V5 p0 E3 S) r             {! _# ^" |( J' d* ^' t3 g
              mima[j]=K;
. q& a7 ?5 n+ Q7 s# _( q# l3 X
  s) w% C, o% y/ u                  if(j<6)) S$ z$ c+ T+ [2 x( |
                  {        
% C( X* L; i7 @) h8 b1 o9 P                   WriteCommand(0x89+j);                //指定第三行显示位置
2 s5 Y) j( j# L, r5 _1 z4 M               WriteData(0x0f);        
/ G" D# [2 V2 o: }2 [. w2 k8 u4 m$ O( I
                  }
4 L' [) q7 X. ~7 Z5 Y3 s              ++j;& e& ~9 p/ H, B+ ~+ Z
                  if(j==7)
) I1 M' N: F. r' N2 F0 ?              j=6;                                                                                                  2 K6 H5 R8 {0 w7 c7 |7 }2 Y( d  u
             }   //显示LCD12864并行显示
1 Z" b/ Y: \/ p                 if(K==34)                //按了删除键/ c( M7 H* O; ]4 j3 H
                  {
  F& P6 m5 c( v# q                    if(j==0)3 j: {/ r; R! Z) r  r
                        {! m8 A- W: s+ Y
                      WriteCommand(0x89);                //指定第三行显示位置
* u8 G/ j8 n, l* `6 n* Y0 L2 Y* `                  WriteData(0x20);
& q- D: @* E% v0 ^0 ?                        }5 L( G, f( Q# }  N6 V3 t% |2 {
                        else
- P5 t$ o  n  {7 E' i4 m                        {! z! a6 K! I# w( x
                          --j;
0 E# b7 j3 ?' [- y# A: ]% {% z  L                      WriteCommand(0x89+j);            //指定第三行显示位置8 [+ J8 z  e* J3 T% ~
                  WriteData(0x20);8 J" U+ @) f* C) V/ M* n) f
                        }- o7 y0 g( I( ~" {8 t
                  }) q% E% p6 Q% o" Q) ^: o8 j4 I
           }* [. H% Y. ^5 Z  ]% ~/ {7 H7 N
    LcmClearTXT();( z. s7 o' j9 T9 w! V: \  z3 I5 D1 ?
0 |; X8 ~# \" Q

* {: N) y, D& v+ \8 |/ D          for(i=0;i<6;i++)
- _1 t# G& V- P1 j6 S         {
% I& x; F. n5 Z            UserPassword=mima+0x30;/ g2 ~9 ^* v% _2 k- l7 p
) w( W: h; b8 H, y- f2 |; [5 U$ V
          }
3 I8 u; l; Y. d4 }         if(j==6)+ {/ T3 F2 |6 H* ^/ q5 N' q" Z7 L
          {7 v( O* T5 T" X: \6 N$ o
           if(mima[0]==1&&mima[1]==3&&mima[2]==1&&mima[3]==4&&mima[4]==2&&mima[5]==0)
: k* `& ~+ w6 z, f4 x* c            Right_flag=1;" W7 s, i# |8 }7 ]
                else
! S4 N5 X9 ^/ e( _1 s3 J                Right_flag=0;7 ^+ O9 M0 e/ M& ^
                      }- W7 ~1 [9 l! o/ m8 T
          if (Right_flag==1)
) B3 ]5 x0 X, |         {
* M7 A# ]% `2 c; S                     Right_flag=0;
6 y; U" i! R/ I% u; h) M
3 w, O2 U; u+ d                   for(i=0;i<6;i++)mima=0;0 z/ x8 c, I6 B, V" `
                PutStr(0,0,"按键1 : 增加指纹");
* t: R5 W; R" M: n+ \                PutStr(1,0,"按键2 : 删去指纹");
1 V, W3 j: @+ U: w5 i: I$ O6 @! O                PutStr(2,0,"按键3 : 手动开锁");) X% X6 j* |- ~
                PutStr(3,0,"按键4 : 修改密码");
7 a+ q/ [# r, l. Z5 `" [' i     while(i!=tuichu)1 V, a+ w' H$ t/ ~
      {         
+ e4 D! h) t) A                 i=Keycan();
$ N& U* T9 I" i0 X
( [1 K5 p" h  m- e, ^: ]+ s                KeyDeal(i);  
( l6 Z/ R# z! k8 ^" A            switch(K)
: j( v  |, m2 D( p7 L; j  |8 ~            {& B* W7 j, Z3 s3 p
             case 1:    addfinger();K=6; break;  _1 ^4 ?( Z( k6 d
             case 2:    deletfinger();    break;
7 S5 _4 p4 a% b& y. i. U                 case 3:         zhu();        K=8;  break;) o* H8 Z8 r/ p: S1 [. c. m5 H
                 case 4:    gaimima();        break;
) n" x9 F/ Y( U* _/ i  n             default: break;0 |6 e1 X0 \8 g  b- X  l
            }6 J9 s" y. g3 g5 ~+ A
      }
' r6 O: d. K" V+ B     }2 g2 I5 L# F2 c+ g
    else
3 \9 E% h' W( E) j& ?( j) t% c. n    {5 H/ v- p2 b0 R

7 v. J, S- b; k0 J) }. S, S: A                PutStr(1,2,"密码错误");
' u7 o1 p6 D6 a5 I/ N2 g                PutStr(2,0,"  请重新操作!"); + G: v/ J9 U2 b5 _
                PutStr(3,0,"  按任意键继续");
: y$ O: ^1 c) I9 n; M# e. a             while(Keycan()==0);# F& [- L. n0 k, |, k1 U
                PutStr(0,0,"按键1 : 增加指纹");
* G9 F7 F) f% t$ b& g4 n# x                PutStr(1,0,"按键2 : 删去指纹");
1 ]* `9 m+ Q* Z0 @                PutStr(2,0,"按键3 : 手动开锁");
3 x3 A: s6 G! z/ o- Y- O" r3 {                PutStr(3,0,"按键4 : 修改密码");
" p9 Y) I6 T; W8 |    }7 D! O* y) ]! @  b) C% _' e
  Key=0;; w5 p7 c% R" ?/ Z. Q5 Q

8 l, f6 A" `$ R+ g8 b& t5 q% D}, R  T6 v: Q  S/ P+ l0 b  n
void mimakaisuo()
( L# Z2 G( X/ F. m+ P3 Y9 g{7 r; t) u% o: D' d7 S( w- i
uchar i,j=0,x=1;" [3 x$ y. ]" W" H" P0 k0 f
             uchar Right_flag;, ?- Q8 t0 Q3 o+ j
      LcmClearTXT();
9 F5 G# ^5 D9 q, F, V! M          PutStr(1,0,"请输入密码开锁:");        
3 m# L8 [3 H! Q7 C2 A+ J           for(i=0;i<6;i++)mima=0;                                                                        
6 h9 u: y* ]' r8 h5 F0 O           Key=Keycan();. T7 }" J9 i# E. K- K1 m
      while(Key!=queren)0 t! w2 B8 J8 E: {
           {1 u) U4 ]- s0 M1 f$ w3 G
             Key=Keycan();
3 M4 _5 ~$ G2 K- Q5 O8 m  ]' B             KeyDeal(Key);
6 s. D6 G8 f+ @- W9 |             delay(30);                                                              
# u0 A6 V4 W4 D$ ^             if(Key==0)K=10;/ P+ Y$ q: b! T; \2 |1 v3 U* @
             if((K>=0)&&(K<=9))
; r. |4 p  O* n# Q             {" ?: e$ a8 y% B1 q& Q' H
              mima[j]=K;
" c$ s6 X5 m. O/ \4 k2 o9 X" y  u! g! H, n4 k; I& V1 p
                  if(j<6), M' s( r+ e7 Q2 a3 k6 o) Q
                  {        
& H+ A' Y) H" n& \8 F2 A2 Y                   WriteCommand(0x89+j);                //指定第三行显示位置: Z6 M- C  C* T; d( K- S6 F3 i
               WriteData(0x0f);        
, e/ w( V- _/ @9 a- z; s& ^6 t2 w$ F
& o7 r' m2 U0 R  x( {5 F                  }4 V9 m- p2 J+ Z+ j1 R+ k
              ++j;: k3 n% G" y9 h% h8 W+ Z. Y
                  if(j==7), J& ^  c5 ?5 `! b: I0 ^: L# L
              j=6;                                                                                                  
3 V  l; n) m* M5 X             }   //显示LCD12864并行显示 5 t& t' \; h' p
                 if(K==34)                //按了删除键
! \3 S8 Y" H6 v' Y% Z0 x4 n                  {
5 d4 m+ ~# G- w# j7 _                    if(j==0)( G" K: e' T+ p+ [. a5 z$ l: a$ e5 ~
                        {
, p  {7 z4 Q6 T" i, _                      WriteCommand(0x89);                //指定第三行显示位置
4 B: b# j/ T% x2 n                  WriteData(0x20);/ t* P8 X4 i  Q( f) R8 Z2 y
                        }& ^3 |5 g- \! L, N! Y8 P
                        else
6 n9 Q( L/ I& q( V* e                        {$ \/ U* \1 b* V$ G2 F
                          --j;
5 A, S, H* p6 `0 B! J* ?                      WriteCommand(0x89+j);            //指定第三行显示位置
8 e$ d' d1 |/ B9 j% o                  WriteData(0x20);
& Q; c- _6 b0 y; B- K                        }
  z) R* K9 o# n" B6 Y                  }6 t( F& N  B6 M
           }
# l# V& l/ X9 r4 s: H    LcmClearTXT();
% \2 k2 L% ?1 b: T1 w; g1 I6 I% m% q* b, K% O1 N

( U/ z: _$ U# n# h          for(i=0;i<6;i++)
5 X( s( H* A0 F6 e+ q6 {+ j         {
! W# r( n' ?' ?0 \            UserPassword=mima+0x30;% m+ l; h! f% C& i

6 t  ^  ?! f5 Z; N& b. R          } : c6 v2 w/ q) B# R; p( P; q
         if(j==6){Right_flag=PassWord_Chack(); }6 y! V6 d0 t9 J/ P* T
          if (Right_flag==1&&ErrorCount<3)% }% t8 p. u, L* Z  Z
         {' [1 ?* E( ~- K$ D& l6 i
              Right_flag=0;/ l' u) @9 a/ S6 S# p% |5 z& ~
                   zhu();ErrorCount=0;  . Y/ _9 k" `4 R- `, Q
                 Feng=1;
4 a6 v* I1 p  j2 W: g& a                  for(i=0;i<6;i++)mima=0;" i2 v; d+ e2 K7 {% y) I
     }( b" `  A( Y* |* A
    else* c  Q# C9 W; }- V- e5 z- ]3 Y
    {
3 f3 i, w, Z4 p$ V) c# p' W# _- i+ r            if(ErrorCount<3)
& i) h( O& }; i5 {: Y5 g9 [3 q                ErrorCount++;
. t$ Y) R( B. `* o. V% @                 if(ErrorCount==3)8 r- X% j8 z2 `9 t2 c8 @! n
                Feng=0;
' f% i) U/ N$ d- |" ~0 }: ~. `/ b9 c$ S) K+ J
                PutStr(1,2,"密码错误");% o. y6 v( @# s6 M# F  q7 h
                PutStr(2,0,"  还有  次机会"); / c9 p3 V# r* `+ c' o
                PutStr(3,0,"  按任意键继续");
! x. {; [2 A  g1 A( D$ L# ~% r$ ?                WriteCommand(0x8a);
+ U) V. p4 _) _# f9 I* f                WriteData(' ');
2 \0 F* [, V5 ?                WriteData(3-ErrorCount+0x30);
" J6 U% x: _2 x; t9 t7 o  T3 r3 R$ j; u) _# ]7 n9 d
                delay(1000);
& E+ L( w7 K# J. ?0 @% p- k
! ]  z/ e3 J, U  Z$ j" v    }
  q: i6 g* ~1 x# |9 g  Key=0;6 ?5 ~6 v. E" S
  LcmClearTXT();
6 R8 D' V. B2 D% E; d}$ F4 a0 K( i6 O( j
void fan()# }6 ]$ |  G1 e( V1 z! C
{
. A5 ~2 R6 ~1 @, n) y2 m8 y//        PutStr(1,2,"请先按键");
+ M& n$ n3 _, n* \, H4 {; h//        PutStr(2,2,"再刷指纹");% U0 y4 x' o- a  K/ ~0 E
  if(Key!=0x81)                        //管理员操作
9 r! {  J5 _+ |7 S" y; E  {( L9 c) n  {; D8 s' o; A" U
        PutStr(0,2,"欢迎使用");; e7 A7 `0 ?6 \" S+ E/ p. F
        PutStr(1,0,"指纹密码门禁系统");' o/ {1 f, j0 D% y/ l5 `( F
        PutStr(2,0,"密码开锁请按 C键");
' R* z+ ^$ I$ s1 W! L% f* a- n5 @        PutStr(3,1,"请按手指开锁");
9 V. i6 v* L0 a' h  L   }3 W0 r$ {6 T. W" n
  Key=Keycan();3 I# p) I$ k% m1 g: g, `( L6 C7 c! Q
if(k2==1)                //指纹刷机) h. M- v& y7 x. o6 o# \' L* ^
  {
* s9 f- n4 S! e3 r          LcmClearTXT();
0 ~  v6 @  @) r         shuazhiwen();
! Q; N4 w& M9 g         LcmClearTXT();! ~' G  E! F+ X) |8 z
  }8 g. j4 b2 g7 g1 k- J
  if(Key==0x81)                        //管理员操作1 F( g% y- G  ]( N) ?, q6 x$ h
  {
: I& c5 B. [! @  \% }        LcmClearTXT();
; e! h. B  P2 n% s        guanliyuan();
* `* K4 O& V- M5 B* B" ^% Y& o    LcmClearTXT();
0 Z- |' ?; y, m  }# Z; W/ O, n  o. s# t2 E
  if(Key==0x84&&ErrorCount<3)                        //密码开锁5 o4 u) H9 i! Q( c6 Q/ q
  {( N6 I( A/ [% t, k' \
        LcmClearTXT();: b* t$ b$ q& _' s' d4 I
        mimakaisuo();
7 D- N; n0 H, m9 b5 p5 i: L7 _    LcmClearTXT();
4 W2 C9 _# i/ e4 j7 g/ S$ b" [) ?, c  }5 c* ?7 V5 E- n

1 M3 D$ }9 c  i! o( l8 }4 O}        
6 a3 m/ s( D- A) F, B$ O! V, u. G3 y
void main()' [, w4 {) b6 O8 W7 {( X( T6 Q
{         
, M  z, j+ \9 C% {! J. L1 p8 L
; ^! Q. g9 W. Q//PSB=0;) `1 J; B  M. U! @1 Z* ]& E
        UART_Init();           //串口初始化                  
2 s' R1 y7 \7 @" L& e) H          x24c02_init();     //24C02初始化! L3 X) ^, s. P: T" w- O& C1 h& \1 ?
        LcmInit();               //LCD12864初始化                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            : k, f/ S) I8 Y2 h0 K- `* d
        LcmClearTXT();           //LCD12864清屏        
) f" H$ R7 S4 M; m4 Q2 R  x: \        while(1)
" l/ e9 s- d3 O2 n* ^                {
% _1 S! T* x5 N. |                        fan();8 |6 z/ U& y1 w/ `: w4 k/ Y; A
                        delay(100);                  
% x5 W/ X, e2 W$ A' X9 ]                }        
8 f7 |3 g9 f" \4 i& A: V}2 b# Y3 ^: x. g0 \$ a% `
3 \  `( N+ }. o) u+ t, T
//外部中断解码程序_外部中断1& {( u% K+ d8 o$ X" u( Y
void intersvr1(void) interrupt 2
* r3 o$ C6 R* D+ l3 w( P{
2 L2 X: c7 i. u% _: ^ TR0=1;
  ?3 A( @; A0 o  [1 q6 q% w) | Tc=TL0*256+TH0;//提取中断时间间隔时长4 Y. |( n4 S& @6 X' I9 j
TH0=0; * \% y6 x7 M# A0 e! g0 {' _
TL0=0;         //定时中断重新置零6 K- m$ c, z7 a' G
  j5 v9 r5 _) E6 s% `
if((Tc>Imin)&&(Tc<Imax))
+ G/ K; B  ~- [* H! L6 ? {
! `& |4 B8 A) I7 r        m=0;
$ X0 u' b" _9 a7 M/ \        f=1;
6 m6 T3 E" _1 W$ q7 K! S$ ?  p0 l        return;+ H) g/ q: r- c
}       //找到启始码
) H6 x, T$ U! ~! L1 L: T if(f==1)
& G" K$ [" B  q4 z7 | {
" [& l5 o/ [' T# J        if(Tc>Inum1&&Tc<Inum3)
7 P/ T2 W) [% v    {! ~! |, e4 H4 f- s5 T: i: v
           Im[m/8]=Im[m/8]>>1|0x80; m++;
. m7 @/ a, |" E. i7 [    }
/ z0 s' |: l. o0 c3 k    if(Tc>Inum2&&Tc<Inum1) " o" n, w( ^0 W' O7 ~
    {
  {$ [) E- q% f5 X- G0 T      Im[m/8]=Im[m/8]>>1; m++; //取码+ g2 K/ N) U' E$ Y4 i3 I: U2 ^7 K# Y$ y
           }
+ P! ~* W" v$ X' S, c. {           if(m==32)
7 b. B$ Y( h/ P# G& }    {
+ v# u  G  R  \% F      m=0;  
# D( b* W! L0 _( t  F  W) p, A      f=0;
0 `% u9 e* x( P$ `. C! I! Q3 r, x      if(Im[2]==~Im[3])
5 D: `& _1 f0 y& K& C/ Y      {
3 p7 A% i3 k' W- ]6 y           IrOK=1;
# s* R" L$ W/ z1 B% Q6 }                          TR0=0;
/ a, Y& e5 ~7 r6 f) b3 i) Z# n& ~           }2 ]0 ^2 L% |, I+ K8 h+ e
      else IrOK=0;   //取码完成后判断读码是否正确
' o5 A6 Z9 o. y$ y6 z, j: w# `$ ~; g" b; `

9 K. U& D; P4 V4 i% O! z) }…………限于本文篇幅 余下代码请从论坛下载附件…………
! S# J; \1 k/ O
游客,如果您要查看本帖隐藏内容请回复

$ Q6 S$ k) ?; j: X4 ]" N$ _: x
( l% X2 U5 Y1 p2 ^

该用户从未签到

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

该用户从未签到

3#
发表于 2020-4-5 09:15 | 只看该作者

3 \- i& \! c4 O. b7 k, X$ ]/ U学习一下,感谢分享啊, 谢谢!

该用户从未签到

4#
发表于 2020-4-19 09:28 | 只看该作者
红外遥控指纹电子密码锁程序学习一下. ^0 Q5 |% ]4 f! ]# |2 @% h( M. E
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-12 03:53 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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