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

📄 aes1510.c

📁 指纹传感器AES1510比较详细的编程例子
💻 C
📖 第 1 页 / 共 3 页
字号:
             if(OneFrame_OK == 1 )
			 {     		         
                    NoFinger_Time = 0; 
					OneFrame_OK = 0;
                    if(FLAG1 == 1)
                    {					
                         DDresult = JointAliveFrame(FrameImageBuf,FrameEvenOddToggle);
			    	     if(DDresult == 0)        //我们的拼接算法 
				        {
				         	if (FrameEvenOddToggle ==1)
				    	    {FrameEvenOddToggle=0; }
				    	    else if(FrameEvenOddToggle ==0)
						    {FrameEvenOddToggle =1;} 
					
				        }
			       }
                   FLAG ++;
                   if(FLAG > 3)
                   {
                           FLAG = 4;
                           FLAG1 = 1;
                    }
               }      
              
			if(NoFinger_Time >= 10)     
			{
				
				      NoFinger_Time = 0;				           
				      if(OverTimes != 0)
					   {
								AdjustCircleLines();	
							    ConGetImageStop( );
							    ProcessData();
								return 0;	
								
						}
						else
						{
								if(ValidHeight <= 24)
								{
                                     ConGetImageStop( );
                                     return 1;          
                                }
                                if(ValidHeight <= (ImageHgtLit/2+64))  
								{
									ConGetImageStop( );
                                    return 2; 
								}
								else
								{
								  	AdjustCircleLines();																
									ConGetImageStop( );
									ProcessData();
                                    return 0;	
								}	
						}
                        							
			}           		
	     }	
}
/**********************************************************************
*subroutine:wait transmit ready for spi bus
*input:none,output:none
***********************************************************************/
void	sWaitforTrdy(void)
{
	while(USART3_CSTAT & 0x0004);			
}
/*********************************************************************
*subroutine:wait receive ready for spi bus
*input:none,output:none
**********************************************************************/
void	sWaitforRrdy(void)
{
	while(!(USART3_CSTAT & 0x0002));	
}

/**************************************************************************
*subroutine:read byte from spi bus
*input:none,output:byte
***************************************************************************/
unsigned int uReadSPI3Byte(void)
{
	unsigned int TimeCount1;
    while(USART3_CSTAT & 0x0004);
	USART3_TXREG1 = 0xff;
	TimeCount1 = 0;
    while(1)
    {
        if(USART3_CSTAT & 0x0002)
        {
              break;
        }
        else 
        {
             TimeCount1++;
             if(TimeCount1 >=200)
             {
                   TimeCount1 = 0;
                   return 0x1234;
             }
        }	
	}
	return USART3_RXREG1;	
}
/************************************************************************
*subroutine:write spi byte to sensor
*input:byte,output:none
*************************************************************************/
void	sWriteSPI3Byte(unsigned int uWriteSPIByte)
{
		unsigned int i;		
		sWaitforTrdy();
		USART3_TXREG1 = uWriteSPIByte;		
		sWaitforRrdy();
		i = USART3_RXREG1;

}
/**************************************************************************
*subroutine:write sensor
*input:sensor register address and data,output:none
*****************************************************************************/
void	sWriteAES1510RegByte(unsigned int uAddress,unsigned int uData)
{
		sWriteSPI3Byte(uAddress);
		sSensorDelayUs(5);		
		sWriteSPI3Byte(uData);
		sSensorDelayUs(5);	
}
/**************************************************************************
*subroutine:delay for writing or reading sensor
***************************************************************************/
void	sSensorDelayUs(unsigned int uDelay)
{
		unsigned int i;
		unsigned int j;
		for(j=0;j<uDelay;j++)
			for(i=0;i<(12/2-1);i++)
				asm("nop");				
		return;	
}
void	sFrameJointDataFormat()
{
	   unsigned int i ;
	   unsigned int uRow ;
	   unsigned int uLine ;
	   unsigned int uTempValue ;
	   unsigned int j = 0; 
       unsigned int uToggleValue;        
	   uToggleValue = FrameEvenOddToggle * 128 * 8;	
	  
       while(!(PIO_DATA1 & 0x0004));	      
       while(uReadSPI3Byte()!=0xE0);       
       for(uRow = 1;uRow <= 512;uRow += 4)
       {	
	     	uLine = 0;
	     	
	    	for(i = uRow;i < (4 + uRow);i ++)
	    	{
		    	while(!(PIO_DATA1 & 0x0004));	
                uReceiveSensorTestImageData[0] = uReadSPI3Byte();		    
		    	uTempValue =  ~uReceiveSensorTestImageData[0];
		    	FrameImageBuf[uToggleValue + j + uLine] = ((uTempValue & 0x000f) << 4);
  		    	uLine = uLine + 128;
		    	FrameImageBuf[uToggleValue + j + uLine] = uTempValue & 0x00f0; 
		    	uLine = uLine + 128;			
	    	}	
	     	j = j + 1;		
		 
	    }
	    while(!(PIO_DATA1 & 0x0004));
	    while(uReadSPI3Byte()!=0xDE);	    
    	for(i = 0;i<16;i++)
    	{ 
               while(!(PIO_DATA1 & 0x0004));
               uReceiveSensorTestImageData[i] =  uReadSPI3Byte();
        }  
        while(!(PIO_DATA1 & 0x0004)); 
        //while(uReadSPI3Byte()!=0xDF);
        for(i = 0;i<135;i++) //134
        {
             while(!(PIO_DATA1 & 0x0004));
            a[i] =  uReadSPI3Byte();  
        }         
        OneFrame_OK = 0;       
        asm("nop");
	    if((uReceiveSensorTestImageData[0] < (IMAG_THRS))&&(uReceiveSensorTestImageData[15] < IMAG_THRS+10) )
    	{ 
                
                //   if(FrameDetectFingerVar(FrameEvenOddToggle))
                 //   {
                     OneFrame_OK  = 1;
                  //  }
                  // NoFinger_Time = 0;
                   // else
	              //  {          
                   //        NoFinger_Time ++;             
                 //   }                
	    }
	    else
	    {
                 NoFinger_Time ++;             
        }    
        asm ("nop");
    	asm ("nop");
    	
}


