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

📄 aes1510.c

📁 指纹传感器AES1510比较详细的编程例子
💻 C
📖 第 1 页 / 共 3 页
字号:
#include "AES1510.h"
void DATA_INIT()
 { 
   /* ucLUT[0] =0xFF ;ucLUT[1] =0xFF ;ucLUT[2] = 0xFF;ucLUT[3] = 0xFF;ucLUT[4] = 0xF0;ucLUT[5] = 0xC0;ucLUT[6] = 0xA0;
    ucLUT[7] = 0x89;ucLUT[8] = 0x78;ucLUT[9] = 0x6B;ucLUT[10] = 0x60;ucLUT[11] = 0x57;ucLUT[12] =0x50 ;ucLUT[13] = 0x4A;
    ucLUT[14] = 0x45 ;ucLUT[15] = 0x40;ucLUT[16] = 0x3C;ucLUT[17] = 0x38;ucLUT[18] = 0x35;ucLUT[19] = 0x33;ucLUT[20] = 0x30;
    ucLUT[21] = 0x2E;ucLUT[22] = 0x2C;ucLUT[23] = 0x2A;ucLUT[24] =0x28 ;ucLUT[25] = 0x26;ucLUT[26] = 0x25;ucLUT[27] = 0x24;
    ucLUT[28] = 0x22;ucLUT[29] = 0x21;ucLUT[30] = 0x20;ucLUT[31] =0x1F;ucLUT[32] = 0x1E;ucLUT[33] = 0x1D;ucLUT[34] = 0x1C;
    ucLUT[35] = 0x1B;ucLUT[36] = 0x1B;ucLUT[37] = 0x1A;ucLUT[38] =0x19 ;ucLUT[39] = 0x19;ucLUT[40] =0x18;ucLUT[41] = 0x17;
    ucLUT[42] = 0x17;ucLUT[43] =0x16 ;ucLUT[44] = 0x16;ucLUT[45] = 0x15;ucLUT[46] = 0x15;ucLUT[47] = 0x14;ucLUT[48] = 0x14;
    ucLUT[49] = 0x14;ucLUT[50] = 0x13;ucLUT[51] = 0x13;ucLUT[52] =0x12 ;ucLUT[53] = 0x12;ucLUT[54] =0x12;ucLUT[55] = 0x11;
    ucLUT[56] = 0x11;ucLUT[57] = 0x11;ucLUT[58] = 0x11;ucLUT[59] = 0x10;ucLUT[60] = 0x10;ucLUT[61] = 0x10;ucLUT[62] =0x0F ;
    ucLUT[63] =0x0F ;ucLUT[64] = 0x0F;ucLUT[65] = 0x0F;ucLUT[66] = 0x0F;ucLUT[67] =0x0E ;ucLUT[68] = 0x0E;ucLUT[69] = 0x0E;
    ucLUT[70] = 0x0E;ucLUT[71] =0x0E ;ucLUT[72] = 0x0D;ucLUT[73] =0x0D ;ucLUT[74] = 0x0D;ucLUT[75] = 0x0D;ucLUT[76] = 0x0D;
    ucLUT[77] = 0x0C;ucLUT[78] = 0x0C;ucLUT[79] = 0x0C;ucLUT[80] = 0x0C;ucLUT[81] = 0x0C;ucLUT[82] = 0x0C;ucLUT[83] = 0x0C;
    ucLUT[84] = 0x0B;ucLUT[85] = 0x0B;ucLUT[86] = 0x0B;ucLUT[87] = 0x0B;ucLUT[88] = 0x0B;ucLUT[89] = 0x0B;ucLUT[90] = 0x0B;
    ucLUT[91] = 0x0B;ucLUT[92] = 0x0A;ucLUT[93] = 0x0A;ucLUT[94] = 0x0A;ucLUT[95] = 0x0A;ucLUT[96] = 0x0A;ucLUT[97] = 0x0A;
    ucLUT[98] = 0x0A;ucLUT[99] = 0x0A;ucLUT[100] = 0x0A;ucLUT[101] = 0x0A;ucLUT[102] = 0x09;ucLUT[103] = 0x09;ucLUT[104] =0x09 ;
    ucLUT[105] = 0x09;ucLUT[106] = 0x09;ucLUT[107] = 0x09;ucLUT[108] =0x09;ucLUT[109] = 0x09;ucLUT[110] = 0x09;ucLUT[111] = 0x09;
    ucLUT[112] =0x09 ;ucLUT[113] = 0x08;ucLUT[114] = 0x08;ucLUT[115] = 0x08;ucLUT[116] = 0x08;ucLUT[117] = 0x08;ucLUT[118] = 0x08;
    ucLUT[119] = 0x08;ucLUT[120] =0x08 ;ucLUT[121] = 0x08;ucLUT[122] = 0x08;ucLUT[123] = 0x08;ucLUT[124] = 0x08;ucLUT[125] = 0x08;
    ucLUT[126] =0x08 ;ucLUT[127] = 0x08;
    uxGainFactor[0] = 0x0200 >> 1;uxGainFactor[1] = 0x0200 >> 1;uxGainFactor[2] = 0x0200 >> 1;uxGainFactor[3] = 0x0200 >> 1;
    uxGainFactor[4] = 0x0270 >> 1;uxGainFactor[5] = 0x022E >> 1;uxGainFactor[6] = 0x0200 >> 1;uxGainFactor[7] = 0x0200 >> 1;
    uxGainFactor[8] = 0x0200 >> 1;uxGainFactor[9] = 0x0200 >> 1;uxGainFactor[10] = 0x0200 >> 1;uxGainFactor[11] =0x0200 >> 1 ;
    uxGainFactor[12] = 0x0200 >> 1;uxGainFactor[13] =0x0200 >> 1;*/
        
 } 
