找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7426|回复: 8
收起左侧

stm32智能锁AS608指纹识别程序 按键 APP开锁

  [复制链接]
ID:162561 发表于 2019-5-30 23:16 | 显示全部楼层 |阅读模式
stm32智能锁AS608指纹识别 按键 APP开锁

单片机源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "beep.h"
  4. #include "usart2.h"
  5. #include "key.h"
  6. #include "led.h"
  7. #include "stmflash.h"
  8. #include "string.h"
  9. #include "oled.h"
  10. #include "as608.h"
  11. #include "timer2.h"
  12. #include "usart.h"
  13. #include "bmp.h"
  14. #include "adc.h"
  15. #include "usart3.h"
  16. #include "timer3.h"
  17. #include "gizwits_product.h"

  18. u8 *in_pwd1=0;
  19. u8 *in_pwd2=0;
  20. u8 *in_pwd3=0;
  21. u8 *in_pwd4=0;
  22. u8 *in_pwd5=0;
  23. u8 *in_pwd6=0;
  24. u8 *in_pwd7=0;
  25. u8 *in_pwd8=0;
  26. u8 *str=0;        
  27. int fall_time=0;  
  28. int in_time=0;
  29. int mykey=0;//控制in_time每按一个按键只加一次的坎儿
  30. u8 root_pwd[8]="66666666";//管理员密码
  31. u8 open_pwd[8]="";//开锁密码
  32. #define SIZE_PWD sizeof(open_pwd)
  33. #define FLASH_SAVE_ADDR  0X08070000       

  34. #define usart2_baund  57600//串口2波特率,根据指纹模块波特率更改

  35. SysPara AS608Para;//指纹模块AS608参数
  36. u16 ValidN;//模块内有效指纹个数

  37. void root_h(void);//管理员函数

  38. void Add_FR(void);        //录指纹
  39. void Del_FR(void);        //删除指纹
  40. void press_FR(void);//刷指纹
  41. u16 GET_NUM(void);//获取数值
  42. void AS608_Details(void);//获取模块详情

  43. extern u8  find_string_flag;
  44. extern u8  receive_mode;
  45. //协议初始化
  46. void Gizwits_Init(void)
  47. {
  48.        
  49.         TIM3_Int_Init(9,7199);//1MS系统定时
  50.     usart3_init(9600);//WIFI初始化
  51.         userInit();//设备状态结构体初始化
  52.         gizwitsInit();//缓冲区初始化
  53. }

  54. int main(void)
  55. {   
  56.         u8 key_num=0;       
  57.     u8 *str=0;
  58.     int  ret;
  59.     u16 adcx;
  60.    
  61.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
  62.         delay_init();          //初始化延时函数
  63.         usart2_init(usart2_baund);//初始化串口2,用于与指纹模块通讯
  64.     USART1_Init_Config(115200);  //串口1,用于与A6模块通信
  65.         Timer2_Init_Config();        //定时器2初始化,用于A6模块
  66.         PS_StaGPIO_Init();        //初始化FR读状态引脚
  67.         BEEP_Init();                          //初始化蜂鸣器                                 
  68.         KEY_Init();
  69.         OLED_Init();   
  70.     LED_Init();
  71.     Adc_Init();
  72.     Gizwits_Init();         //协议初始化
  73.         
  74.     receive_mode = 1;
  75.    
  76.         OLED_Clear();
  77.         //与AS608模块握手
  78.         do
  79.     {
  80.         Moto=1;
  81.         OLED_ShowString(0,0,"AS608 Ready",8);
  82.                 delay_ms(400);
  83.         OLED_Clear();
  84.                 OLED_ShowString(0,2,"try connection",8);
  85.                 OLED_ShowString(0,5,"wait...",8);
  86.         delay_ms(800);
  87.         OLED_Clear();
  88.                
  89.         }
  90.     while(PS_HandShake(&AS608Addr));
  91.    
  92.        
  93.         while(1)
  94.         {
  95.         STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)open_pwd,SIZE_PWD);
  96.                
  97.             OLED_ShowString(0,0,"Enter 8 password",16);
  98.         OLED_ShowString(0,2,"Fingerprint",16);      
  99.         OLED_ShowNum(0,5,adcx,4,12);//显示ADC的值
  100.         OLED_DrawBMP(88,3,128,8,BMP2);
  101.         
  102.         
  103. /***************************指纹解锁*************************************/
  104.         
  105.         if(PS_Sta)         //检测PS_Sta状态,如果有手指按下
  106.                 {
  107.                         press_FR();//刷指纹                       
  108.                 }
  109.         
  110. /***************************短信解锁*************************************/
  111.       /*  set_text_mode();//设置短信
  112.         CLR_Buf();        
  113.         if(find_string_flag == 1)
  114.                 {
  115.             
  116.                         delay_ms(200);//延时一点,让串口把数据接收完成
  117.                         if(Find("+CMTI"))//说明接收到了短信
  118.                         {
  119.                                 ret = read_message();
  120.                                 if(ret == 1)
  121.                                 {
  122.                                         if(Find("ledon"))
  123.                                         {
  124.                                                 CLR_Buf();
  125.                                                 find_string_flag = 0;
  126.                         delay_ms(200);
  127.                         
  128.                         OLED_Clear();//清除之前输入的密码
  129.                                             OLED_ShowString(30,0,"Welcome",8);         
  130.                                             OLED_ShowString(0,2,"open the door!",8);
  131.                         delay_ms(1000);
  132.                         OLED_Clear();
  133.                                         }
  134.                                         if(Find("ledoff"))
  135.                                         {                                               
  136.                                                 CLR_Buf();
  137.                                                 find_string_flag = 0;
  138.                         delay_ms(200);
  139.                         
  140.                         OLED_Clear();//清除之前输入的密码         
  141.                                             OLED_ShowString(0,2,"close the door!",8);
  142.                         delay_ms(1000);
  143.                         OLED_Clear();
  144.                                         }
  145.                                 }
  146.                         }
  147.         } */
  148. /***************************密码解锁**********************************/      
  149.                 key_num=keyscan();       
  150.         if(key_num)
  151.         {
  152.            switch(key_num)
  153.            {
  154.                 case 1:Del_FR();        key_num=0;break; //删指纹
  155.                 case 2:AS608_Details(); key_num=0;break; //详情
  156.                 case 3:Add_FR();        key_num=0;break; //录指纹
  157.                
  158.                 case 13:gizwitsSetMode(WIFI_AIRLINK_MODE);//Air-link模式接入
  159.                         LED0 = 0;
  160.                         delay_ms(1000);
  161.                         LED0 = 1;
  162.                         key_num=0;
  163.                         break;
  164.                
  165.                 case 16: ret = check_status();
  166.                          if(ret == 1)
  167.                          {
  168.                              ret = send_text_message("SOS!This is a message for help");
  169.                              delay_ms(1000);
  170.                              delay_ms(1000);                              
  171.                          };
  172.                          key_num=0;
  173.                          break;
  174.                         
  175.                                 default: break;       
  176.            }
  177.             
  178.         }
  179.                 if(key_num>0)
  180.                 {       
  181.                         
  182.             switch(key_num)
  183.                         {  
  184.                                 case 14:str="0";break;                          
  185.                                 case 4:str="1";break;            
  186.                                 case 5:str="2";break;            
  187.                                 case 6:str="3";break;                 
  188.                                 case 7:str="4";break;                  
  189.                                 case 8:str="5";break;          
  190.                                 case 9:str="6";break;                  
  191.                                 case 10:str="7";break;                  
  192.                                 case 11:str="8";break;                  
  193.                                 case 12:str="9";break;
  194.                 default: break;                        
  195.                         }
  196.                        
  197.                         if(mykey==0)
  198.                         {
  199.                                 in_time++;
  200.                                         switch(in_time)
  201.                                         {
  202.                                                 case 1:in_pwd1=str;OLED_ShowString(0,8,str,8);delay_ms(200);OLED_ShowString(0,8,"*",8);break;
  203.                                                 case 2:in_pwd2=str;OLED_ShowString(11,8,str,8);delay_ms(200);OLED_ShowString(11,8,"*",8);break;
  204.                                                 case 3:in_pwd3=str;OLED_ShowString(23,8,str,8);delay_ms(200);OLED_ShowString(23,8,"*",8);break;
  205.                                                 case 4:in_pwd4=str;OLED_ShowString(35,8,str,8);delay_ms(200);OLED_ShowString(35,8,"*",8);break;
  206.                                                 case 5:in_pwd5=str;OLED_ShowString(47,8,str,8);delay_ms(200);OLED_ShowString(47,8,"*",8);break;
  207.                                                 case 6:in_pwd6=str;OLED_ShowString(59,8,str,8);delay_ms(200);OLED_ShowString(59,8,"*",8);break;
  208.                                                 case 7:in_pwd7=str;OLED_ShowString(71,8,str,8);delay_ms(200);OLED_ShowString(71,8,"*",8);break;
  209.                                                 case 8:in_pwd8=str;OLED_ShowString(83,8,str,8);delay_ms(200);OLED_ShowString(83,8,"*",8);break;

  210.                                         }                                                               
  211.                                 mykey=1;//设置为1防止再次进入
  212.                         }
  213.                        
  214.                         if(in_time==8)
  215.                         {
  216.                                 if( //普通用户配对成功
  217.                                         *in_pwd3==open_pwd[2]&&
  218.                                     *in_pwd4==open_pwd[3]&&
  219.                                     *in_pwd5==open_pwd[4]&&
  220.                                 *in_pwd6==open_pwd[5])
  221.                                 {
  222.                                         fall_time=0;
  223.                                         OLED_Clear();//清除之前输入的密码
  224.                     delay_ms(200);
  225.                                         OLED_ShowString(30,0,"Welcome",8);         
  226.                                         OLED_ShowString(0,2,"open the door!",8);
  227.                     Moto=0;
  228.                     delay_ms(1000);
  229.                     Moto=1;
  230.                     delay_ms(1000);
  231.                     OLED_Clear();
  232.                                 }
  233.                                 else if( *in_pwd1==root_pwd[0]&&//管理员用户配对成功
  234.                                                  *in_pwd2==root_pwd[1]&&
  235.                                                  *in_pwd3==root_pwd[2]&&
  236.                                                  *in_pwd4==root_pwd[3]&&
  237.                                                  *in_pwd5==root_pwd[4]&&
  238.                                                  *in_pwd6==root_pwd[5]&&
  239.                                                  *in_pwd7==root_pwd[6]&&
  240.                                                  *in_pwd8==root_pwd[7])
  241.                                 {
  242.                                          root_h();                     
  243.                                 }
  244.                                 else//配对失败
  245.                                 {
  246.                                         OLED_Clear();//清除之前输入的密码
  247.                     delay_ms(200);
  248.                                         OLED_ShowString(0,0,"*Wrong Password*",8);
  249.                     OLED_ShowString(0,3,"please try again",8);
  250.                                         fall_time++;
  251.                                         LED0=!LED0;//红灯闪烁提示
  252.                                         delay_ms(300);
  253.                                         LED0=!LED0;
  254.                                         delay_ms(300);
  255.                                         LED0=!LED0;
  256.                                         delay_ms(300);
  257.                                         LED0=!LED0;
  258.                                         LED0=1;
  259.                     OLED_Clear();
  260.                     
  261.                                 }
  262.                                 in_time=0;
  263.                         }
  264.                     if(fall_time==5)
  265.                     {
  266.                 ret = check_status();
  267.                 if(ret == 1)
  268.                 {
  269.                     ret = send_text_message("You have entered 5 error passwords");
  270.                     delay_ms(1000);  
  271.                     delay_ms(1000);                    
  272.                 }
  273.                         
  274.                             fall_time=0;
  275.                             OLED_Clear();//清除准备显示锁定       
  276.                             fall_for_10s();
  277.                             LED0=1;
  278.                             OLED_Clear();//清除Has been locked please wait        
  279.                     }
  280.                 }else{ delay_ms(10); mykey=0;}
  281.         
  282. /***************************紧急情况**********************************/        
  283.          adcx=Get_Adc_Average(ADC_Channel_9,10);
  284.          if(adcx>1500)
  285.          {
  286.               OLED_Clear();
  287.               delay_ms(200);         
  288.                           OLED_ShowString(0,0,"Warning",8);
  289.              ret = check_status();
  290.              if(ret == 1)
  291.              {
  292.                 ret = send_text_message("Harmful gas is high, please pay attention to ventilation");
  293.                 delay_ms(1000);
  294.                 delay_ms(1000);                              
  295.              };
  296.               OLED_Clear();   
  297.          }            
  298.       userHandle();//用户采集
  299.       gizwitsHandle((dataPoint_t *)¤tDataPoint);//协议处理
  300.         
  301.                         
  302.         }        
  303. }
  304. /***************************** 主函数结束 ***********************************************/





  305. /******************************获取数值*************************************/
  306. u16 GET_NUM(void)
  307. {
  308.         u8  key_num=0;
  309.         u16 num=0;
  310.         while(1)
  311.         {
  312.                 key_num=keyscan();       
  313.                 if(key_num)
  314.                 {
  315.                         if(key_num==1)return 0xFFFF;//‘返回’键
  316.                         if(key_num==3)return 0xFF00;//               
  317.                         if(key_num>3&&key_num<13&&num<99)//‘1-9’键(限制输入3位数)
  318.                                 num =num*10+key_num-3;               
  319.                         if(key_num==13)num =num/10;//‘Del’键                       
  320.                         if(key_num==14&&num<99)num =num*10;//‘0’键
  321.                         if(key_num==15)return num;  //‘Enter’键
  322.                 }
  323.         }       
  324. }
  325. /****************************************************************************/


  326. /******************************管理员**************************************/
  327. void root_h(void)//管理员用户函数
  328. {

  329.         u8 key_num;
  330.         in_time=0;
  331.         mykey=0;
  332.         in_pwd1="0";
  333.         in_pwd2="0";
  334.         in_pwd3="0";
  335.         in_pwd4="0";
  336.         in_pwd5="0";
  337.         in_pwd6="0";
  338.         in_pwd7="0";
  339.         in_pwd8="0";
  340.     Moto=0;
  341.     delay_ms(1000);
  342.     Moto=1;
  343.        
  344.        

  345.         OLED_Clear();//                清除普通用户界面提示
  346.         OLED_ShowString(30,0,"ROOT MODE",8);       
  347.         OLED_ShowString(0,2,"* you can change",8);
  348.         OLED_ShowString(0,4,"* password here",8);   
  349.         while(key_num!=82)
  350.         {
  351.                 key_num=keyscan();      
  352.                 if(key_num)
  353.                 {                  
  354.                         switch(key_num)
  355.                         {
  356.                                 case 14:str="0";break;                          
  357.                                 case 4:str="1";break;            
  358.                                 case 5:str="2";break;            
  359.                                 case 6:str="3";break;                 
  360.                                 case 7:str="4";break;                  
  361.                                 case 8:str="5";break;          
  362.                                 case 9:str="6";break;                  
  363.                                 case 10:str="7";break;                  
  364.                                 case 11:str="8";break;                  
  365.                                 case 12:str="9";break;
  366.                                 default: break;                 
  367.                         }
  368.                         if(mykey==0)
  369.                         {
  370.                                 in_time++;                               
  371.                                         switch(in_time)
  372.                                         {
  373.                                                 case 1:in_pwd1=str;OLED_ShowString(0,6,str,8);delay_ms(200);OLED_ShowString(0,6,"*",8);break;
  374.                                                 case 2:in_pwd2=str;OLED_ShowString(11,6,str,8);delay_ms(200);OLED_ShowString(11,6,"*",8);break;
  375.                                                 case 3:in_pwd3=str;OLED_ShowString(23,6,str,8);delay_ms(200);OLED_ShowString(23,6,"*",8);break;
  376.                                                 case 4:in_pwd4=str;OLED_ShowString(35,6,str,8);delay_ms(200);OLED_ShowString(35,6,"*",8);break;
  377.                                                 case 5:in_pwd5=str;OLED_ShowString(47,6,str,8);delay_ms(200);OLED_ShowString(47,6,"*",8);break;
  378.                                                 case 6:in_pwd6=str;OLED_ShowString(59,6,str,8);delay_ms(200);OLED_ShowString(59,6,"*",8);break;
  379.                                                 case 7:in_pwd7=str;OLED_ShowString(71,8,str,8);delay_ms(200);OLED_ShowString(71,8,"*",8);break;
  380.                                                 case 8:in_pwd8=str;OLED_ShowString(83,8,str,8);delay_ms(200);OLED_ShowString(83,8,"*",8);break;
  381.                                         }
  382.                                
  383.                                
  384.                                 if(in_pwd1=="6"&&in_pwd2=="6"&&in_pwd3=="6"&&in_pwd4=="6"&&in_pwd5=="6"&&in_pwd6=="6"&&in_pwd7=="6"&&in_pwd8=="6")
  385.                                 {
  386.                                         OLED_Clear();//清除输入新密码提示以及新密码
  387.                                         OLED_ShowString(0,0,"Coudle not set",8);
  388.                     OLED_ShowString(0,4,"REC:12345678",8);
  389.                                         open_pwd[0]=*"1";
  390.                                         open_pwd[1]=*"2";
  391.                                         open_pwd[2]=*"3";
  392.                                         open_pwd[3]=*"4";
  393.                                         open_pwd[4]=*"5";
  394.                                         open_pwd[5]=*"6";
  395.                                         open_pwd[6]=*"7";
  396.                                         open_pwd[7]=*"8";
  397.                     STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)open_pwd,SIZE_PWD);
  398.                     delay_ms(500);
  399.                                         delay_ms(1000);
  400.                                 }
  401.                 else
  402.                 {
  403.                     open_pwd[0]=*in_pwd1;
  404.                     open_pwd[1]=*in_pwd2;
  405.                     open_pwd[2]=*in_pwd3;
  406.                     open_pwd[3]=*in_pwd4;
  407.                     open_pwd[4]=*in_pwd5;
  408.                     open_pwd[5]=*in_pwd6;
  409.                                         open_pwd[6]=*in_pwd7;
  410.                                         open_pwd[7]=*in_pwd8;
  411.                                         STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)open_pwd,SIZE_PWD);
  412.                     delay_ms(500);
  413.                                         delay_ms(1000);
  414.                 }
  415.                                
  416.                                 mykey=1;//设置为1防止再次进入
  417.                         }
  418.                        
  419.                         if(in_time==8)
  420.                         {
  421.                                 in_time=0;
  422.                                 OLED_Clear();//清除输入新密码提示以及新密码
  423.                                 OLED_ShowString(10,3,"RESET COMPLETE",8);
  424.                                 delay_ms(700);
  425.                 OLED_Clear();
  426.                                 key_num=82;
  427.                         }
  428.                                

  429.                 }
  430.                 else
  431.                 {
  432.                         delay_ms(10);          
  433.                         mykey=0;//放手时,归零以便下次重新计数
  434.                 }
  435.         }         
  436. }
  437. /****************************************************************************/


  438. /***************************AS608详情************************************/
  439. void AS608_Details(void)
  440. {
  441.     u8 ensure;
  442.     ensure=PS_ReadSysPara(&AS608Para);  //读参数
  443.     if(ensure==0x00)
  444.     {
  445.         ensure=PS_ValidTempleteNum(&ValidN);//读库指纹个数
  446.             if(ensure==0x00)
  447.             {                    
  448.             OLED_Clear();//清除输入新密码提示以及新密码
  449.                         OLED_ShowString(25,0,"AS608_Details",8);
  450.             
  451.             OLED_ShowString(0,2,"*Remainder:",8);            
  452.             OLED_ShowString(0,4,"*Level:",8);
  453.             OLED_ShowNum(90,2,AS608Para.PS_max-ValidN,3,12);
  454.             OLED_ShowNum(90,4,AS608Para.PS_level,3,12);
  455.             delay_ms(1000);
  456.             delay_ms(1000);
  457.             OLED_Clear();
  458.             }
  459.     }
  460. }


  461. /****************************************************************************/


  462. /*******************************录指纹*************************************/
  463. void Add_FR(void)
  464. {
  465.         u8 i,ensure ,processnum=0;
  466.         u16 ID;
  467.     PS_ReadSysPara(&AS608Para);  //读参数
  468.         while(1)
  469.         {
  470.                 switch (processnum)
  471.                 {
  472.                         case 0:
  473.                                 i++;
  474.                                 OLED_Clear();
  475.                                 OLED_ShowString(0,2,"Press the finger",8);
  476.                                 ensure=PS_GetImage();
  477.                                 if(ensure==0x00)
  478.                                 {
  479.                                         BEEP=1;
  480.                                         ensure=PS_GenChar(CharBuffer1);//生成特征
  481.                                         BEEP=0;
  482.                                         if(ensure==0x00)
  483.                                         {
  484.                                                 OLED_Clear();
  485.                                         OLED_ShowString(0,2,"Normal",8);
  486.                                                 i=0;
  487.                                                 processnum=1;//跳到第二步                                               
  488.                                         }                               
  489.                                 }                                               
  490.                                 break;
  491.                        
  492.                         case 1:
  493.                                 i++;
  494.                                 OLED_Clear();
  495.                                 OLED_ShowString(0,2,"Confirm again",8);
  496.                                 ensure=PS_GetImage();
  497.                                 if(ensure==0x00)
  498.                                 {
  499.                                         BEEP=1;
  500.                                         ensure=PS_GenChar(CharBuffer2);//生成特征
  501.                                         BEEP=0;
  502.                                         if(ensure==0x00)
  503.                                         {
  504.                                                 OLED_Clear();
  505.                                         OLED_ShowString(0,2,"Normal",8);
  506.                                                 i=0;
  507.                                                 processnum=2;//跳到第三步
  508.                                         }       
  509.                                 }               
  510.                                 break;

  511.                         case 2:
  512.                                 OLED_Clear();
  513.                                 OLED_ShowString(0,2,"Compare...",8);
  514.                                 ensure=PS_Match();
  515.                                 if(ensure==0x00)
  516.                                 {
  517.                                         OLED_Clear();
  518.                                     OLED_ShowString(0,2,"OK",8);
  519.                                         processnum=3;//跳到第四步
  520.                                 }
  521.                                 else
  522.                                 {
  523.                                         OLED_Clear();
  524.                                     OLED_ShowString(0,2,"Fail",8);
  525.                                     OLED_ShowString(0,4,"try again",8);
  526.                                         i=0;
  527.                                         processnum=0;//跳回第一步               
  528.                                 }
  529.                                 delay_ms(1200);
  530.                                 break;

  531.                         case 3:
  532.                                 OLED_Clear();
  533.                                 OLED_ShowString(0,2,"Saving...",8);
  534.                                 ensure=PS_RegModel();
  535.                                 if(ensure==0x00)
  536.                                 {
  537.                                         OLED_Clear();
  538.                                     OLED_ShowString(0,2,"Save success",8);
  539.                                         processnum=4;//跳到第五步
  540.                                 }else {processnum=0;}
  541.                                 delay_ms(1200);
  542.                                 break;
  543.                                
  544.                         case 4:       
  545.                                 OLED_Clear();
  546.                                 OLED_ShowString(0,2,"Input ID",8);
  547.                                 OLED_ShowString(0,4,"0=< ID <=299",8);
  548.                 OLED_ShowString(0,6,"Your ID:",8);
  549.                                 do
  550.                 {                  
  551.                                         ID=GET_NUM();
  552.                     OLED_ShowNum(70,6,ID,3,12);
  553.                     delay_ms(1000);
  554.                  }
  555.                                 while(!(ID<AS608Para.PS_max));//输入ID必须小于指纹容量的最大值
  556.                                 ensure=PS_StoreChar(CharBuffer2,ID);//储存模板
  557.                                 if(ensure==0x00)
  558.                                 {                       
  559.                                         OLED_Clear();
  560.                                     OLED_ShowString(0,2,"Saved to flash",8);
  561.                     delay_ms(500);
  562.                                         delay_ms(1000);
  563.                     OLED_Clear();
  564.                                         return ;
  565.                                 }else {processnum=0;}                                       
  566.                                 break;                               
  567.                 }
  568.                 delay_ms(400);
  569.                 if(i==5)//超过5次没有按手指则退出
  570.                 {
  571.                         OLED_Clear();
  572.                         OLED_ShowString(0,2,"Out",8);
  573.             delay_ms(300);
  574.             OLED_Clear();
  575.                         break;       
  576.                 }                               
  577.         }
  578. }
  579. /****************************************************************************/


  580. /*******************************刷指纹*************************************/
  581. void press_FR(void)
  582. {
  583.         SearchResult seach;
  584.         u8 ensure;
  585.     PS_ReadSysPara(&AS608Para);  //读参数
  586.         ensure=PS_GetImage();
  587.         if(ensure==0x00)//获取图像成功
  588.         {       
  589.                 BEEP=1;//打开蜂鸣器       
  590.                 ensure=PS_GenChar(CharBuffer1);
  591.                 if(ensure==0x00) //生成特征成功
  592.                 {               
  593.                         BEEP=0;//关闭蜂鸣器       
  594.                         ensure=PS_HighSpeedSearch(CharBuffer1,0,AS608Para.PS_max,&seach);
  595.                         if(ensure==0x00)//搜索成功
  596.                         {                               
  597.                                 OLED_Clear();
  598.                             OLED_ShowString(30,0,"Welcome",8);         
  599.                             OLED_ShowString(0,2,"open the door!",8);
  600.                 OLED_ShowString(0,4,"ID:",8);
  601.                 OLED_ShowNum(20,4,seach.pageID,3,12);
  602.                 Moto=0;
  603.                 delay_ms(1000);
  604.                 Moto=1;
  605.                 delay_ms(1000);
  606.                 OLED_Clear();
  607.                 if(seach.pageID==99)
  608.                 {
  609.                   send_text_message("Open the door under special circumstances");
  610.                   delay_ms(1000);
  611.                   delay_ms(1000);  
  612.                  }
  613.                                 
  614.                         }
  615.                                                        
  616.           }
  617.                
  618.          BEEP=0;//关闭蜂鸣器
  619.          delay_ms(600);
  620.         }
  621.                
  622. }
  623. /****************************************************************************/


  624. /*******************************删除指纹*************************************/
  625. void Del_FR(void)
  626. {
  627.         u8  ensure;
  628.         u16 num;
  629.         OLED_Clear();
  630.     OLED_ShowString(30,0,"Delete FR",8);
  631.         OLED_ShowString(0,2,"Input ID",8);
  632.         OLED_ShowString(0,4,"0=< ID <=299",8);
  633.     OLED_ShowString(0,6,"Your ID:",8);
  634.         delay_ms(50);
  635.         num=GET_NUM();//获取返回的数值
  636.         if(num==0xFFFF)
  637.         goto MENU ; //返回主页面
  638.     else if(num==0xFF00)
  639.                 ensure=PS_Empty();//清空指纹库
  640.         else
  641.     {        
  642.         OLED_ShowNum(70,6,num,3,12);
  643.         delay_ms(1000);
  644.                 ensure=PS_DeletChar(num,1);//删除单个指纹
  645.     }        
  646.         if(ensure==0)
  647.         {
  648.                 OLED_Clear();
  649.             OLED_ShowString(0,2,"Delete success",8);               
  650.         }                       
  651.         delay_ms(1000);
  652.     OLED_Clear();
  653. MENU:
  654.         OLED_Clear();
  655.         OLED_ShowString(0,0,"Enter 6 password",16);
  656.     OLED_ShowString(0,2,"Fingerprint",16);
  657.     OLED_DrawBMP(88,3,128,8,BMP2);
  658. }
复制代码

所有资料51hei提供下载:
AS608指纹识别修改.7z (260.72 KB, 下载次数: 242)
回复

使用道具 举报

ID:137345 发表于 2019-6-2 09:21 | 显示全部楼层
学习了。。。
回复

使用道具 举报

ID:89710 发表于 2019-6-9 16:23 | 显示全部楼层
好好学习一下
回复

使用道具 举报

ID:89710 发表于 2019-6-9 16:24 | 显示全部楼层
好好学习一下 正好用到
回复

使用道具 举报

ID:326528 发表于 2019-9-5 18:14 | 显示全部楼层
受教了
回复

使用道具 举报

ID:511461 发表于 2019-10-12 19:18 | 显示全部楼层
楼主,太厉害了
回复

使用道具 举报

ID:511461 发表于 2019-10-12 19:19 | 显示全部楼层
能不能分享一下原理图
回复

使用道具 举报

ID:544005 发表于 2020-1-8 10:22 | 显示全部楼层
辛苦楼主了,学习下!
回复

使用道具 举报

ID:810461 发表于 2021-2-19 20:09 | 显示全部楼层
AS608与MCU怎么连线啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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