void	FingerDETECT(void)
{
       unsigned int i ;
	   unsigned int uRow ;
	   unsigned int uLine ;
	   unsigned int uTempValue ;
	   unsigned int j = 0; 
       unsigned int uToggleValue;  
       unsigned int FingerOndetect;
       unsigned int TimeCount;      
	   uToggleValue = FrameEvenOddToggle * 128 * 8;	
       while(!(PIO_DATA1 & 0x0004));
       TimeCount = 0;	      
       while(1)
       {	  
            if (uReadSPI3Byte() == 0xDE)
            {
                 break;
            }
            else if(uReadSPI3Byte() == 0x1234)
            {
                 return ;
            }
            else
            {
                TimeCount ++;
                if(TimeCount >= 500)
                {
                     return ;                     
                }
            }
       }     
    	for(i = 0;i<18;i++)
    	{       while(!(PIO_DATA1 & 0x0004));	
	            uReceiveSensorTestImageData[i] =  uReadSPI3Byte();
        }
        
        FingerOndetect = 0;
        OneFrame_OK = 0;
	    FingerOndetect =  uReceiveSensorTestImageData[13]+uReceiveSensorTestImageData[14]+uReceiveSensorTestImageData[15];
	    if((uReceiveSensorTestImageData[0] < IMAG_THRS))
    	{ 	
	           
                           OneFrame_OK  = 1;                               
	    }
		else
		{
			        Detect_Time = 0;
                    NoFinger_Time ++; 
		}       
    
        asm ("nop");
    	asm ("nop");
}
void ProcessData()
{
        unsigned int temp1,temp2,temp3,temp4,temp5;
        unsigned int *SourceADD = (int *)(0x6800);
        unsigned int *DestiADD  = (int *)(0x6800);
        unsigned int i ;// 0~~~~~~288
        unsigned int j ;// 0~~~~~~128
        for(i = 0;i<288;i++)
        {
              for(j = 0;j<128;j++)
              {
                    if(j == 0) 
                    {
                        /*temp1 = *SourceADD & 0xF000;
                        temp2 = (*SourceADD & 0xF000)>> 8;
                        temp3 = 2* (*SourceADD & 0x00F0);
                        temp4 = *(++SourceADD) & 0xF000 >> 8;
                        temp5 = (temp2 +temp3 +temp4)/4;                       
                        puReceiveData[0] =  temp1 | temp5;  */
                        puReceiveData[j] =  *SourceADD;SourceADD ++;
                    }
                    else if(j == 127)
                    {
                      /*  temp1 = *(--SourceADD) & 0x00F0 ;
                         temp2 = 2* ((*(++SourceADD) & 0xF000)>>8);
                         temp3 = *(SourceADD) & 0x00F0;
                         temp4 = (temp1 + temp2 +temp3)/4;                         
                         temp5 = *(SourceADD)& 0x00F0;
                         puReceiveData[127] =  (temp4 << 8)|temp5; */
                         puReceiveData[j] =  *SourceADD;SourceADD ++;
                    }
                    else
                    {               
                        temp1 = *(--SourceADD) & 0x00F0;
                        temp2 = (*(++SourceADD) & 0xF000)>>8;
                        temp3 =  *(SourceADD) & 0x00F0;
                        temp4 = (temp1 + 2*temp2 +temp3)/4;
                        
                        temp1 =  (*SourceADD & 0xF000)>>8;
                        temp2 =  *SourceADD & 0x00F0;
                        temp3 =  (*(++SourceADD) & 0xf000)>>8;
                        temp5 =  (temp1 + 2*temp2 +temp3)/4;                       
                        puReceiveData[j] = (temp4 << 8)|temp5; 
                                                                    
                    }                    
              }
              for(j = 0;j<128;j++)
              {
                    *DestiADD = puReceiveData[j];
                    DestiADD ++;
              }
        }
}

⌨️ 快捷键说明

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