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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机的红外遥控指纹电子密码锁程序& t/ {# ^* u8 u1 E
" R# Z+ }1 t/ m4 a& w; \+ v

, [3 L+ x* L* }$ L( F+ D#include <reg52.h>3 l* d: j3 X! w% N, r; t$ v- D1 U
#include <intrins.h>
1 z( A, Y1 N3 c#include"24C0x.h"
5 _) T+ R9 Z! {" }; b#include"LCD12864.h"/ g6 \9 ]3 H5 y; Q8 E# ^7 g
#define uchar unsigned char
* o3 _3 d9 s" `6 I0 G) U; `4 w9 d9 u#define uint unsigned int8 B; w  Y8 ?& o! w% L* d
$ S0 c. d; ]% Q8 {
#define buffer1ID  0x018 E. W$ v% e* H. {
#define buffer2ID  0x02
! w0 v. Q# m$ `2 O#define queren  0x88% n# e9 l. B4 R$ a* E' m
#define tuichu  0x86( \, v: [: c3 K" ^' C0 E- ]8 V; w
#define shanchu 0x84
1 }& v2 b  t; O7 b; x
$ O. J. G- J  Y6 b9 j+ X#define User 1                                     ) q. N* w1 R& \7 W

% _  e, ]7 `1 [8 z2 V- e) W5 Dvoid fan();" ^4 {0 k4 {% ~

. ?5 F7 l; v( fsbit B0=B^0;8 X3 m* R+ E$ w1 r% X
sbit B7=B^7;
& [1 k. R& L% i- isbit k2=P3^7;
- w. c2 {5 @5 osbit jidianqi=P3^6;
' n- I  c; Z! \  e. Gsbit Feng=P2^0;' b6 M8 F' P: V* l$ f

  {2 a: k, A5 F6 E* J% o' w( gextern unsigned char times[];- M, z# J! u8 l
uchar  Member=1,sec;. m9 V! j  `" ^+ X
uchar  ErrorCount;
7 H5 m% s' o# o$ P4 K0 t, p; U//////////////////////////红外相关//////////////////////////% ?6 x! y$ M% M0 u! `+ Y
//时间计算
2 G% f. P& z; e1 w5 L8 j#define Imax 14000    //此处为晶振为11.0592时的取值,
! M. v  H! N7 ]- e# |* @#define Imin 8000    //如用其它频率的晶振时,
# _8 ?$ P$ ^2 _8 x#define Inum1 1450    //要改变相应的取值。
5 K/ `: E+ n) r! T& f5 d0 w. h5 U#define Inum2 7000   B" m/ `8 R1 c6 M  {7 d% [
#define Inum3 3000 ( {; @+ A& L/ @
//解码变量9 V- w0 @) Z0 y! P
unsigned char Im[4]={0x00,0x00,0x00,0x00};
3 H) _; Y2 s% E/ K
% T0 n; r4 ]$ }$ j//全局变量
; f# L$ a! }) k& k/ H0 f% Puchar f;& {* f% C. J( d
unsigned long m,Tc;
) z. j3 l' D6 Q: z) U* ?+ u# a0 R0 Tunsigned char IrOK;# N- J# Y; o& a  Y# k" W" m. h* n
//////////////////////////红外相关//////////////////////////) z, ?- J" C" k4 D' Z* u2 o3 e4 i
uchar  code buffer[User][6]=5 ?$ @* i- Q% ]3 n; y
{
4 }1 {" f% c' y* f! m- o {"000000"}  o! [" Y+ \- N- ]8 i; F
};
- O* ]  B8 d$ l! R, F' l) g; A' V( B7 K3 g: P6 C0 F
' A& I4 c8 v- h5 a
uchar dz[4];) L+ D1 l5 \2 b% p2 P
uchar time[4];                        
/ k! U  I2 K4 _1 A- suchar mima[6];# h/ ]3 A) |0 L  p
uchar mimag[6];
( _" s& v  u9 auchar mimaID[6]={1,2,3,4,5,6};
: Y) `4 j! c- }  e5 y2 W* n6 U7 y
  T# z9 O: A$ _3 X# _6 l5 @
uchar Address1=20,tempx=20;
7 E! r8 ]0 E. j: O) Nuchar Address2=20;   0 k2 E' \7 W2 B: p
- @4 _( W+ I* G2 q2 N
uchar data K;& ^. m! [8 b; |- [  [# g
uchar data Key;
" }0 J5 q$ ~4 }* n9 }
, ?* o1 b  y  B3 N2 Fuint PageID;7 ?: ^2 J7 l9 h& ^# \
uchar data querenma=11;$ D) j6 f: J. D' h: J
uchar sum[2];
  y7 N& t3 I2 Z# Oint summaf,summas;
, @2 ~. j* ~: Z. X9 V. H
2 R) \$ c- V4 @) E0 ?6 Tuchar  xdata UserPassword[7]={0};//密码
1 \/ ^. @$ I+ T5 X- Huchar  xdata DSY_BUFFER[16] ={0};//缓存" h& P- ]6 V  b( F+ V; j4 h$ F; b' W

5 n/ T8 h/ V; U2 f9 s1 i1 B8 U: r/ L9 Y# X% `/ Z( G3 v( D
void Red_Init(void);) l$ S; P; m- a
#include "zhiwen.h"
: E' ]! U" j) G0 H5 L/ l) ^//检测脉冲宽度
9 p/ ?& p. d$ K; k! S* kunsigned char check(void);, T5 X) D) E1 F7 s. e# O' \

) p  n8 `( O; ^' Tunsigned char redchange(unsigned char rednum);( A1 A6 m$ j1 ]- ^( i& P# Q  z

$ y3 a$ g+ e& ?6 B7 ^
3 ~1 s2 o; n; pvoid delayms(unsigned int z)* m; B+ B$ f# p$ A
{+ h- _4 t/ E. o, P
        unsigned int x,y;; y$ ~% U& R# C9 j
        for(x=z;x>0;x--)
& R: {* t6 P# x/ t                for(y=110;y>0;y--);
+ Z$ L, Q- e, m, Z! ~3 C6 u0 z}
% m) c& G  G0 c! n0 s. {* Y
9 \( T2 w% p2 V/********************************************************************: d- H' d! i# Q; n- R- d3 W
* 名称 : Chack(uchar User_Number)4 e: G: l+ L. t2 U
* 功能 : 单一用户密码检测) Z$ W2 j& \2 n, k8 [0 b
* 输入 : User_Number
3 w  s! R) a( U6 g0 Q) x8 u* 输出 : 密码正确与错误,错误返回0,正确返回14 [, h, [4 D" s3 |
********************************************************************/
/ [5 B6 Y* Y5 J* ~1 Q& u; Guchar Chack(uchar User_Number)$ U: @* [; F9 |& P( `! }
{
& L) r1 ?. X6 M. W% J        uchar flag, i,temp[6],Address;' P7 }& N1 |, _; G( P+ T
        Address=User_Number*10;! g2 a- L+ K6 [% ~
        for(i=0;i<6;i++)8 e2 x  z) H% W* ~- F" s0 d) U# t; T
        {
+ M5 f2 R( z: b                temp=x24c02_read(Address);9 E. D6 h4 a. Q6 h$ ^
                delayms(10);
8 o! h/ E# U+ P. ]5 r: O8 Z+ D                Address++;
' M+ C. u9 m$ U/ d& ?$ s        }4 a9 m2 G5 r7 W
        for(i=0;i<6;i++)
0 ?$ F! t' \& ?2 ^8 v        {& @0 L/ `- i; @, ^# x5 t; ^
                if(temp==UserPassword)
  z- z/ g) U9 W( E6 \$ i! s/ E; r5 X                        flag=1;
: g8 j5 }% ^- X" Y# S. @8 Q                else         7 E2 ~& ?+ E* v8 e0 U3 p
                        flag=0;                " f% w5 \! V4 R( s0 G
        }& d4 V2 t" ^: R4 d
                return flag;