void    FristSetSensor(void)
{
           
           ERGCReset(  );           
   /*        sWriteAES1510RegByte(0x80,0x01);     
           sWriteAES1510RegByte(0x80,0x12);          	   
           sWriteAES1510RegByte(0x84,0x01);
           sWriteAES1510RegByte(0x85,0x00);
                //sWriteAES1510RegByte(0x86,0x00); 
                //sWriteAES1510RegByte(0x8D,0x00); 
                //sWriteAES1510RegByte(0x8F,0x04);     
           sWriteAES1510RegByte(0x89,IMAG_THRS);//IMAG_THRS
           sWriteAES1510RegByte(0x8A,0x00);	          
           //sWriteAES1510RegByte(0x8B,0x0D); 
           //sWriteAES1510RegByte(0x8C,0x52);
           sWriteAES1510RegByte(0x8B,0x0E); 
           sWriteAES1510RegByte(0x8C,0x68);	   	         
           sWriteAES1510RegByte(0xBE, ( HiGv( m_sIAGC.ucGain ) | UniGain( m_sIAGC.ucGain ) ));	  	   
           sWriteAES1510RegByte(0x29,0x00);
           sWriteAES1510RegByte(0x2A,0x08);               	        	   
           sWriteAES1510RegByte(0x96,0x00);	
	       sWriteAES1510RegByte(0x97,0x48);	          
           sWriteAES1510RegByte(0x98,0);	  // 调速度 HIGH SCN_TIM_H
           sWriteAES1510RegByte(0x99,0);      // 调速度 LOW   SCN_TIM_L     	   	     
           sWriteAES1510RegByte(0x9C,0x00);	
	       sWriteAES1510RegByte(0x9D,0x00);	
	       sWriteAES1510RegByte(0x9E,0x00);	
	       sWriteAES1510RegByte(0x9F,0x00);             
	       sWriteAES1510RegByte(0xA2,0x50);	 
	       sWriteAES1510RegByte(0xA3,0xF0); //0xF0	      
	       sWriteAES1510RegByte(0xAD,0x08);
	       sWriteAES1510RegByte(0xBD, m_aucOffDAC[m_sIAGC.ucGain]);	  
	       sWriteAES1510RegByte(0xAF, m_ucVRefDAC);	  // 54	      
	       sWriteAES1510RegByte(0xB1,0x28);  //28	     
	       sWriteAES1510RegByte(0xB5,0xAB);    //AB  	  
	       sWriteAES1510RegByte(0x1B,0x2D);	   
             
           
          	   
           sWriteAES1510RegByte(0xA2,0xD0);	   
	       sWriteAES1510RegByte(0x1D,0x39);
	       sWriteAES1510RegByte(0x1E,0x3F);
	       sWriteAES1510RegByte(0x1C,0x00);	   
	       sWriteAES1510RegByte(0x1D,0x05);
	       sWriteAES1510RegByte(0x1E,0x13);
	       sWriteAES1510RegByte(0x1C,0x01);	   
	       sWriteAES1510RegByte(0x1D,0x00);
	       sWriteAES1510RegByte(0x1E,0xA1);
	       sWriteAES1510RegByte(0x1C,0x02);	   
	       sWriteAES1510RegByte(0x1D,0x30);
	       sWriteAES1510RegByte(0x1E,0x20);
	       sWriteAES1510RegByte(0x1C,0x03); 	   
	       sWriteAES1510RegByte(0x1D,0x02);
	       sWriteAES1510RegByte(0x1E,0x21);
	       sWriteAES1510RegByte(0x1C,0x04);	   
	       sWriteAES1510RegByte(0x1D,0x19);
	       sWriteAES1510RegByte(0x1E,0x03);
	       sWriteAES1510RegByte(0x1C,0x05);	   
	       sWriteAES1510RegByte(0x1D,0x28);
	       sWriteAES1510RegByte(0x1E,0xB9);
	       sWriteAES1510RegByte(0x1C,0x06);	   
	       sWriteAES1510RegByte(0x1D,0x30);
	       sWriteAES1510RegByte(0x1E,0x3F);
	       sWriteAES1510RegByte(0x1C,0x07);	   
	       sWriteAES1510RegByte(0x1D,0x05);
	       sWriteAES1510RegByte(0x1E,0x13);
	       sWriteAES1510RegByte(0x1C,0x08);	   
	       sWriteAES1510RegByte(0x1D,0x00);
	       sWriteAES1510RegByte(0x1E,0xA1);
	       sWriteAES1510RegByte(0x1C,0x09);	   
	       sWriteAES1510RegByte(0x1D,0x30);
	       sWriteAES1510RegByte(0x1E,0x08);
	       sWriteAES1510RegByte(0x1C,0x0A);	   
	       sWriteAES1510RegByte(0x1D,0x02);
	       sWriteAES1510RegByte(0x1E,0x21);
	       sWriteAES1510RegByte(0x1C,0x0B);	   
	       sWriteAES1510RegByte(0x1D,0x18);
	       sWriteAES1510RegByte(0x1E,0x03);
	       sWriteAES1510RegByte(0x1C,0x0C);	   
	       sWriteAES1510RegByte(0x1D,0x28);
	       sWriteAES1510RegByte(0x1E,0xB9);
	       sWriteAES1510RegByte(0x1C,0x0D);	   
	       sWriteAES1510RegByte(0x1D,0x16);
	       sWriteAES1510RegByte(0x1E,0x90);
	       sWriteAES1510RegByte(0x1C,0x0E);	   
	       sWriteAES1510RegByte(0x1D,0x2C);
	       sWriteAES1510RegByte(0x1E,0x07);
	       sWriteAES1510RegByte(0x1C,0x0F);	   
	       sWriteAES1510RegByte(0x1D,0x28);
	       sWriteAES1510RegByte(0x1E,0xB9);
	       sWriteAES1510RegByte(0x1C,0x10);	   
	       sWriteAES1510RegByte(0x1D,0x80);
	       sWriteAES1510RegByte(0x1E,0xAA);	   
	       sWriteAES1510RegByte(0xA2,0x50);          	  
	       sWriteAES1510RegByte(0x81,0x01);  */
           
}

