⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testzhi.c

📁 针对杭州中正公司的SM-62光学指纹识别模块在Atmega128芯片板上移植后的测试程序
💻 C
📖 第 1 页 / 共 2 页
字号:
    TransmitByte(p1) ;
    TransmitByte(p2) ;
    TransmitByte(p3) ;
    TransmitByte(p4) ;
    TransmitByte(p5) ;
    sum = 0x06 + cmd + p1 + p2 + p3 + p4 + p5 ;
    sum_h = sum>>8 ;
    sum_l = sum&0xff ;
    TransmitByte(sum_h) ;
    TransmitByte(sum_l) ;
    TransmitByte(0xC0) ;
}
/*********************************** login_succeed **********************************/
void login_succeed()
{
    led_flash() ;
}
/*********************************** login_failed **********************************/
void login_failed()
{
   u8 ack =0 ;
   ack = ack ;
   command_bag_length_3(0x16,0x30,0x06) ;  //green_&_red_led_flash_three_times_simultaneously,300ms
   ack = ack_bag_length_1() ;
}
/*********************************** ok **********************************/
void ok()
{
   u8 ack = 0 ;
   ack = ack ;
   lcd_upside_initialization() ;
   data_clear() ;
   display_line_5() ; //display Right!
   command_bag_length_3(0x16,0x30,0x06) ;  //green_&_red_led_flash_three_times_simultaneously,300ms
   ack = ack_bag_length_1() ;

}
/*********************************** error**********************************/
void error()
{
   u8 ack = 0 ;
   ack = ack ;
   lcd_upside_initialization() ;
   data_clear() ;
   display_line_6() ; //display Wrong!
   command_bag_length_3(0x16,0x04,0x06) ;  //red_led_flash_four_times_successively,300ms
   ack = ack_bag_length_1() ;

}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////


/************************************ login_mode **********************************
将指纹模版文件存到templet_num号flash数据库模版;templet_num range from 0 to 1775
*********************************** login_mode ***********************************/
void login_mode(u16 templet_num)
{
    u8 ack , templet_num_l , templet_num_h ;
    templet_num_l = templet_num & 0x00ff ;  //page_id initial value is 0
    templet_num_h = templet_num >> 4 ;
    do
    {
        command_bag_length_1(0x01) ;  //cmd_detect_finger
        ack = ack_bag_length_1() ;
    }
    while(ack!=0x00) ;

    command_bag_length_1(0x02) ;  //cmd_get_image
    ack = ack_bag_length_6() ;
    if(ack!=0x00)
    {
      command_bag_length_3(0x16,0x01,0x06) ; //red_led_flash_once,300ms
      ack = ack_bag_length_1() ;
    }


    command_bag_length_2(0x03,CharBufferA) ;  //cmd_gen_templet,buffer_a
    ack = ack_bag_length_1() ;
    if(ack!=0x00)
    {
      command_bag_length_3(0x16,0x02,0x06) ; //red_led_flash_twice,300ms
      ack = ack_bag_length_1() ;
    }

    command_bag_length_3(0x16,0x11,0x06) ;  //green_led_flash_once,300ms
    ack = ack_bag_length_1() ;

////////////////////////////////////////////////////////////////////////////////////////////

    do
    {
        command_bag_length_1(0x01) ; //cmd_detect_finger
        ack = ack_bag_length_1() ;
    }
    while(ack!=0x00) ;

    command_bag_length_1(0x02) ;  //cmd_get_image
    ack = ack_bag_length_6() ;
    if(ack!=0x00)
    {
      command_bag_length_3(0x16,0x03,0x06) ; //red_led_flash_three_times,300ms
      ack = ack_bag_length_1() ;
    }

    command_bag_length_2(0x03,CharBufferB) ;  //cmd_gen_templet,buffer_b
    ack = ack_bag_length_1() ;
    if(ack!=0x00)
    {
      command_bag_length_3(0x16,0x04,0x06) ; //red_led_flash_four_times,300ms
      ack = ack_bag_length_1() ;
    }

    command_bag_length_3(0x16,0x12,0x06) ;  //green_led_flash_twice,300ms
    ack = ack_bag_length_1() ;

    command_bag_length_1(0x06) ;  //cmd_merge_two_templet 将BufferA和BufferB中的文件合成模版结果存于ModelBuffer
    ack = ack_bag_length_1() ;
    if(ack == 0x00)
    {
        command_bag_length_3(0x16,0x13,0x06) ;  //green_led_flash_three_times,300ms
        ack = ack_bag_length_1() ;
        command_bag_length_4(0x07,model_buffer,templet_num_l,templet_num_h) ;  //cmd_store_templet 将model_buffer中的指纹模版文件存到templet_num号flash数据库模版
        login_succeed() ;
        //command_bag_length_3(0x16,0x30,0x06) ;  //green_&_red_led_flash_three_times_simultaneously,300ms
    }
    else login_failed() ;
      //command_bag_length_3(0x16,0x40,0x06) ;  //green_&_red_led_flash_three_times_successively,300ms
}

