找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3262|回复: 5
打印 上一主题 下一主题
收起左侧

城章R307模块做指纹锁C51的无聊时候写的希望对大家有用

[复制链接]
跳转到指定楼层
楼主
ID:237440 发表于 2017-10-28 19:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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();           //        全部清空指纹库函数
        }                       }
               

                 }
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:357940 发表于 2018-6-24 18:22 来自手机 | 只看该作者
来学习一下
回复

使用道具 举报

板凳
ID:357940 发表于 2018-6-25 12:45 来自手机 | 只看该作者
楼主可以发一下这个代码的  仿真电路吗
回复

使用道具 举报

地板
ID:356526 发表于 2018-6-25 20:10 来自手机 | 只看该作者
太强了,有protues仿真吗
回复

使用道具 举报

5#
ID:71421 发表于 2019-3-14 08:44 | 只看该作者
感谢分享!!!!
回复

使用道具 举报

6#
ID:793134 发表于 2020-7-13 08:35 来自手机 | 只看该作者
楼主,这个代码完整不
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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