/ v* K( g  ^# z: t% h}6 T% q% y% l4 `- m/ o7 e& f
; @* O$ |8 X8 d0 ^9 F: W& |4 a& W4 S
/********************************************************************
6 v. p3 C/ p5 n  K* 名称 : PassWord_Chack()! {5 x& @7 L/ {  |8 ]" C  @
* 功能 : 所有用户密码检测8 I. e4 b( x0 z4 K+ H7 o
* 输入 : 无
+ f3 ~2 K( [! \8 P, @# Z& U" h4 @4 C1 h: T* 输出 : 密码正确与错误,错误返回0,正确返回1; A% n9 {7 i8 W: x. {# {2 n) h9 \
********************************************************************/5 x4 I/ e' l, H( M
uchar PassWord_Chack()
  |5 R6 ^6 [0 t{
9 X( I2 d5 M+ D3 q$ {: R4 h. u; G5 j        uchar i=0;
  k, ?# b" I3 x1 Z, W5 I* ^( f        while(i<User)
5 K& k' ^  M- t5 g7 g6 ]4 C2 J( M6 ?        {/ }' A! m& M/ M, r
                if(Chack(i)==1)
. @0 I9 O; i7 }                {
$ V7 ]0 _( C& ~4 d                        Member=i+1;
0 h% K0 [" h) J( T                        return 1;! o) E1 n- h3 M
                }: s3 B; m" m. k6 g
                i++;        
" q/ n7 I5 T$ L/ c2 a& p8 \: d        }* m9 K. E+ {8 H( m+ }8 T2 J
        return 0;        ( D% E3 n7 F; @! u" Y, [/ _3 M
}
% b$ X1 ~* Q( O& T- e
# D' B1 w7 ?6 V" Jvoid delay(uchar tt)' u% z4 L1 g! Z  d" w3 R
{  uchar i;- W4 y! x, K$ ~+ q
   while(tt--); s. C% k/ c. _7 U3 n2 m0 w
   {, ]' y/ |0 @3 t7 Q* T. c4 o
   for(i=0;i<125;i++);' h" u; ?8 U% {. `
   }
# v: K* Q  c- u" P}
1 h3 P+ e' s( m3 o/********************************************************************
, V5 V" n8 T& `1 Q+ Q% ~* 名称 : UART_Init()
: e4 k9 m5 h& P! _* 功能 : 单片机串口初始化" v8 ?% [( D9 U5 F: d6 m
* 单片机:晶振11.0592MHz 波特率为9600bps
5 Z2 H$ j' l  [  z& y3 d* 指纹模块:波特率为9600bps,
3 c" y5 d8 {8 ?. _  q! n********************************************************************/        
; @& [' }5 w7 X7 Z5 U$ xvoid UART_Init()1 m3 d3 f3 Z# D% @- A' \3 n
{( Y/ ]9 P4 [4 u* U5 x; j7 w. n
        SCON= 0x50;               //串口方式1        //REN=1; 允许接收
# s' U% Z* A$ t        PCON=0x00;                //SMOD=09 ?2 s: {/ u# t6 G
        IT1=1;
& w0 u6 r8 K) c9 Y        EX1=1;3 }& Z# o; z4 t/ S
        TH0=0;8 ]3 F# Y( K$ X4 F" E( R" x2 }
        TL0=0;
0 h' i; q3 _- H        TR0=0;
9 Q6 x% B/ p: \+ f" _, Y1 B        TMOD= 0x21;               //定时器1定时方式2
& T# s! k3 s; E: W: N7 G        TH1= 0xFD;                //11.0592MHz  模块默认波特率为9600bps
! ]4 ^# l8 e9 i: N        TL1= 0xFD;                                                                                 2 q/ I1 \3 G2 m6 k5 `' t) A7 q. l
        TR1= 1;                   //启动定时器 3 i* B3 y$ N9 X/ J) Q8 H# D8 r* U
        EA=1;      
! ~& U- P' z4 h5 Q$ N6 K}$ T  i9 Z5 a( d0 X8 _. T2 H

0 e# ]: P$ h  t& \  Munsigned char Keycan(void) //按键扫描程序 P1.0--P1.3为行线 P1.4--P1.7为列线% |$ `0 N- e: d, B, ]5 V
{4 x1 r0 Z( P8 I$ _4 e$ R6 S+ x
  unsigned char rcode, ccode;6 W' h% K" U/ A1 w; I( j- ]; k
  P1 = 0x0f;      // 发全0行扫描码,列线输入, ^1 W, e7 I! J- o  c
  if((P1&0x0f) != 0x0f) // 若有键按下9 t! }4 J- m+ H
  {' v# t; M$ ~7 {
    delay(1);// 延时去抖动
& ~) u: z' ?: J( b* {    if((P1&0x0f) != 0x0f)
  }  ?! [4 e- F9 H    {  rcode = 0xFE;         // 逐行扫描初值# \8 X; j# v7 x8 B' S- v4 j5 n: d* R
    while((rcode&0x10) != 0)7 I+ `8 l  g) H* J
    {' M9 R( z$ q# b) [. O
       P1 = rcode;         // 输出行扫描码
) q) g* R) B8 @4 _, t4 F0 `      if((P1&0x0f) != 0x0f) // 本行有键按下8 X! `0 s* P' ~+ G1 R
      {
+ s! {; ^! i: _       ccode = (P1&0x0f)|0x0f;
1 K' A& g% Z# M% m8 |       //do{;}4 o. T3 F5 q; }% ~
           while((P1&0x0f) != 0x0f); //等待键释放8 r: W2 [9 Y# g$ e8 q
            Feng=0;% @0 p8 B& E% s" a$ j; R/ F
        delay(100);
! d9 b0 c; R% U/ n1 N) C        Feng=1;
4 G7 |9 S& x* c       return ((~rcode) + (~ccode)); // 返回键编码
! y9 K; Y3 x6 [      }
) L& }7 P9 s1 w7 n    else! m; v0 g' B; k$ |0 W
    rcode = (rcode<<1)|0x01; // 行扫描码左移一位2 o# [4 }& ?" e  }4 D- I, e* t
    }
  k9 K& f) C% r; C    }" T7 I% S" I8 j$ M) k
  }7 Z' @; }3 p) D6 H9 Z
  if(IrOK==1)
$ O" Z' ?  o' }8 P# \4 A, S  {$ ]6 ]: Y% S5 B( h9 E% U
   IrOK=0;
/ q+ e- _8 ^, N, H3 W0 w   Feng=0;+ w7 M! v/ _! |. d0 }
   delay(100);: _$ S; k% V: q8 p
   Feng=1;: V" k" r4 T9 z% d5 t: R
   switch (Im[2])) t3 o" g9 @. S. t
   {; ?1 w/ J. ^' X! \2 X
    case 0x16: return 0x28;break;                  //0- m5 C1 u+ N# I6 M
        case 0x0c: return 0x11;break;                         //1
! \) Q0 s: V. _6 f! F        case 0x18: return 0x71;break;                                //2
2 F' }  B& B0 k/ v/ Q        case 0x5e: return 0x41;break;                                  //3" ~6 P3 g  Y4 p5 M
        case 0x08: return 0x12;break;                                        //48 b) S4 n  J  u( D8 [$ w0 @
        case 0x1c: return 0x22;break;                           //5