/*********************************** delete_one_templet **********************************
删除flash数据库中templet_num号的指纹模版
*********************************** delete_one_templet **********************************/
void delete_one_templet(u16 templet_num)
{
    u8 ack , templet_num_h , templet_num_l ;
    templet_num_h = templet_num>>4 ;
    templet_num_l = templet_num ;
    command_bag_length_3(0x0D,templet_num_h,templet_num_l) ;  //load_templet 将templet_num号flash数据库位置指纹模版文件读入到model_buffer
    ack = ack_bag_length_1() ;
    if(ack == 0x00)
    {
       ok() ;
    }
    else error() ;
}
/************************************* zhiwen_search ************************************
将手指放在指纹识别器上,本段代码将生成指纹特征文件,并将生成的指纹特征文件存放在buffer_id
中,然后以该指纹特征文件分三级搜索指纹库. buffer_id可以是CharBufferA ,CharBufferB 两种。
************************************* zhiwen_search ************************************/
void zhiwen_search(u8 buffer_id)
{
    u8 ack ;
    do
    {
        command_bag_length_1(0x01) ; //cmd_detect_finger
        ack = ack_bag_length_1() ;
    }
    while(ack!=0x00) ;

    command_bag_length_1(0x02) ;  //cmd_get_image
    ack = ack_bag_length_6() ;

    command_bag_length_2(0x03,buffer_id) ;  //cmd_gen_templet, 将ImageBuffer中的原始图像生成指纹特征文件存于buffer_id
    ack = ack_bag_length_1() ;

    command_bag_length_2(0x25,buffer_id) ;  //level_search
    ack = ack_bag_length_35() ;

    if(ack == 0x00)
    {
       ok() ;
    }
    else error() ;

}
/*********************************** zhiwen_compare ***************************************
将手指放在指纹识别器上,本段代码将生成指纹特征文件,并将生成的指纹特征文件与flash数据库中
templet_id号的指纹模版比对.假如一致,则运行ok(),否则运行error() .
*********************************** zhiwen_compare ***************************************/
void zhiwen_compare(u16 templet_id)
{
    u8 ack , templet_id_h , templet_id_l ;
    templet_id_h = templet_id>>8 ;
    templet_id_l = templet_id ;
    do
    {
        command_bag_length_1(0x01) ;  //cmd_detect_finger
        ack = ack_bag_length_1() ;
    }
    while(ack!=0x00) ;

    command_bag_length_1(0x02) ;  //cmd_get_image
    ack = ack_bag_length_6() ;
/*
    command_bag_length_3(0x16,0x11,0x06) ;  //green_led_flash_once,300ms
    ack = ack_bag_length_1() ;
*/
    command_bag_length_2(0x03,CharBufferA) ;  //cmd_gen_templet,将ImageBuffer中的原始图像生成指纹特征文件存于CharBufferA
    ack = ack_bag_length_1() ;
/*
    command_bag_length_3(0x16,0x12,0x06) ;  //green_led_flash_twice,300ms
    ack = ack_bag_length_1() ;
*/
    command_bag_length_3(0x08,templet_id_h,templet_id_l) ;  //load_templet 将flash数据库中templet_id号的指纹模版读入到模版缓冲区model_buffer中
    ack = ack_bag_length_1() ;
/*
    command_bag_length_3(0x16,0x13,0x06) ;  //green_led_flash_three_times,300ms
    ack = ack_bag_length_1() ;
*/
    command_bag_length_3(0x20,model_buffer,CharBufferB) ; //move 指纹模版 from model_buffer to CharBufferB
    ack = ack_bag_length_1() ;
/*
    command_bag_length_3(0x16,0x14,0x06) ;  //green_led_flash_four_times,300ms
    ack = ack_bag_length_1() ;
*/
    command_bag_length_1(0x04) ;  //match_two_templet
    ack = ack_bag_length_3() ;

    if(ack == 0x00)
    {
       ok() ;
    }
    else error() ;
}

/************************************ check_templet *******************************************/
u8 check_templet(u16 templet_num)
{
    templet_num_high = templet_num>>8 ;
    templet_num_low = templet_num ;
    u8 ack ;
    command_bag_length_3(0x28,templet_num_high,templet_num_low) ;
    ack = ack_bag_length_1() ;
    return ack ;
}
/**************************************** main ***********************************************/
/*
main()
{
    InitUART(7) ; // IF Crystal: 7.3728Mhz SET 15  ;  IF Crystal: 3.6864Mhz SET 7  baud_rate 57600
    acknowledge = check_templet(0x000B) ;
    if(acknowledge!=0) command_bag_length_3( 0x16, 0x04 , 0x06 ) ;  //red led flash
    else command_bag_length_3( 0x16, 0x14 , 0x06 ) ;  //green led flash

    login_mode(1) ;
    command_bag_length_1(0x24) ;
    ack_bag_length_33() ;

    InitUART(7) ; // IF Crystal: 7.3728Mhz SET 15  ;  IF Crystal: 3.6864Mhz SET 7  baud_rate 57600
    //login_mode(1) ;
    while(acknowledge!=0)
    {
       command_bag_length_1(0x01); //detect finger
       acknowledge = ack_bag_length_1() ;
    }
   command_bag_length_3( 0x16, 0x04 , 0x06 ) ;  //led flash
   zhiwen_search(CharBufferA,10,90) ;
   //zhiwen_compare(1);
   asm ("nop") ;

}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -