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

📄 flash.c

📁 Avr Atmeg128汽车行驶记录仪 带有USB驱动 c语言
💻 C
📖 第 1 页 / 共 2 页
字号:
uchar Get_pilao(void)
{ulong t=0;
 uchar *p1,*p2,*p3;
 uchar i,j,k=0;
 FM_CS;
 /*for (i=0; i<3; i++)
    {
        itime[i] = timeb2h(SYS_Time[i]);
    }
	itime[3]=0;
	itime[4]=0;
    timepastforint();
    t = itimelen-1440;*/
	p1=ConD_Buf;
	p3=Driver_now__Buf+1;
	if((condrv_index_buf==0)&&(*p1!=VALID))
	   return k;
    else
	   {
	    if(condrv_index_buf==0)
		  { p2=com1subbuf+1;
		    for(i=0;i<16;i++)
		     {p1=ConD_Buf+i*14+1;
			  if((*p1==*p3)&&(*(p1+1)==*(p3+1))&&(*(p1+2)==*(p3+2)))
			    {p1=p1+3;
				 for(j=0;j<10;j++)
			  	    {*p2=*p1;
					  p2++;
					  p1++;
				     }
				  k++;
				}
			  }
			 p2=com1subbuf;
			 *p2=k;
			 return k;
    	   }
		 else
		  { p2=com1subbuf+1;
		    for(i=condrv_index_buf;i<16;i++)
		     {p1=ConD_Buf+i*14+1;
			  if((*p1==*p3)&&(*(p1+1)==*(p3+1))&&(*(p1+2)==*(p3+2))&&(*(p1-1)==VALID))
			    {p1=p1+3;
				 for(j=0;j<10;j++)
			  	    {*p2=*p1;
					  p2++;
					  p1++;
				     }
				  k++;
				}
			  }
             for(i=0;i<condrv_index_buf;i++)
		     {p1=ConD_Buf+i*14+1;
			  if((*p1==*p3)&&(*(p1+1)==*(p3+1))&&(*(p1+2)==*(p3+2))&&(*(p1-1)==VALID))
			    {p1=p1+3;
				 for(j=0;j<10;j++)
			  	    {*p2=*p1;
					  p2++;
					  p1++;
				     }
				  k++;
				}
			  }
			 p2=com1subbuf;
			 *p2=k;
			 return k;
		   }  
	   }
}

//取得停车信息
uchar Get_stop(void)
{ulong t=0;
 uchar *p1,*p2,*p3;
 uchar i,k=0,temp=0x55;
 uint  j;
 FM_CS;
    		p2=com1subbuf+1;
			*p2=0x55;
			 p2++;
			 *p2=0x7a;
			 temp^=*p2;
			 p2++;
			 *p2=0x07;
			 temp^=*p2;
			 p2++;
	//		 *p2=0;
	//		 temp^=*p2;
	//		 p2++;
 	p1=Suspend_Buf;
	if((stop_index_buf==0)&&(*p1!=VALID))
	  {  *p2=0;
		 temp^=*p2;
    	 p2++;
	     *p2=k*10;
		 temp^=*p2;
		 p2++;
		 *p2=0;
		 temp^=*p2;
		 p2++;
		 *p2=temp;
		 p2=com1subbuf;
		 *p2=k;
	    return k;
       }
    else
	   {p2++;
	    p2++;
		*p2=0;
		 temp^=*p2;
		 p2++;
	    if(stop_index_buf==0)
		  { //p2=com1subbuf+6;
		    for(i=0;i<10;i++)
		     {p1=Suspend_Buf+i*370+4;
			  	 for(j=0;j<366;j++)
			  	    {*p2=*p1;
					 temp^=*p2;
					  p2++;
					  p1++;
				     }
			   k++;
			  }
			 p1=p2;
			 p2=com1subbuf+4;
			 j=k*366;
			 *p2=(uchar)(j/256);
			 temp^=*p2;
			 p2++;
			 *p2=(uchar)(j%256);
			 temp^=*p2;
//			 p2++;
			 p2=p1;
			 *p2=temp;
			 p2=com1subbuf;
			 *p2=k;
			 return k;
    	   }
		 else
		  { //p2=com1subbuf+6;
		    for(i=stop_index_buf;i<10;i++)
		     { p1=Suspend_Buf+i*370;
			   if(*p1==VALID) 
			    { p1=p1+4;
			       for(j=0;j<366;j++)
			  	    {*p2=*p1;
					 temp^=*p2;
					  p2++;
					  p1++;
				     }
				   k++;
				}
			  }
             for(i=0;i<stop_index_buf;i++)
		     { p1=Suspend_Buf+i*370+4;
			   for(j=0;j<366;j++)
			  	    {*p2=*p1;
					 temp^=*p2;
					  p2++;
					  p1++;
				     }
			   k++;
			  }
			 p1=p2;
			 p2=com1subbuf+4;
			 j=k*366;
			 *p2=(uchar)(j/256);
			 temp^=*p2;
			 p2++;
			 *p2=(uchar)(j%256);
			 temp^=*p2;
//			 p2++;
			 p2=p1;
			 *p2=temp;
			 p2=com1subbuf;
			 *p2=k;
			 return k;
		   }  
	   }
}

uchar judgestoptime(void)
{ uchar i;
  uchar *p;
    ulong t = 0;
    for (i=0; i<5; i++)
    {
        itime[i] = timeb2h(SYS_Time[i]);
    }
    timepastforint();
    t = itimelen;
	p=Stop_time;
    for (i=0; i<5; i++)
    {
        itime[i] = timeb2h(*p);
		p++;
    }
    timepastforint();
    if ((t-itimelen)>20)//20
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }

}

uchar judgedrvtime(void)
{uchar i,i1;
 uchar *p;															//2005/11/25
    ulong t = 0; 
	i1=0;
	p=Stop_time;
    for (i=0; i<5; i++)
    {
        itime[i] = timeb2h(*p);
		i1+=itime[i];
		p++;
    }
    timepastforint();
    t = itimelen;
    p=Begin_time;
    for (i=0; i<5; i++)
    {
        itime[i] = timeb2h(*p);
		p++;
    }
    timepastforint();
    if ((t >= itimelen)&&(i1!=0))                  //加2005_11_25
    { 					                //加2005_10_10
    	if ((t-itimelen)>3*60 )          //3*60
   	    {
      	    return TRUE;
        }
   	    else
        {
       	    return FALSE;
        }
    }					                //加2005_10_10
    else				                //加2005_10_10
    {
    	return FALSE;		            //加2005_10_10
    }			
}

void storecondrvdata(void)
{uchar i;
 uchar *p1,*p2;
 condrv_save_flag = NEEDSAVE;
 p1= ConD_Buf + condrv_index_buf * 14;
 *p1=VALID;
 p1++;
 p2=Driver_now__Buf + 1;
    for (i=0; i<3; i++)
      {
        *p1=*p2;
		p1++;
		p2++;
      }
	p2=Begin_time;
    for (i=0; i<5; i++)
      {
        *p1=*p2;
		p1++;
		p2++;
      }
	p2=Stop_time;
    for (i=0; i<5; i++)
      {
        *p1=*p2;
		p1++;
		p2++;
       }
     condrv_index_buf++;    
	 if (condrv_index_buf >= 16)      
	   {	
	     condrv_index_buf = 0;				
	    }									 
   condrv_save_flag = NOOP;
}

void storestopdata(void)
{ uchar i,j;
  uchar *p1,*p2;
     FM_CS;
     stop_save_flag = NEEDSAVE;
     p1= Suspend_Buf + stop_index_buf * 370 + 4;
	 p2=Now_Buf +(uint)( (rt_index_buf-1)*24);
      for(i=0;i<6;i++)
         {*p1 = *p2;
		   p1++;
		   p2++;
          }
      if(rt_index_buf > 0)
      {     
            for(i=rt_index_buf;i<20 ;i++)
			  {
				p2 = Now_Buf + i*24 + 6;
                for(j=0;j<18;j++)
                  {
                      *p1= *p2;
                      p1++;
					  p2++;
                  }
              }
            for(i=0;i<rt_index_buf;i++)
			  {  p2 = Now_Buf +i * 24 + 6;
                 for(j=0;j<18;j++)
                  {
                      *p1= *p2; 
                      p1++;
					  p2++;
                  }
              }
      }
      else
      {
         for (i=0; i<20; i++)
		  {   p2 = Now_Buf + i * 24 + 6;
              for (j=0; j<18; j++)
               {
                 *p1 = *p2;
                 p1++;
				 p2++;
               }
           }
         
      }
  
    p1=Suspend_Buf+stop_index_buf*370+1;
	p2=Driver_now__Buf + 1;
	for(i=0;i<3;i++)
	  {*p1 = *p2;
	    p1++;
		p2++;
	  }
	  p1= Suspend_Buf + stop_index_buf * 370;
	  *p1 = VALID;
	  stop_index_buf++;
      if (stop_index_buf >= 10)
        stop_index_buf = 0;
    stop_save_flag = NOOP;
}

void minproc(void)
{ uchar *p1,*p2;
  uint i;
  p1=D360_Buf1;
  p2=D360_Buf2;
  for(i=0;i<500;i++)
  {*p2=*p1;
   p1++;
   p2++;
  }
  *p2=VALID;
  d360_save_flag1=NOOP;
  d360_save_flag2=NEEDSAVE;
}


void Get_15min(void)
{uchar *p1,*p2,i,j,k;
 FM_CS;	
 k=d360_index_buf1;
 if(k<=0)
   {	p1= D360_Buf2 + 128;
    	p2= com1subbuf;
    	for(i=0;i<15;i++)
	 	{	for(j=0;j<6;j++)
	   		{	*p2=*p1;
	     		p2++;
		 		p1++;
	   		}
	  		p1=p1+19;	  
	 	}
   }
 else if(k>=15)
   {	p1= D360_Buf1 + (k-15) * 25 +3;
    	p2= com1subbuf;
    	for(i=0;i<15;i++)
	 	{	for(j=0;j<6;j++)
	   		{	*p2=*p1;
	     		p2++;
		 		p1++;
	   		}
	  		p1=p1+19;	  
	 	}
   }
 else
   { 	p1 = D360_Buf2 + ( 5 + k ) *25 +3;
    	p2 = com1subbuf;
    	for(i=0;i<(15-k);i++)
	 	{	for(j=0;j<6;j++)
	   		{	*p2=*p1;
	     		p2++;
		 		p1++;
	   		}
	  		p1=p1+19;	  
	 	}
		p1 =D360_Buf1 + 3;
		for(i=0;i< k;i++)
	 	{	for(j=0;j<6;j++)
	   		{	*p2=*p1;
	     		p2++;
		 		p1++;
	   		}
	  		p1=p1+19;	  
	 	}
   }
   k=0;
}


uchar Get_stop_15min(void)
{uchar *p1,*p2,*p3,i,j,k,j1,j2;
 uint k1;
ulong t=0;
 FM_CS;	
 p1=Stop_time;
 for (i=0; i<5; i++)
    {
        itime[i] = timeb2h(*p1);
		p1++;
    }
 timepastforint();
// t1 = itimelen;
 t = itimelen;
 j1=0;
 p2= com1subbuf;
 k=d360_index_buf1;
 if(k>0)
 {	p1= D360_Buf1 + (k-1) * 25 +3;
  //  	p2= com1subbuf;
  		j2=0;
    	while((j2<k)&&(j1<15))
		     { p3=p1;
			  for (i=0; i<5; i++)
    			{
        			itime[i] = timeb2h(*p1);
					p1++;
    			}
			  timepastforint();
			  p1=p3;
			  j2++;
     	 	  if((t>=itimelen)&&((t-itimelen)<15))
	 	 	  {	for(j=0;j<6;j++)
	   			{	*p2=*p1;
	     			p2++;
		 			p1++;
	   			}
	  			
				j1++;	  
	 	  	  }
			  else if((t>=itimelen)&&((t-itimelen)>=15))
			      return j1;
			  p1=p3-25;
			}
   }

  if(d360_save_flag2==NEEDSAVE)	
        {	p1= D360_Buf2 + 478;
			j2=0;
			while((j2<20)&&(j1<15))
		     { p3=p1;
			  for (i=0; i<5; i++)
    			{
        			itime[i] = timeb2h(*p1);
					p1++;
    			}
			  timepastforint();
			  p1=p3;
			  j2++;
     	 	  if((t>=itimelen)&&((t-itimelen)<15))
	 	 	  {	for(j=0;j<6;j++)
	   			{	*p2=*p1;
	     			p2++;
		 			p1++;
	   			}
	  			
				j1++;	  
	 	  	  }
			  else if((t>=itimelen)&&((t-itimelen)>=15))
			      return j1;
			  p1=p3-25;
			}
		}
  k1=flash_page_index;
  if(k1==0)
   {LoadPage(k1,flash_buf,528);
    p1=flash_buf+500;
	if(*p1!=VALID)
	 	return j1;
	else
	 	k1=1100;
	}
  while(1)
	{LoadPage(k1-1,flash_buf,528);
	 p1=flash_buf+500;
	if(*p1==VALID)      
		{	p1= flash_buf + 478;
			j2=0;
			while((j2<20)&&(j1<15))
		     { p3=p1;
			  for (i=0; i<5; i++)
    			{
        			itime[i] = timeb2h(*p1);
					p1++;
    			}
			  timepastforint();
			  p1=p3;
			  j2++;
     	 	  if((t>=itimelen)&&((t-itimelen)<15))
	 	 	  {	for(j=0;j<6;j++)
	   			{	*p2=*p1;
	     			p2++;
		 			p1++;
	   			}
	  			
				j1++;	  
	 	  	  }
			  else if((t>=itimelen)&&((t-itimelen)>=15))
			      return j1;
			 p1=p3-25;
			}
		}
		if(j1>=15)
		return j1;
		k1--;
		if(k1==0)
		   k1=1100;


	}
  
 
}