void EnableFingerDetect(void  )

{
        /*   sWriteAES1510RegByte(0x80,0x01);	   
	       sWriteAES1510RegByte(0x80,0x12);
	       sWriteAES1510RegByte(0x85,0x00);
	       sWriteAES1510RegByte(0x8A,0x00);	   
	       sWriteAES1510RegByte(0x8B,0x0E);
	       sWriteAES1510RegByte(0x8C,0x68);
	       sWriteAES1510RegByte(0x8D,0x83);	   
	       sWriteAES1510RegByte(0x8E,0x07);
	       sWriteAES1510RegByte(0x8F,0x07);	      
	       sWriteAES1510RegByte(0x96,0x00);	   
	       sWriteAES1510RegByte(0x97,0x48);	
           sWriteAES1510RegByte(0xA1,0x00);      
	       sWriteAES1510RegByte(0xA2,0x50);	   
	       sWriteAES1510RegByte(0xA6,0xE4);
	       sWriteAES1510RegByte(0xAD,0x08);
	       sWriteAES1510RegByte(0xAE,m_aucOffDAC[9] + 2);	   
	       sWriteAES1510RegByte(0xAF,m_ucVRefDAC);
	       sWriteAES1510RegByte(0xB1,0x28);
	       sWriteAES1510RegByte(0xB5,0xAB);	   
	       sWriteAES1510RegByte(0xB6,0x0E);
	       sWriteAES1510RegByte(0x1B,0x2D);          	  
	       sWriteAES1510RegByte(0x81,0x04);   */
}