; n4 z0 A& N: d" \        case 0x5a: return 0x42;break;                                //6
, Q  M" R% R, U1 h1 c, q        case 0x42: return 0x14;break;                                  //7
* K$ K2 t4 [1 y0 e* B/ Y# [$ I        case 0x52: return 0x24;break;                                  //8) d6 I% z( j9 j$ }* y" z
        case 0x4a: return 0x44;break;                                        //96 Q$ X8 |( H3 j% V9 y/ _
        case 0x47: return 0x81;break;                                         //a
3 O" d3 i; E- n& q5 R7 h$ j) O        case 0x43: return 0x82;break;                                          //b7 J' y7 A- j. C+ V
        case 0x0d: return 0x74;break;                                           //c
8 Z; q% x( ]9 A4 Y8 K$ o' d2 H        case 0x15: return 0x88;break;                                                //d
8 E4 ?! I- b" }% L/ ]$ I: a        case 0x19: return 0x48;break;
. k" W5 n% X2 r" H+ i   }7 w4 u+ w* ?4 c9 Q
  }  
$ q- b/ l2 _2 w; H# d  return 0; // 无键按下,返回值为08 }7 G# J) |2 _0 b2 V& k
}) }" j% b+ _) V3 X& ^! ?  I9 B

) v% `. ]- {1 ~" }  v% jvoid KeyDeal(unsigned char Key)
$ y0 c2 [4 L; G0 K% H4 ?6 }4 G2 k{  //unsigned char n;* U; b; W, B' Y
   if(Key!=0)1 a3 Y) U* P8 \5 L* h$ r
{) ]! M  y. n3 G
% f" m+ O! Y6 X( @
                   switch(Key)1 c7 N" T& a! ]1 M: Z1 m; q, A
                   {
6 a  ~5 ~% A; z                   case 0x11: K=1; break;         4 I7 O0 g4 r" g2 c8 K
                   case 0x21: K=2; break;  ' A9 P1 b1 e4 ?7 K/ `  R
                   case 0x71: K=3; break;  & N# W% W, u; f6 `2 I
                   case 0x81:  break;      
# q- a2 N- T. u& p0 [5 [' F                   case 0x12: K=4; break;
9 y: r) k% [  u; `# v                   case 0x22: K=5; break;, x; M7 K, G2 B5 s! y: y
                   case 0x42: K=6; break;1 Z/ i  k& i: [; k1 `6 T
                   case 0x82: K=34;break;                2 l% {( _  h3 A3 Z: e
                   case 0x14: K=7; break;
5 a, G  ^+ E9 m' n                   case 0x24: K=8; break;
  h9 T0 Y+ t: d2 I: L                   case 0x44: K=9; break;
" y# _3 U7 t6 E$ r                   case 0x74:  break;                4 t; j( j# u' G
                   case 0x18:  break;               
  a+ p, R2 b5 J                   case 0x28: K=0; break;
5 I; b7 i, l+ J+ J; }' N$ p4 R                   case 0x48:  K=11; break;- x) p% t- O% y3 |/ i5 L! P" K
                   case 0x88:  break;                9 o& P2 E( @8 w  N! j
                   default: break;' ^( A) K; O- g; ?) N; C* S
                   }
. f' [' d6 ~# H  }
  Z2 n4 o5 H9 R. z  T}: L2 }8 o# U" q$ ~