/*void Flash_InIt(void)
{
	DDRG |=_BV(PG4)|_BV(PG3);
	PORTG = 0X18;
	DDRB |=_BV(DDB2)|_BV(DDB1)|_BV(DDB0); 
	SPCR |= _BV(SPE) |_BV(MSTR) |_BV(SPR1); 
	//SPSR |= _BV(SPI2X);	
}

/*uchar WriteSpi(uchar cData)
{
	uchar i;
	CSFLASH_ON ;
	SPDR = cData;
	while(!(SPSR & _BV(SPIF)))
	;
	i = SPSR;
	SPDR = 0;
	while(!(SPSR & _BV(SPIF)))
	;
	i = SPSR;
	
	CSFLASH_OFF;
	i = SPSR;
	return i;
}

uchar ReadSpi(void)
{
	uchar i=0;
	CSFLASH_ON;
	SPDR = i;
	while(!(SPSR & _BV(SPIF)))
	;
	i = SPSR;
	CSFLASH_OFF;
	return SPDR;
	
	
}

uchar GetFlashState(void)
{
    uchar i=0;       
	CSFLASH_ON ;
	SPDR = 0XD7;
	while(!(SPSR & _BV(SPIF)))
	;
	i = SPSR;
	SPDR = 0;
	while(!(SPSR & _BV(SPIF)))
	;
	i = SPSR;
	i = SPDR;
	CSFLASH_OFF;
	
	return i;
}

void WriteBuff1(uchar *p)
{
	uint i=0,j=528,k;
	CSFLASH_ON;
	SPDR = 0X84;
	while(!(SPSR & _BV(SPIF)))
	;
	i = SPSR;
	for(k=0;k<2;k++)
	{
		SPDR = 0;
		while(!(SPSR & _BV(SPIF)))
		;
		i = SPSR;
	}
	for(k=0;k<j;k++)
	{
		SPDR = *(p+k);
		while(!(SPSR & _BV(SPIF)))
		;
		i = SPSR;
	}
	CSFLASH_OFF;
	i = SPSR;

}

void ReadBuff1(uchar *p)
{
	uint i=0,j=528,k;
	CSFLASH_ON;
	SPDR = 0XD4;
	while(!(SPSR & _BV(SPIF)))
	;
	i = SPSR;
	for(k=0;k<2;k++)
	{
		SPDR = 0;
		while(!(SPSR & _BV(SPIF)))
		;
		i = SPSR;
	}
	for(k=0;k<j;k++)
	{
		SPDR =0;
		while(!(SPSR & _BV(SPIF)))
		;
		i = SPSR;
		*(p+k) = SPDR;
	}
	CSFLASH_OFF;
	i = SPSR;

}*/

⌨️ 快捷键说明

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