void ConGetImageStop(void  )

{
          sWriteAES1510RegByte(0x81,0x00);   
}
    


void    UpdateSensorRegisters ( void )
{
        
        if(a[38]& 0x40)
        {
           ERGCRun( uReceiveSensorTestImageData );  
            Tempoffset = m_sIAGC.ucOffset;
            Tempmult   =  m_sIAGC.ucMult;
           asm("nop");
           unsigned int temp = (unsigned int)( HiGv( m_sIAGC.ucGain ) | UniGain( m_sIAGC.ucGain ) );               
           sWriteAES1510RegByte(0xBE,temp );    /*  temp           HiGv and Gain.      (** MUST BE FIRST **) */          	   
           sWriteAES1510RegByte(0x29,m_sIAGC.ucOffset);    /*  m_sIAGC.ucOffset    1 Offset.                                   */
           sWriteAES1510RegByte(0x2A,m_sIAGC.ucMult );    /*  m_sIAGC.ucMult    2 Multiplier.                               */
           sWriteAES1510RegByte(0xBD,m_aucOffDAC[m_sIAGC.ucGain] );    /* m_aucOffDAC[m_sIAGC.ucGain]   m_aucOffDAC[m_sIAGC.ucGain] 3 Offset DAC per Gain. (** MUST BE LAST **) */      
        }
}
void ERGCRun( unsigned int * ucBin )
{
    unsigned int  xPct;                 /* Working Percent (may exceed 127).*/
    unsigned int  xI;                   /* Working index.                   */
    unsigned int  xWht;                 /* White Bin in 1/8 Bin increments. */
    unsigned int  xBlk;                 /* Black Bin in 1/8 Bin increments. */
    unsigned int  xBin;                 /* Working 1/8 of the Bin.          */
    unsigned int  xRem;                 /* Working 1/8 of the Bin remainder.*/
    unsigned int  xTol;                 /* Noise Tolerance.                 */

    xTol = 20;
    xPct = 0;
    for ( xI = 0; xPct < ucWhitePct; xI++ )
    {
        xPct += ucBin[xI];
    }

    xPct -= ucBin[--xI];
    xWht = xI << 3;
    xBin = ucBin[xI] >> 3;
    xRem = ucBin[xI] & 7;
    for ( xI = 7; xPct < ucWhitePct; xI-- )
    {
        xPct += xBin;
        if ( xRem > xI )
        {
            xPct++;
        }
        xWht++;
    }

    xPct = 0;
    for ( xI = 15; xPct < ucBlackPct; xI-- )
    {
        xPct += ucBin[xI];
    }

    xPct -= ucBin[++xI];
    xBlk = ( xI + 1 ) << 3;
    xBin = ucBin[xI] >> 3;
    xRem = ucBin[xI] & 7;
    for ( xI = 7; xPct < ucBlackPct; xI-- )
    {
        xPct += xBin;
        if ( xRem > xI )
        {
            xPct++;
        }
        xBlk--;
    }

    if ( xBlk < ( xWht + 1 ) )
    {
        xBlk = ( xWht + 1 );
    }

    m_sIAGC.ucOffset = (unsigned int) ( xWht << 1 );

    m_sIAGC.ucMult = ucLUT[ ( xBlk - xWht ) ];
  

   if( ucBin[15] > ( xTol ) )
    {

        if( ERGCGainDown(  ) )
        {

            asm("nop");
            return;
        }
        else
        {
            m_sIAGC.ucGainOK = (unsigned int)( 1 );
        } 
    }    
        xPct = ucBin[15] + ucBin[14] + ucBin[13] + ucBin[12] +
          ucBin[11] + ucBin[10] + ucBin[ 9] + ucBin[ 8];
    if( xPct <= xTol && ERGCGainUp(  ) )
    {
        asm("nop");
        xPct += ucBin[5] + ucBin[4] + ucBin[ 7] + ucBin[ 6]; 

        if( xPct <= xTol && ERGCGainUp(  ) )
        {
            asm("nop");
            xPct += ucBin[3] + ucBin[2]; 

            if( xPct <= xTol && ERGCGainUp(  ) )
            {
                asm("nop");
            }
            else
            {
                m_sIAGC.ucGainOK = (unsigned int)( 1 );
            }
        }
        else
        {
            m_sIAGC.ucGainOK = (unsigned int)( 1 );
        }
    }
    else
    {
        m_sIAGC.ucGainOK = (unsigned int)( 1 );
    }

    return;
}
unsigned int  ERGCGainDown(  )
{

    if( m_sIAGC.ucGain > m_sIAGC.ucMinGain )
    {

            unsigned int uxTemp;
            uxTemp = ( (( m_sIAGC.ucMult * m_sIAGC.puxGainFactor[m_sIAGC.ucGain] ) >> 7 )& 0x00FF);
            if( uxTemp > 255 )
            {
                uxTemp = 255;
            }
            m_sIAGC.ucMult = (unsigned int)( uxTemp );
            m_sIAGC.ucOffset = (unsigned int)( (( m_sIAGC.ucOffset << 7 ) & 0x00FF / m_sIAGC.puxGainFactor[m_sIAGC.ucGain] )& 0x00FF);
            m_sIAGC.ucGain =  m_sIAGC.ucGain - 1 ;
            return (1);
    }
    return (0);
    

}

unsigned int ERGCGainUp( )
{

    if( m_sIAGC.ucGain < m_sIAGC.ucMaxGain )
    {
        m_sIAGC.ucGain = (unsigned int)( m_sIAGC.ucGain + 1 );
        unsigned int uxTemp;

            uxTemp = ( (( m_sIAGC.ucOffset * m_sIAGC.puxGainFactor[m_sIAGC.ucGain] ) >> 7)&0x00FF );
            asm("nop");
            if( uxTemp > 255 )
            {

⌨️ 快捷键说明

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