4 k1 A3 {7 X# y  g  d
* H8 f$ t& i! @, j/ J/ R( C& w" F( }+ p! [void shuazhiwen()' b  x% n/ I8 S# b
{
& k+ T5 H( s. X  }+ M    uchar IDs1,IDs2,IDs3;         ! z6 J  j  ]7 {
        LcmClearTXT();0 _+ B  N* B0 g
        PutStr(1,1,"请按手指开锁");      + E; ?/ J& _5 x; C9 d0 d
        SFG_identify();
, u: M3 b8 h6 M& l/ p+ ~1 T% Y, p        while(querenma==2)1 s" a6 b, `5 p* x8 h$ X
        SFG_identify();
4 x6 W: ?  e' A! ^        if(querenma==0)2 N' W7 |# o2 m+ X
   {
  f' {( R; ^  E$ D& M& `  V( U                LcmClearTXT();
' u( D. {8 P3 d4 F7 D                PutStr(1,2,"门已打开"); " ~1 N0 I8 {9 x
                IDs1=PageID/100;+ h$ P- W( H. |6 W/ {& _% |' B
                IDs2=PageID/10%10;
" L6 A; @( n# G& t                IDs3=PageID%10;
3 ?7 P$ P( \0 P3 G2 T4 d# a7 N                PutStr(2,1,"编号为:");
7 n9 J* U& Y4 L& |, }% T                WriteCommand(0x8D);                //指定第三行显示位置
1 Y' a( _0 ?6 `8 B                WriteData(0x30+IDs1);
1 Q- p0 A" z' W8 O9 H' N9 o1 q7 |                WriteData(0x30+IDs2);
0 L$ Y4 c( M3 j' W+ E                WriteData(0x30+IDs3);
: n  D( O0 c, E$ ?1 C; S                ErrorCount=0;
; }9 O' T( }& V5 O                Feng=1;. }% A5 {4 F0 R
                jidianqi=0;
0 d& V6 U( s: Y; w6 o( ^. ]* J                delay(2500);
* S- G+ S5 t! `; q' y; K+ k6 A- c5 Y                jidianqi=1;
# ^/ Q% ^% O5 I. H3 a1 f% }' s
. n6 l# R1 l4 b. V4 W/ d        }! A6 ~, }* f0 U; _, z( F  _% K
           else if(querenma==9)( w, N# o/ y& T( h1 n1 j* ]
                 {
) N5 H( V7 _" p: m2 f- q1 S                        LcmClearTXT();
+ [/ j" Z6 ^) O                        PutStr(1,1,"没搜索到指纹");" b8 `" w$ u! E7 |
                        PutStr(2,1,"请重新按手指");
2 ^, n4 P: [# [" J% G                        ErrorCount=3;0 T; k+ D3 c# ^9 c! K
                        Feng=0;
- K" `' U' Y% ?: t2 m: y# t; @% d. p                }' Y/ [- V% Q' c0 a5 D, Y% ^7 Y3 D
                   else 0 s2 x: @( x2 f8 M
                {& _) V3 a, E. g% w+ e2 v* B
                        LcmClearTXT();# e4 }  f0 Y* ~- T% L% E
                        PutStr(1,1,"接收包出错");
, a/ r& |/ M% ^% `* j( z- r( l7 ]                }4 @  s* q. G9 n
                delay(2000);5 ]9 v' ]# S# s- j
   //         while(Keycan()==0);, y" V$ X5 m1 r3 g7 N
}7 r& t: j8 L% b" x7 E+ I2 V3 J
void addfinger()0 J8 U( t# O  n4 u) A% p
{
  n* E# N! k$ V$ I6 t        uchar IDa1,IDa2,IDa3;6 V( \% J5 ?+ Z1 K% e( y5 T9 E2 I
        LcmClearTXT();
8 ~' c" F4 x' |% p% J3 D) E8 k  }        PutStr(1,2,"请按手指");   
# d9 R& o1 `1 x7 E  h: A- a        SFG_getimage();* R  T+ W, ?* d9 L& y& @5 n" a
        while(querenma!=0)' U9 |5 E+ v0 i
        SFG_getimage();! x$ G, ~( b# P7 z! s) O' @+ y* f* c
        SFG_genchar(buffer1ID);" _% L/ P9 b( e% R' x7 p/ n
        UART_Init();
! Z0 s8 M; M- \) R        SFG_fastsearch(buffer1ID);
6 `. L" B4 d4 G# ~        while(querenma==1)7 }% Z6 }# [( {% z; y6 i  V
        SFG_fastsearch(buffer1ID);" c' z* v) u2 Z; N

' ]; c( T$ ?7 D% [        if(querenma==0)$ z5 ~, \; m2 r+ @. L5 g
        {
6 w+ v! q, i  c/ `                LcmClearTXT();8 n" K& Q2 ]; z
                PutStr(1,1,"该指纹已存储");: X' s2 O; x2 ~$ y+ Z6 s3 g3 y
                PutStr(3,0,"  按任意键继续");
. ~( ~) K& j8 c+ h" r4 p            while(Keycan()==0);9 G8 C: d: k5 \" g, ^5 {8 d
        }/ a# n; {6 J" s. O
        else if(querenma==9)
5 n3 K# K0 T  P2 P2 p                {
" Z. R. N* [% P. u7 ^! x3 k4 |                        LcmClearTXT();
0 ]4 C. F6 i# Y$ Q; R                        PutStr(1,1,"请再次按手指");: v7 F9 H* q2 Q8 c" P
                        SFG_enroll();
* @7 _6 l# n! t3 c" x4 g) K) Z: k                        while(querenma==2)
' L% X1 ~0 K. v, Y! i' |                        SFG_enroll();
& u: J  n. y" g# N                        LcmClearTXT();0 C( R* C# q* Y: l% P
                        if(querenma==0)
, ]- ]+ Q$ d2 ^* ^4 @1 _9 G$ b. c* F/ I                        {
/ F0 P4 K* r- o& }, d- U+ l! q                                IDa1=PageID/100;IDa2=PageID/10%10;IDa3=PageID%10;4 P5 n" q: i0 M2 h* b. A% s
                                PutStr(1,1,"指纹采集成功");8 b* S, t( u1 G" E( ?' m7 _
                                PutStr(2,1,"编号为:");
7 s/ U# D9 I, @' g3 @" k" R                                WriteCommand(0x8D); 2 j: \6 }) H) m; x; W# r
                                WriteData(0x30+IDa1);WriteData(0x30+IDa2);WriteData(0x30+IDa3);
. I2 p; _4 V, N' F                          }" I7 P5 ]; V6 `; J
                  else  if(querenma!=0)
$ Z4 U. n6 W, \% y8 N. q& J                          {! v5 x8 T. D, Y/ Y; q

, M$ f) ?5 u8 Y                                PutStr(1,1,"指纹采集失败");
1 F$ ~; ~) K$ c- X" h% {+ c) T, Q6 }                                PutStr(2,1,"请重新操作");
  h3 E  X4 ^( w! O1 p( _9 ~                         }' p" A6 v) @, d, h/ C
                PutStr(3,0,"  按任意键继续");
  o: [7 A2 f0 P) n/ N3 y( q! M  o            while(Keycan()==0);
7 C, F0 e8 q8 {. [, Q' Y7 ]) ^                   }3 Y- A, c: D+ t
        LcmClearTXT();
" O. j3 O& B  k  l0 J% m                         PutStr(0,0,"按键1 : 增加指纹");
* z8 ^( v* y. c- t) @                PutStr(1,0,"按键2 : 删去指纹");
3 S2 Q0 E1 u6 J1 r, D4 Q. d                PutStr(2,0,"按键3 : 手动开锁");4 d# {2 j0 q2 t9 o4 N: C
                PutStr(3,0,"按键4 : 修改密码");
/ a7 n8 ^8 i3 i; o+ k7 o% J}
. r% l8 N5 i9 ?. J9 Vvoid deletfinger()$ Y: _0 w/ Q2 J/ r- }  P
{3 m/ {  d6 n+ o% f9 V& ?  g
        uchar i,j=0;
. L) D! m: r2 I        LcmClearTXT();/ Y0 l0 R8 f. k+ @' V9 |! S# s% E
        PutStr(1,0,"输入删去的指纹号");* b7 i: m' m1 K/ \$ m& ~
        for(i=0;i<5;i++)dz=0;        5 {' ^4 C& A9 k  }
           Key=Keycan();( d8 c5 n1 [# F7 l
           while(Key!=queren)
: u& q: Q) U0 r) }! x           {
  D2 @& A4 a. U7 v             Key=Keycan();$ Q, P. e. H: ]7 V! q5 |# {
             KeyDeal(Key);5 Q, b$ k+ q# O7 k
             delay(30);                                                              //按键有抖动@@@* w4 V) t; i8 Z: W- M
             if(Key==0)K=10;3 B% ~; q( T; G, [# n
             if((K>=0)&&(K<=9))
7 P4 U: V! u  p6 b3 A! j/ k             {* r4 D' J- b7 n- a/ L: |8 ?9 z
              dz[j]=K;
* c- x& y2 i1 M: U, a                  if(j<3)
8 Z/ q; ]( P* P& ^                  {        7 a" `$ ~7 O5 G) I
                                WriteCommand(0x88+j);                //指定第三行显示位置
, ^, n3 L( b, r* A% q3 N                                WriteData(0x30+dz[j]);        
' y# G9 r( }" C8 ^' @                  }2 ~/ h' W( \, I- r- D2 }
              ++j;2 S/ U5 k# C( F7 K# K$ W* X
                  if(j==4). ]: N4 z' w, C9 z) b
              j=3;                                                                                                   //@@#yinhuang4 m0 {# v& f9 @6 c0 _
             }   //显示LCD12864并行显示
) Z0 {- W/ t, c+ X                 if(K==34)                //按了删除键' V; f/ C  c, O& ~( t, e) V! b
                  {8 w0 S, U( h. F  _
                    if(j==0)
3 S$ H+ L8 V' }0 I0 W" j1 N                        {
; O; H# I( N% U% j* L                                WriteCommand(0x88);                //指定第三行显示位置' p6 O6 a  x0 n- {7 a  O1 U7 ?
                                WriteData(0x20);: {8 P9 ^  Q# w1 }4 F* I
                        }! E* ?: n; ?6 o
                        else
, e; R/ x8 c. \7 V4 e6 Y- U9 r                        {9 t6 B2 j3 D7 l8 l5 j2 w0 [+ G! ~
                                --j;" m) J# s( J+ K# K# b
                                WriteCommand(0x88+j);            //指定第三行显示位置" b* o* s, _2 \  F0 L" a
                                WriteData(0x20);
6 x; }3 [; S$ H/ O                        }
6 r$ M( Z2 B5 V" q                }' f, F3 u# i" d
        }, W7 U7 y2 m( Y$ Q" G
        if(j>=2)- M& h, H  @! x: t; m) G7 t4 q9 H
        PageID=dz[2]+dz[1]*10+dz[0]*100;
6 A- s5 K* i" w- L' C( {        if(j==1)& R% v/ N: U6 \
        PageID=dz[1]+dz[0]*10;9 F* }) q+ p* G
        if(j==0)
% Q" a" ]) C8 p& f* O" y8 W        PageID=dz[0];
* f- r4 n6 M# T3 F( F        SFG_deletchar(PageID);
' D$ t2 r" N$ F  G        if(querenma==0)
. o! b& d1 y: f$ b8 v& U8 Q$ c        {
& G8 o1 M% ^( m6 B                LcmClearTXT();. w0 D5 U, i. {! l* V5 u" W3 z& G
                PutStr(1,1,"删去指纹号成功!");
  u, i9 {: X' Y7 r        }* [2 f3 _1 I, w# c4 C
        else
6 R- L0 K; L% Y+ ?  e4 _) f% B7 D: |        {6 X" E( f7 N  h
                LcmClearTXT();* B/ ]1 u2 f0 Z/ h: |2 j) _+ _% R
                PutStr(1,2,"删去指纹号失败!");  7 \$ y1 @+ p/ X. v
        }
3 P: B. Q3 f6 Y: U$ J6 O: ?  W9 ]( [        PutStr(2,0,"  按任意键继续"); $ @* R  c0 v# q7 f: ^$ Z5 _! s
        while(Keycan()==0);
. ^, q5 t- H- d        LcmClearTXT();/ B6 s  ~0 S( j# R% u
                         PutStr(0,0,"按键1 : 增加指纹"); ) m' }4 a% ?5 E+ c# C
                PutStr(1,0,"按键2 : 删去指纹");
+ p" [, ^( H4 D                PutStr(2,0,"按键3 : 手动开锁");
8 W$ y! U! K' l" D                PutStr(3,0,"按键4 : 修改密码");
2 w( K* g/ \! b" M}' |! E. N# H$ J/ @/ c. ?. {; o

8 {% d+ z) E& F  b9 Ivoid gaimima()
3 I$ k1 a1 j* ?3 h$ h+ j% u{
, n) p! f. m+ z$ L        uchar i,j=0,mima1[6],mima2[6];# Z5 V) z. C# U9 X- z
        uchar k,temp;% V' W4 i& w7 _/ V9 {. ^7 F( @5 o
        LcmClearTXT();) h$ l: J6 v8 j3 N
        PutStr(1,1,"请输入新密码");8 [& A  |4 l! `$ d1 ]6 F9 E
        for(i=0;i<6;i++)mima1=0;                                                                        & u0 `/ m( ], a0 I, \: _
           Key=Keycan();
. x7 {( }0 w! ?) u* C+ a2 N5 |      while(Key!=queren)
% w; M4 Q( H4 r4 A           {* h* V7 n* v+ _: d( b! g- e/ g+ b
             Key=Keycan();; Q; x  w: y, f2 {: M4 N
             KeyDeal(Key);
) I; C, c* _1 @: \             delay(30);                                                              
0 m7 b/ b7 s; E7 O8 C* ~             if(Key==0)K=10;
4 H- A& y6 t7 m9 k! b+ d+ V             if((K>=0)&&(K<=9))
3 u- l1 s) W7 e             {
' A4 }& T6 r0 u, U5 w- G; E              mima1[j]=K;
6 m( o$ r% L! k$ A7 g                  if(j<6)
  R0 O0 A" e$ A- o) a                  {        ( a5 ^8 O, X7 r/ ?
                                WriteCommand(0x89+j);                //指定第三行显示位置
% k9 P8 x2 I% ?/ q                                WriteData(0x0f);        
  t! u7 J0 w* s8 j                  }
; K6 G4 }& {* v+ w- r4 F; m9 ^              ++j;% V: E4 Q1 c# M8 g& u) h' H  K' X
                  if(j==7)
2 d* K: c0 o& u6 S# v* e' ~1 f              j=6;                                                                                                   //@@#yinhuang
5 z- l2 a3 S+ D- V: C/ o, e) i7 j             }   //显示LCD12864并行显示
  q: b9 i& Y# N* X2 h$ L) e$ F                 if(K==34)                //按了删除键
* d: ~5 @' n: O4 A$ C5 Z                  {, p: s, w+ A! }
                    if(j==0)
% D" \' U: w3 e* O- I+ F9 C  S                        {) |. M7 ^+ q) ?) y1 c6 E
                                WriteCommand(0x89);                //指定第三行显示位置
7 }/ r0 I# X% B2 v                                WriteData(0x20);
0 G: }1 t1 p4 H) u/ L, Y4 X( S% g                        }- U: E$ [: U. v) k" K7 x
                        else6 m9 g! }8 \6 b: k$ \7 z0 p* ]' S
                        {6 u8 V, b2 j. g: k% }/ k
                                --j;" Q9 o' p- c1 h0 `1 h! [, p
                                WriteCommand(0x89+j);            //指定第三行显示位置
' h  y+ X$ w4 R$ m                                WriteData(0x20);
3 V& P/ M, [( a, C9 i                        }9 B0 z9 F2 U% y- B/ ?
                }
6 m# g) f4 _5 U2 D% X, S1 Z        }9 I( c/ c6 r; }4 {4 K
        LcmClearTXT();
( {. |. M9 E' }. y        LcmClearTXT();- @% U7 V  V! k  x7 O$ g" t5 l
        j=0;9 A, B7 t( R5 ]3 j- D
        PutStr(1,0,"请再次输入新密码");* t. l" k7 O! l0 W8 f9 L
        for(i=0;i<6;i++)mima2=0;                                                                        . T4 a$ }) w# B
           Key=Keycan();
& I6 i  ]3 P9 u# Q1 {+ b. B      while(Key!=queren)" I3 T9 ?& N) H
           {0 ~3 S. o6 a; X
             Key=Keycan();
5 ?) P$ p1 d. g% O3 ?: q) _! S             KeyDeal(Key);
7 I! \0 F6 f7 {# [             delay(30);                                                              0 r( t  N% ]. n" V9 r* @' u
             if(Key==0)K=10;' d) ~2 O, E1 u; d. C
             if((K>=0)&&(K<=9))3 j1 L% ^3 ?( |1 S' |" u
             {
. \& Q- C5 N% d0 [              mima2[j]=K;
% z5 L4 S6 ?2 I- a                  if(j<6)
, h$ v& Y( L! |" [% `                  {                8 q) L! W0 Z% }  `( N( y
                                WriteCommand(0x89+j);                //指定第三行显示位置" K3 J! X1 t# v$ c
                                WriteData(0x0f);        
6 p' m$ B; T* L  c                  }
; C5 H/ o2 S" M# y4 D/ g5 S              ++j;6 V  w! B. z" U, K$ z- r7 e& }4 `  B
                  if(j==7)
# c+ B+ o5 [, A! |- M; F              j=6;                                                                                                   //@@#yinhuang
7 R  [2 L/ n3 d+ z+ s             }   //显示LCD12864并行显示
  a* e* D9 D- B                 if(K==34)                //按了删除键
. E, h7 `" P3 R! S' S# Y8 G                  {# t  `4 H7 o: Z* X) v: w- C
                    if(j==0)7 h9 Y7 g; X, z
                        {/ K& M  @+ z. _/ g! v  n# X/ u- H# @
                                WriteCommand(0x89);                //指定第三行显示位置
: ~! M4 }9 a& V/ l7 d& _; i. m" W3 e                                WriteData(0x20);2 g+ d  i# T# F. u  t; J
                        }2 W: _9 {  E# y! y: f$ u5 f9 N
                        else
& g- z5 a1 O) W' G                        {
6 k1 g2 O: b1 b& I2 `6 k( u# C                                --j;
# A; I3 J9 q( h1 Q! c5 R                                WriteCommand(0x89+j);            //指定第三行显示位置4 c, Z8 B% e. J
                                WriteData(0x20);) d0 U, X, `. U% F3 P
                        }7 L5 ?  T( V$ M/ @' U
                }
% c, O9 e! u, f* t- _5 ?, P        }
, B' U% D$ p0 |1 X9 {2 a/ C        LcmClearTXT();
& {( c( o# o$ J7 |2 v        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]))0 [. p, I9 l5 C+ g  M0 E
        {5 r: ]6 I+ N( ?' |
                for(i=0;i<6;i++)9 E8 ^. I- J$ {8 {2 q
                mimaID=mima1;+ G, e7 a3 T+ ]6 u7 G
                /////////////////////////////////////////////////////
- u" c) C0 b6 q' D' t                for(i=0;i<6;i++)           //密码限制在6位以内
& |$ a' l6 g7 h, X! Y                {
5 C/ `6 w, o5 ]1 n, C$ U                        UserPassword=mima1+0x30;                                 
( d7 T" i0 i2 e& E3 _0 @3 g                }' O* X; q, o6 \: Q: U# N! D4 }+ z( j
                temp=(Member-1)*10;        
# O7 ?- J( `, Q6 m5 ]9 p( d3 j% I5 c, ?4 G                delayms(5);
& W& A* f( g" [+ x+ o8 [' j+ W0 c* z                for(k=0;k<6;k++)) z4 a2 L$ [4 i9 l4 @$ n- X
                {( R" f& V5 m6 ~7 n; `5 D- ~" s
                        x24c02_write(temp,UserPassword[k]);
' X1 h+ M' `8 ]0 K                        delayms(10);
. O8 Z" \7 `" W/ {  A+ r                        temp++;, y: o$ N  O, k! T4 U' r0 v$ V
                }  4 a, ]' |% l8 Y, z
                //////////////////////////////////////////////////////  i5 F9 S* @% G
                PutStr(0,1,"密码修改成功"); 8 {5 x' k7 l1 K% j$ x' @
                PutStr(3,0,"  按任意键继续");* z' c7 F( V- @" \+ B" T
                ErrorCount=0;9 g& C% L7 m: w) b
                while(Keycan()==0);
) s9 H! N. k$ ^1 a& |# h        }
, x- h* F  U; ]( a- O        else/ R( _# @' n6 M9 C0 `! V; k
        {
$ n. e7 g1 [+ X1 d0 d( r* S                PutStr(0,0,"  密码修改失败  ");! v3 J. J7 l" C; v( c; I5 r- K
                PutStr(1,0,"两次输入的密码不");
; \# `' Q3 P4 L- _+ w                PutStr(2,0,"一致,请重新操作");      
; ^& M$ T' {! Y                PutStr(3,0,"  按任意键继续");
, x2 v! O% e7 C                while(Keycan()==0);
7 ]. g5 V- j7 `2 ~$ n9 @        }
! q$ j$ ^: c- b$ n- N7 ~! J% o3 f        LcmClearTXT();$ D9 V- N; J( ?4 o' \; d4 _6 ~( L
                         PutStr(0,0,"按键1 : 增加指纹");
3 [' E% j+ M  t% p; a! t                PutStr(1,0,"按键2 : 删去指纹");9 Z) F' q. j. s- |
                PutStr(2,0,"按键3 : 手动开锁");
+ ?; T9 A1 r  K- {1 \                PutStr(3,0,"按键4 : 修改密码");
9 S& g2 P2 j/ P# L}( e! @9 Z8 r& e6 d, \  o- g
3 m$ r( e0 |$ f! r5 p. Y( }! Y
" ^$ l- e9 q/ f0 y( D
void zhu()5 e$ v7 i- R# x' B: J& H
{           
: X4 ^' H0 b" u0 Y4 t; R0 ]' [# D    LcmClearTXT();
' T8 w1 c+ h  _; S6 y        PutStr(1,2,"门已打开");
; ]% k+ H2 R- V# ~( n% ]           jidianqi=0;8 {. z2 u! r  N/ B: Y
        delay(2500);
4 K0 p4 q9 M6 O" s, o. g3 O% O        jidianqi=1;8 r, y; L" Z: y/ I  F
        PutStr(3,0,"  按任意键继续");
& ]" H+ c& ]0 e3 R9 J; K4 Z        while(Keycan()==0);# L% c. s9 O( F+ }/ v
                         PutStr(0,0,"按键1 : 增加指纹"); . M' k8 _3 m  R0 M+ n, l5 j' g
                PutStr(1,0,"按键2 : 删去指纹");2 R! ?7 f; l- H3 _( O' C' P
                PutStr(2,0,"按键3 : 手动开锁");
0 }* e5 ]2 K& [. g0 {3 S! l3 d+ b                PutStr(3,0,"按键4 : 修改密码");4 L: V" W* U& p' W8 K
}
! a; e: [7 B* S2 n, g2 W0 S6 f# U2 e; l! G$ P

2 `1 _# ]7 K& }" j" |, _; nvoid guanliyuan(). ^# y" d( \0 i* C: ?
{    * I8 @5 V0 v; Q. _& q4 M
      uchar i,j=0,x=1;
' {4 \9 U+ y. q- ~: O) ^2 }             uchar Right_flag;
! Y: g( V/ E5 g  W6 O5 _+ v( n9 J      LcmClearTXT();
: z/ G, L, W/ d# s          PutStr(1,1,"请输入密码:");        
; O+ V! s: ^. p" E- g           for(i=0;i<6;i++)mima=0;                                                                        
; ~7 r7 ~% W$ L, S/ E6 r           Key=Keycan();
- ]1 S& c) U7 x: R      while(Key!=queren)
* ?) e. U- ~/ @% I9 H2 b& F; x           {5 g+ f1 d3 _$ l
             Key=Keycan();
5 x  m' z& P2 f9 f# u* X             KeyDeal(Key);
# K  R6 ]: M' Z$ j6 K! P! @3 n             delay(30);                                                              8 F+ P3 y9 k/ r9 Q- R
             if(Key==0)K=10;
! g9 `2 y' j8 w8 S             if((K>=0)&&(K<=9))+ ~0 q; M# b. R4 Z4 y9 e) H0 @
             {
! f5 q& {3 |3 r! q              mima[j]=K;1 I% v* P: C) L& `9 }9 X# `: L
0 G/ c% _$ }) I( O
                  if(j<6)
9 Q% o0 ?1 @1 d- K+ s# d                  {        
% i; N8 }  Q8 f, s                   WriteCommand(0x89+j);                //指定第三行显示位置
* U: |3 t) N4 g2 U( F               WriteData(0x0f);        
; H+ H( w3 u8 A" u+ ]5 T" i" @1 K2 w' G. W! ~! U- U
                  }# U& O$ E% L0 x# _& y9 }+ \4 V
              ++j;
5 v! k1 ~, t" r# r  C4 |                  if(j==7)* U: |" O+ Y' K& H2 I
              j=6;                                                                                                  
1 m0 ]& p, _0 d0 v  d             }   //显示LCD12864并行显示
. b- x# q! w6 |  }7 L                 if(K==34)                //按了删除键" S7 q( S( S) I/ R7 x) a3 z( j9 X4 R5 k
                  {
! s0 @/ Z' F* l0 v5 c3 H. H                    if(j==0)
, m) U7 V+ H7 [+ J; b5 g# `# Y                        {' ^, Y$ ~' [* {+ x" h# ~$ R$ E( @( B6 G
                      WriteCommand(0x89);                //指定第三行显示位置
* M1 X& H+ [; ]6 B                  WriteData(0x20);: ?9 B) q! C# V3 Z9 }* v$ D
                        }
" Y* n  X* b( K( |3 s" a                        else
3 C+ h5 b/ [/ S                        {
5 H! J3 V) a" K; Q                          --j;7 h% `% y+ j) A' g0 n3 d0 h
                      WriteCommand(0x89+j);            //指定第三行显示位置6 g. T/ C) w& k! ?5 R' T6 J
                  WriteData(0x20);
$ D3 e' b1 r: m4 v9 j% A                        }
/ e( d0 W+ o3 I" N7 W( P                  }
3 C' r/ m( V" K7 |1 j* t; w  S/ P1 O           }
( O# k# f& D+ ^* R* s    LcmClearTXT();
: H! h: R- m( O' E! S0 b( s" Y
6 }; G. E6 Y% b+ ?/ U
# m, v0 g4 h% @( A# c/ M          for(i=0;i<6;i++)7 R+ u! \1 G( s  {& U
         {
' B3 ~" z8 a7 o9 d+ U            UserPassword=mima+0x30;7 Q1 `/ f( }  v. w+ P
# i3 t6 g0 ?+ g
          }
* b& F& P. E7 [4 f3 x  @         if(j==6)
* O2 V9 \; G! o9 `          {: z7 d" Y$ M0 j, w1 M8 ~1 t
           if(mima[0]==1&&mima[1]==3&&mima[2]==1&&mima[3]==4&&mima[4]==2&&mima[5]==0)( Y6 M- ^0 L9 @; D% Z
            Right_flag=1;
: J* E% G1 G' P0 R                else
$ h$ V- p/ s1 u& z- @                Right_flag=0;
, x9 Y# B, M0 T8 P+ ~/ w                      }- [3 C- X; }# P: }
          if (Right_flag==1)
$ p( L9 a+ E3 Y# R2 U         {* |- w* N* _; C9 |4 ?
                     Right_flag=0;
0 Y3 ?- Q+ A2 E7 o: r" @2 J7 m- ^$ K1 f" k2 {) B  z, H" v0 l+ v% h% A# h) V
                   for(i=0;i<6;i++)mima=0;7 n" R" D; g' B, _! S3 Y6 T6 r
                PutStr(0,0,"按键1 : 增加指纹");
! S' M- _. I% U0 m( p+ s+ ^                PutStr(1,0,"按键2 : 删去指纹");
* b% N2 d- U8 h& B6 e1 g' z                PutStr(2,0,"按键3 : 手动开锁");5 v3 C- a/ D6 ]8 j; M
                PutStr(3,0,"按键4 : 修改密码");$ K: I4 Y7 N% W8 x& G
     while(i!=tuichu)
* A" p1 ?9 Q" j9 Y      {         & Z4 O; h' Q$ o$ P' l6 b6 R0 `; P
                 i=Keycan();& v9 M0 d+ x5 o! D. P" j, G2 _3 O
' x& q# c& B$ [9 j
                KeyDeal(i);  
, h$ w% K. r5 d0 d5 e' |            switch(K)% e) ]* ]2 B! `  U9 w+ ~8 x- R: d
            {7 q0 o5 J6 B2 `9 @. @3 X+ T
             case 1:    addfinger();K=6; break;
# B0 L0 Y6 V+ ^! M# Z$ V3 c& K$ n! ]             case 2:    deletfinger();    break;9 e3 A, W. c5 K3 I$ d1 Z, k
                 case 3:         zhu();        K=8;  break;
6 x4 e0 @2 X/ Q; f/ E% r                 case 4:    gaimima();        break;
1 L8 Q/ b. d+ g+ a             default: break;( k& z1 E/ M. h! O0 X
            }4 c+ G* u4 F- O% J
      }$ H5 I% B: F) Z
     }
7 C7 r2 |/ y- ~( @; b    else0 e0 D% n2 K1 Q
    {
, R, O" q% f# B5 w8 j# K( x0 b( ^+ W$ Z( ?3 l
                PutStr(1,2,"密码错误");& o7 ?# |/ P4 ?3 z2 \
                PutStr(2,0,"  请重新操作!");
- b: S% w' W0 T" a# j/ |2 w# H                PutStr(3,0,"  按任意键继续"); + j. b* }3 M! a+ l  I. ?
             while(Keycan()==0);/ d: F% k' j9 r. B8 _
                PutStr(0,0,"按键1 : 增加指纹"); ( B# K7 g) M/ t
                PutStr(1,0,"按键2 : 删去指纹");
$ j8 S2 z4 d- ~) M' o                PutStr(2,0,"按键3 : 手动开锁");
. s  c( e8 F5 s7 h9 g                PutStr(3,0,"按键4 : 修改密码");/ w( M5 {( A4 N, S/ m0 R
    }8 ^' u% J; M# A
  Key=0;$ w' \  |' _3 {4 F/ y: i

1 K1 @+ y: k/ J( S}
) n! t! G# E% O/ @0 |void mimakaisuo()
- T' }: y- }& f5 i  x2 b{
. u' _3 q; y5 k% M( H6 U; _* p, S. H uchar i,j=0,x=1;
# |/ N3 V2 X' U             uchar Right_flag;
% o0 k% b! e% J" h. k$ ?      LcmClearTXT();4 l, r  J* D; i7 p7 ]' T
          PutStr(1,0,"请输入密码开锁:");        
6 ]$ L5 Q+ l# ~9 c+ W9 N           for(i=0;i<6;i++)mima=0;                                                                        
  T8 ~& m+ @. F" z9 K9 |8 B           Key=Keycan();5 P1 E3 P) E# I/ f, l
      while(Key!=queren)
5 ^; o/ x, F) `3 E           {
% O1 d0 B. l( G9 s; ]9 I9 `6 ]; Z$ H9 ~             Key=Keycan();
5 e; L- @! s. k! p             KeyDeal(Key);
1 W" F7 e# ^" N% a5 e             delay(30);                                                              
8 p3 U4 H* t4 L; E& L+ F: A4 W# W             if(Key==0)K=10;5 ~4 e% [/ }; d6 o+ D
             if((K>=0)&&(K<=9))
, d/ [3 P0 @8 h  f  L3 y: W) \             {" W! a! k6 B4 c/ V5 F- d$ W+ P
              mima[j]=K;3 F/ y) j- }  t9 H' @# U8 U  t
4 J- d% ^; Y' i; S
                  if(j<6)  X1 E! f3 f$ K" f) R  g
                  {        * G4 @2 U: }  E" h
                   WriteCommand(0x89+j);                //指定第三行显示位置! R. F  e3 q: o
               WriteData(0x0f);        ) }! h% l1 E( ^. r

3 L9 r& j0 L; j7 O2 S: L0 m3 i                  }" K: g2 C% _; Q5 r( p
              ++j;. F+ s8 q1 i5 s3 H
                  if(j==7)( w* }: p: V+ j$ O* e- o$ Z
              j=6;                                                                                                  
0 h6 X0 g$ S( Y' X% C! p             }   //显示LCD12864并行显示 7 m8 D2 a0 c6 i8 e5 Q
                 if(K==34)                //按了删除键3 H) ~- m  o' x9 Y5 N8 O
                  {
  ]6 [8 r; o- g4 t# V: }6 f$ F' s$ D                    if(j==0)! J1 [+ ~8 t- R$ i# e6 Q
                        {
4 r2 a5 \: e/ Q% U2 Z                      WriteCommand(0x89);                //指定第三行显示位置) U$ ]8 d+ y: N% t  s
                  WriteData(0x20);
0 i6 \0 n( ^  D3 `  b0 ]9 i% A                        }4 k5 B2 q2 w( W9 k! m# `' p) w6 k
                        else
, K2 ~5 t. D" |5 ?: _6 N                        {
) j7 N: z$ B- u                          --j;
8 u8 V  z. z2 [- `$ A                      WriteCommand(0x89+j);            //指定第三行显示位置
& Y& e) E2 ~. T6 h                  WriteData(0x20);& k' l' G4 P9 \4 R
                        }& P/ H; }; o; S7 U/ \/ `
                  }
: D! e5 u1 C& g( `5 a6 h           }
5 x+ R9 p% a- h) f4 _7 X- A) _: B    LcmClearTXT();. ?& j; s: L' F9 o2 U0 v
8 }' g/ E; J7 p" G; u) G$ |  P

( E: D0 `  A6 n. Z- K          for(i=0;i<6;i++)/ }0 o9 b/ [  V4 C; z
         {
9 \9 I# V& p1 Y7 m- i6 P/ A; I7 v* y            UserPassword=mima+0x30;2 o5 y1 O. _) `

- m8 O9 ~( ?2 N! U) i          }
7 F* j5 a7 ~& T( _         if(j==6){Right_flag=PassWord_Chack(); }; x2 k0 K8 U7 Y5 c$ N
          if (Right_flag==1&&ErrorCount<3)/ v3 n: ~; R, W9 J' C  V8 ~0 M$ \
         {
8 l  A! Q* ~3 Q              Right_flag=0;9 q8 D5 U& c/ c- t; F% v
                   zhu();ErrorCount=0;    `* O; {2 ^( Y2 T- C, T
                 Feng=1;& A4 A8 m- q2 D5 i+ F
                  for(i=0;i<6;i++)mima=0;/ @* X  y/ s" {$ i" n, X
     }
  J8 a% l. G* j( Q- Z    else  `  q1 J8 |* w  G
    {0 \; U+ Z* A, ~. T
            if(ErrorCount<3)* }: R" D5 f4 a) P
                ErrorCount++;
& ?5 y5 Y/ t' Q4 N1 v                 if(ErrorCount==3)
& p5 a, n" w& k; H; ?8 Q                Feng=0;, d; `4 B) G7 ]
8 k; B. k/ `- [; p! l, I
                PutStr(1,2,"密码错误");- }  o# w5 s4 i+ v/ S
                PutStr(2,0,"  还有  次机会"); : I$ s: E/ U! E! f0 V+ U
                PutStr(3,0,"  按任意键继续");) f. Z! _8 D0 H. K
                WriteCommand(0x8a);
: L7 Q- E8 `0 Q, W8 e: n                WriteData(' ');) @# L% Y1 Z& d; t& B4 ]' R1 F2 C. F
                WriteData(3-ErrorCount+0x30);
. W8 H/ X$ Y9 m0 C+ Y
6 f% j' I0 d, @* @: d                delay(1000);
( c" g# W1 `$ h9 w- X" X& _
: H' M  T  F7 b6 [8 C  Z- X" f    }; Z" Q. O( ?7 ~: w8 B
  Key=0;
/ Y+ F9 e7 J5 h: L$ J# l! i  LcmClearTXT();
5 W& U- Q4 z5 q) F* D# d( D}
2 W: ]  o4 G/ O# j: b+ X; I  uvoid fan()
" l. U3 i' A1 l7 a{
8 ~7 H: Y9 g7 B- g( D; c: K) [5 V/ L& Y  o//        PutStr(1,2,"请先按键");
  l) X9 }5 M; k4 ?( q2 B) P4 `% G1 i. O//        PutStr(2,2,"再刷指纹");
0 U, y- O, S* k5 l  if(Key!=0x81)                        //管理员操作
! B% g# z. o+ ^; a. B7 A9 r$ w  {5 o6 j, d( Q. Y
        PutStr(0,2,"欢迎使用");2 g2 A8 n2 `. s! b; j  g6 X: I
        PutStr(1,0,"指纹密码门禁系统");; M- S0 u# J  Z: A; G6 w: o
        PutStr(2,0,"密码开锁请按 C键");
/ n. y2 v0 x$ m$ f$ d5 z! @# g, j        PutStr(3,1,"请按手指开锁");2 |1 X$ ]2 R$ T) n0 Z5 Q; B
   }3 E5 V3 M' ]; r% I# ]
  Key=Keycan();
; `: O, Y( J2 |$ u% Vif(k2==1)                //指纹刷机
& w2 T' d# S' j& C( j7 Q! g  {- {5 K; q/ Z, [; \! m) `# ?
          LcmClearTXT();
5 j4 A) F. L# d, t% X         shuazhiwen();
5 p, \" M: g0 d+ g         LcmClearTXT();
+ m# ^7 ^+ f4 Z% j+ \$ F) o# _' |  }% J$ D- [2 x1 l4 P7 Y, i. x
  if(Key==0x81)                        //管理员操作1 k0 D9 y! J' |  q" P6 P
  {0 j- k7 o' w0 x! ?! n+ _3 C
        LcmClearTXT();
( }0 o8 |) D. g5 U( r        guanliyuan();$ O$ o$ }% y- c7 T7 f) k4 k3 U
    LcmClearTXT();* ]. R  k+ G( t( C0 Q9 b
  }6 D& v1 W8 v2 T' E1 [
  if(Key==0x84&&ErrorCount<3)                        //密码开锁
9 O1 _2 R% U0 `2 k  {
9 ^! R2 M7 B1 s; P5 K        LcmClearTXT();
! c0 W% \" K3 |5 u* f' c) i        mimakaisuo();& i0 m  j' u2 Z4 c# k, B: W; t
    LcmClearTXT();
+ s9 U' j( n/ O& p2 ]  }
0 c6 A1 G7 l  d! ~
3 g, ]. h) F9 c1 G}        
0 Q5 D/ J4 v5 T1 w0 u% @+ n7 S# E0 x5 [; ^5 p2 {
void main()
. w! u' U/ C# y3 Z! ^2 B3 `0 q: L{         " h' F  o& Z2 ^2 t5 ]) N! t

) d+ L8 U* s% b8 b( h# w$ [//PSB=0;, X- q2 q$ I: u  C- f( ~# B/ s
        UART_Init();           //串口初始化                  / E. j8 B8 r6 T6 U+ v; H+ k
          x24c02_init();     //24C02初始化
$ v7 g0 ~* @% \6 f  u# `        LcmInit();               //LCD12864初始化                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
4 E+ k0 U! y4 J( r$ f        LcmClearTXT();           //LCD12864清屏          j' D, B+ A) a- l6 r
        while(1) , {/ _/ j6 z7 A6 n  t& B
                {
+ u' b  N5 n4 {1 P6 ^                        fan();
* L4 k4 S; p+ k* I' M8 t4 L+ c                        delay(100);                    {+ j$ f- H6 {3 }
                }        ) E& J+ Q  m  h2 Q
}4 v4 b& U+ U1 n2 x+ [% O

. g4 D* V9 y: s* q+ Y& @# O//外部中断解码程序_外部中断1
$ a7 J: `1 ~" L2 e  Gvoid intersvr1(void) interrupt 2
( p# m/ O" `5 ?. i6 B9 G{
$ @, r9 S* P: O& z TR0=1;( `6 A1 h& v4 A1 q& W, G8 _  E
Tc=TL0*256+TH0;//提取中断时间间隔时长, w: o0 r4 Y+ y, s- e
TH0=0;
+ x* T3 Y/ U5 l  j TL0=0;         //定时中断重新置零
& f! S! l, [3 _+ h4 Z; w# Q
' e6 w7 i9 Y0 Q9 E7 m. H if((Tc>Imin)&&(Tc<Imax))7 K0 f! v( S  U
{ + \( v" N! q/ t, ~' s
        m=0;3 l0 G! n" u8 N9 J1 Y' x
        f=1;
5 R6 K- O- W" H/ }5 l& g+ P' V        return;* [/ E* t; ]) E, {3 }
}       //找到启始码
. A* J" k  i7 O8 U2 O6 s if(f==1). m4 {, u. j1 N( m. m
{, ]4 E2 M4 ^* X$ h) P
        if(Tc>Inum1&&Tc<Inum3)
4 t0 P7 {% Y, _# Y. e( `    {# j# \2 |/ {& R: l; O2 q) O5 ]
           Im[m/8]=Im[m/8]>>1|0x80; m++; ! V# w. k/ f7 D! ^
    }3 x9 n+ N: e. R( f" b
    if(Tc>Inum2&&Tc<Inum1) $ u. }: ]2 a' x
    {
$ n, @. z- k( o# z4 S$ n, k      Im[m/8]=Im[m/8]>>1; m++; //取码1 s$ U+ v: Z; {9 T
           }
8 o4 E7 }4 \3 q/ e           if(m==32) & E8 q+ ^1 w2 F- l
    {/ N4 r+ _, y0 n& g
      m=0;  ' W& t" D! n7 m/ b
      f=0;
  }9 L: P/ x5 H7 _5 s9 J      if(Im[2]==~Im[3]) ! j! \% H2 r2 ^9 A2 s2 e& [
      {
+ _' `) u, D* n, j6 Z           IrOK=1;- v- a# K* S$ j; x5 |+ l
                          TR0=0;
6 M( I2 h; R$ t/ |           }
! y4 r' g: V; S" H% ]      else IrOK=0;   //取码完成后判断读码是否正确) f! x! P9 f/ N. F6 K

0 K& y, P1 Y- d6 B# j+ X. v; v# a( c1 e5 i! \' g7 Y
…………限于本文篇幅 余下代码请从论坛下载附件…………9 v# g) h6 B0 R# a
游客,如果您要查看本帖隐藏内容请回复
# m0 w) p# K* ^( M9 q  f0 f
; v  G  v$ i9 n( ~# P1 S

该用户从未签到

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

该用户从未签到

3#
发表于 2020-4-5 09:15 | 只看该作者
9 a3 w& g6 p! U1 b# K  w2 `5 R
学习一下,感谢分享啊, 谢谢!

该用户从未签到

4#
发表于 2020-4-19 09:28 | 只看该作者
红外遥控指纹电子密码锁程序学习一下2 S2 V( F# ]. J
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-10 10:09 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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