立即注册 登录
返回首页

uid:237440的个人空间

日志

城章R307指纹识别模块做指纹锁

已有 899 次阅读2017-10-6 11:08 |个人分类:c51单片机| c51指纹锁

#include < at89x51.h>
#define uchar unsigned char
#define uint unsigned int  
                                      
                                            
void rs232_init();                         
uchar key=0;     //接收计数器
 int i=0;
uchar data   table1[15];


 sbit K2=P2^1;
 sbit K1=P2^0;
 sbit led= P3^7;
 sbit p1=P0^0;
 sbit cumo=P1^4;  //触摸输入信号
 sbit fmp=P3^2;  //蜂鸣器控制脚低电平响


uchar  flag=0;  //触摸标志 0是有效  1为无效
uchar  zcid=0;   //指纹注册标志1为有效0无效

  void delay1ms(uint x)
{
  uchar  q=124;
  while(x--)
     while(q--);

}


void rs232_init()
{
         TMOD=0x20;
         TH1=0xfd;
         TL1=0xfd;
         TR1=1;
         SM0=0;
         SM1=1;
         REN=1;                                                        //先设定号工作方式,在打开允许接收
         EA=1;
         ES=1; 
 TI=0;
           RI=0;

for( i=0;i<15;i++) //初始化table1[]数组
{
table1[i]=0xFF;
    }



}

void ser()interrupt 4
{                 
                RI=0;
                table1[key++]=SBUF;                                //存数据到接收缓存
}



void  GR_Enroll()      // 自动注册模板 
{
     uchar sendbuffer[]={0xef,0x01,0xff,0xff,0xff,0x0ff,0x01,0x00,0x03,0x33,0x00,0x37};
uchar j=0;

  ES=0;  //禁止中断
    for(j=0;j<12;j++)
{
SBUF=sendbuffer[j];
      while(!TI);
      TI=0;  }
ES=1;  //允许中断

while(key<13); //等待发送到0-13即14位数据

 if(table1[9]==0x00) //判断命令数组10位返回0x00即指纹验证通过返回其它数就不通过
{
  fmp=0;  //蜂鸣器响
  delay1ms(200); 
  
   fmp=1;  //停止蜂鸣器响
delay1ms(500);
  
                  }
else

{
fmp=0;  //蜂鸣器响
  delay1ms(80); 
   fmp=1;  //停止蜂鸣器响  
 delay1ms(80);
fmp=0;  //蜂鸣器响
  delay1ms(80); 
   fmp=1;  //停止蜂鸣器响  

  }
for( i=0;i<13;i++) //接收完数据把数据置为0xFF
{
table1[i]=0xff;
    }    
key=0;  //接收完毕把数据个数标志清零
        zcid=0; //清空指纹注册标志

                   }   



void GR_Identity()    // 自动验证指纹
{   
uchar j=0;
  uchar sendbuffer[]={0xef,0x01,0xff,0xff,0xff,0x0ff,0x01,0x00,0x03,0x34,0x00,0x38}; //指纹验证数组命令
if(cumo==0 && flag==0)     //满足指纹感应有手指并且感应标志为0时候才执行指纹验证程序
  {           
ES=0;  //禁止中断
    for(j=0;j<12;j++)       //发送指纹验证数组命令
{
SBUF=sendbuffer[j];
      while(!TI);
      TI=0;   } 
                                        
            ES=1;  //允许中断

while(key<15) ; //等待发送到0-14个数据即15位数据接收完毕

 if(table1[9]==0x00) //判断命令数组10位返回0x00即指纹验证通过返回其它数就不通过
{

   if( table1[10]==0x00 &&  table1[11]==0x00) //如果指纹库里0个指纹那就启动注册新指纹函数
{
   
zcid=1;
fmp=0;  //蜂鸣器响
  delay1ms(200);   
   fmp=1;  //停止蜂鸣器响
          delay1ms(500); 
 }

 else

{ p1=0;  //验证通过p1指示灯亮 不通过即灭
  fmp=0;  //蜂鸣器响
  delay1ms(200); 
  
   fmp=1;  //停止蜂鸣器响
delay1ms(500);
    p1=1; //1秒时间到关闭
                             }   
  
  }
else

{ p1=1;
fmp=0;  //蜂鸣器响
  delay1ms(80); 
   fmp=1;  //停止蜂鸣器响  
 delay1ms(80);
fmp=0;  //蜂鸣器响
  delay1ms(80); 
   fmp=1;  //停止蜂鸣器响  

  }
for( i=0;i<15;i++) //接收完数据把数据置为0xFF
{
table1[i]=0xff;
    }    
flag=1;   //标志置1待重新拿出手指置0指纹验证才起效
 
  delay1ms(250);//延时等待
             
 }
 
key=0;  //接收完毕把数据个数标志清零    

}



void GR_Empty() // 全部清空指纹库函数
  {
     uchar sendbuffer[]={0xef,0x01,0xff,0xff,0xff,0x0ff,0x01,0x00,0x03,0x0D,0x00,0x11};
uchar j=0;

  ES=0;  //禁止中断
    for(j=0;j<12;j++)
{
SBUF=sendbuffer[j];
      while(!TI);
      TI=0;  }
ES=1;  //允许中断

while(key<11); //等待发送到0-11即12位数据

 if(table1[9]==0x00) //判断命令数组10位返回0x00即指纹验证通过返回其它数就不通过
{
  fmp=0;  //蜂鸣器响
  delay1ms(200); 
  
   fmp=1;  //停止蜂鸣器响
delay1ms(500);
  
                  }
else

{
fmp=0;  //蜂鸣器响
  delay1ms(80); 
   fmp=1;  //停止蜂鸣器响  
 delay1ms(80);
fmp=0;  //蜂鸣器响
  delay1ms(80); 
   fmp=1;  //停止蜂鸣器响  

  }
for( i=0;i<11;i++) //接收完数据把数据置为0xFF
{
table1[i]=0xff;
    }    
   key=0;  //接收完毕把数据个数标志清零


    }





















main()
{
   
led=0;
P0 = 0xFF; 
fmp=1;
zcid=0;
delay1ms(550);  //开机等待模块延时函数
rs232_init();  //初始化函数
delay1ms(1000);//开机等待模块延时函数

         while(1)
         {
key=0;  //接收完毕把数据个数标志清零

      if(cumo==1)  flag=0;   //待放开手指后标志重新置0

GR_Identity();    // 自动验证指纹


 

if(K1==0 || zcid==1 ) //按下按键k1
               {
         delay1ms(20); //防抖动延时
if(K1==1 ||zcid==1)     //松开k1按键
  {                
GR_Enroll();      // 自动注册模板 
}                        }




if(K2==0) //按下按键k2
               {
         delay1ms(20); //防抖动延时
if(K2==1)     //松开k1按键
  {              
            GR_Empty();   // 全部清空指纹库函数
}                       }

}
 }

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部