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

📄 flash.c

📁 Avr Atmeg128汽车行驶记录仪 带有USB驱动 c语言
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "flash.h"
#include "fm1808.h"
#include "comsub.h"
#include "common.h"

void Flash_Save(void)
{uchar *p1,*p2;
 uint i;
 FM_CS;
 p2=D360_Buf2;
 i=flash_page_index;
 StorePage(i,p2,528);
 flash_page_index++;
 if(flash_page_index>=1100)
   flash_page_index=0;
 d360_save_flag2=NOOP;

}

//读取2天内行驶累计里程
ulong Get_2day_M(void)
{ulong t=0,lc=0; 
 uchar *p1,*p2,*p3;
 uchar i,j,k;
 uint i1,i2;
	FM_CS;
	p1=com1subbuf+3;
 for (i=0; i<3; i++)
    {
        itime[i] = timeb2h(SYS_Time[i]);
		*p1=SYS_Time[i];
		p1++;
    }
	itime[3]=0;
	itime[4]=0;
    timepastforint();
    itimelen = itimelen-1440;
	locatetime();
	lc=0;
	
	i=d360_index_buf1;
	if(!((i==0)&&(d360_save_flag2==NOOP)))
       {if((i==0)&&(d360_save_flag2==NEEDSAVE))
	  		{i=20;	
	   		 p1=D360_Buf2;
	        }
        else  
	        {
			 p1=D360_Buf1;
	        }
		j= TRUE;
		p2=p1;
		while((j == TRUE)&&(i>0))
		  	{p1 = p2+(i-1) * 25 + 3;
			 if(comtime(p1)==TRUE)
			 	{lc=lc+*(p1+6);
				 i--;
				 }
			 else
			   j = FALSE;
			}
        }
	
	i1=flash_page_index;
	if(i1==0)
		{ 	p1=flash_buf;
		  	LoadPage(i1,p1,528);
			if(*(p1+500)==VALID)
			  {j=TRUE;
			   i1=1100;
			  }	
			else
			  j=FALSE;		 
		 }
	i2=1100;
	while((j==TRUE)&&(i1>0)&&(i2>0))
		{ 	p1=flash_buf;
		  	LoadPage(i1-1,p1,528);
			if(*(p1+500)==VALID)
			  { k=20;
			    while((j == TRUE)&&(k>0))
		  			{	p1 = flash_buf+(k-1) * 25 + 3;
			 		 	if(comtime(p1)==TRUE)
			 			   { lc=lc+*(p1+6);
				 			 k--;
				 			}
			 			else
			   				j = FALSE;
					}
			  }	
			else
			  j=FALSE;	
			i2--;
			i1--;
			if(i1==0)
				i1=1100;	 
         }
   t=lc;
   p1=com1subbuf;
   *p1=lc/65536;
   lc=lc%65536;
   p1++;
   *p1=lc/256;
   p1++;
   *p1=lc%256;
   return t;
	  
}

//读取2天内行驶速度
void Get_2day_SPEED(void)
{ulong t=0,lc,k; 
 uchar *p1,*p2,*p3,i2;
 uchar i,j,temp=0x55;
 uint i1,k1;
 send_data1();
 Putc(0x55);
 Putc(0x75);
 temp^=0x75;
 Putc(0x09);
 temp^=0x09;
 for (i=0; i<5; i++)
    {
        itime[i] = timeb2h(SYS_Time[i]);
    }
    timepastforint();
    t = itimelen;
 for (i=0; i<3; i++)
    {
        itime[i] = timeb2h(SYS_Time[i]);
    }
	itime[3]=0;
	itime[4]=0;
    timepastforint();
    itimelen = itimelen-1440;
	k = t - itimelen;
	Putc((uchar)(k/256));
    temp^=(uchar)(k/256);
	Putc((uchar)(k%256));
    temp^=(uchar)(k%256);
	Putc(0);
    temp^=0;
	locatetime();
	itimelen = t - 1;
	lc=itimelen;
	FM_CS;
	p2=com1subbuf;
	for(i=0;i<5;i++)
		{*p2=time[i];
		 Putc(time[i]);
    	 temp^=time[i];
		  p2++;
		}
	i=d360_index_buf1;

	if(!((i==0)&&(d360_save_flag2==NOOP)))
       {if((i==0)&&(d360_save_flag2==NEEDSAVE))
	  		{i=20;	
	   		 p1=D360_Buf2;
	        }
        else  
	        {
			 p1=D360_Buf1;
	        }
		j= TRUE;
		p3=p1;
		while((j == TRUE)&&(i>0)&&(k>0))
		  	{p1 = p3+(i-1) * 25 + 3;
			 for (i2=0; i2<5; i2++)
    			{
        			itime[i2] = timeb2h(*p1);
					p1++;
    			}
    		 timepastforint();
			 if(lc==itimelen)
			 	{ *p2=*p1;
				  Putc(*p1);
    			  temp^=*p1;
				  p2++;
				  lc--;
				  k--;
				 }
			 else
			   {while(((lc-itimelen)>0)&&(k>0))
			     {*p2=0;
				   Putc(0);
    			  temp^=0;
				   p2++;
				   lc--;
				   k--;
				 }
				if(k==0)
				  j=FALSE;
				else
				  {*p2=*p1;
				    Putc(*p1);
    			    temp^=*p1;
				   p2++;
				   lc--;
				   k--;
				  }
			   }
             i--;
			}
        }
	i1=flash_page_index;
	if(j==TRUE)
	{if(i1==0)
		{ 	p1=flash_buf;
		  	LoadPage(i1,p1,528);
			if(*(p1+500)==VALID)
			  {j=TRUE;
			   i1=1100;
			  }	
			else
			  j=FALSE;		 
		 }
	while((j==TRUE)&&(i1>0)&&(k>0))
		{ 	p1=flash_buf;
		  	LoadPage((i1 - 1),p1,528);
			if(*(p1+500)==VALID)
			  { k1=20;
			    while((j == TRUE)&&(k1>0)&&(k>0))
		  			{	p1 =flash_buf+ (k1-1) * 25 + 3;
			 		 	for (i2=0; i2<5; i2++)
    						{
        						itime[i2] = timeb2h(*p1);
								p1++;
    						}
    		 			timepastforint();
			 			if(lc==itimelen)
			 				{ *p2=*p1;
								 Putc(*p1);
    			                 temp^=*p1;
				  				p2++;
				  				lc--;
				  				k--;
				 			}
			 			else
			   				{while(((lc-itimelen)>0)&&(k>0))
			     				{	*p2=0;
								     Putc(0);
    			  					temp^=0;
				   					p2++;
				   					lc--;
				   					k--;
				 				}
							if(k==0)
				  				j=FALSE;
							else
				  				{	*p2=*p1;
									 Putc(*p1);
    			  					temp^=*p1;
				   					p2++;
				   					lc--;
				   					k--;
				  				}
			   				}
             			k1--;
					  }
				    }
				  else
				   j=FALSE; 
				  i1--;
				  if(i1==0)
				  	i1=1100;
			     }	
			  
     } 
    Putc(temp);
    			 
}

//读取360h内行驶速度
void Get_360h_SPEED(void)
{ulong t=0,lc,k; 
 uchar *p1,*p2,*p3,i2;
 uchar i,j,temp=0x55;
 uint i1,k1;
 send_data1();
 Putc(0x55);
 Putc(0x75);
 temp^=0x75;
 Putc(0x05);
 temp^=0x05;
 for (i=0; i<5; i++)
    {
        itime[i] = timeb2h(SYS_Time[i]);
    }
    timepastforint();
    t = itimelen;
    itimelen = itimelen-21600;
	k = 21600;
	Putc((uchar)(k/256));
    temp^=(uchar)(k/256);
	Putc((uchar)(k%256));
    temp^=(uchar)(k%256);
	Putc(0);
    temp^=0;
	locatetime();
	itimelen = t - 1;
	lc=itimelen;
	FM_CS;
	p2=com1subbuf;
	for(i=0;i<5;i++)
		{*p2=time[i];
		 Putc(time[i]);
    	 temp^=time[i];
		  p2++;
		}
	i=d360_index_buf1;

	if(!((i==0)&&(d360_save_flag2==NOOP)))
       {if((i==0)&&(d360_save_flag2==NEEDSAVE))
	  		{i=20;	
	   		 p1=D360_Buf2;
	        }
        else  
	        {
			 p1=D360_Buf1;
	        }
		j= TRUE;
		p3=p1;
		while((j == TRUE)&&(i>0)&&(k>0))
		  	{p1 = p3+(i-1) * 25 + 3;
			 for (i2=0; i2<5; i2++)
    			{
        			itime[i2] = timeb2h(*p1);
					p1++;
    			}
    		 timepastforint();
			 if(lc==itimelen)
			 	{ *p2=*p1;
				  Putc(*p1);
    			  temp^=*p1;
				  p2++;
				  lc--;
				  k--;
				 }
			 else
			   {while(((lc-itimelen)>0)&&(k>0))
			     {*p2=0;
				   Putc(0);
    			  temp^=0;
				   p2++;
				   lc--;
				   k--;
				 }
				if(k==0)
				  j=FALSE;
				else
				  {*p2=*p1;
				    Putc(*p1);
    			    temp^=*p1;
				   p2++;
				   lc--;
				   k--;
				  }
			   }
             i--;
			}
        }
	i1=flash_page_index;
	if(j==TRUE)
	{if(i1==0)
		{ 	p1=flash_buf;
		  	LoadPage(i1,p1,528);
			if(*(p1+500)==VALID)
			  {j=TRUE;
			   i1=1100;
			  }	
			else
			  j=FALSE;		 
		 }
	while((j==TRUE)&&(i1>0)&&(k>0))
		{ 	p1=flash_buf;
		  	LoadPage((i1 - 1),p1,528);
			if(*(p1+500)==VALID)
			  { k1=20;
			    while((j == TRUE)&&(k1>0)&&(k>0))
		  			{	p1 =flash_buf+ (k1-1) * 25 + 3;
			 		 	for (i2=0; i2<5; i2++)
    						{
        						itime[i2] = timeb2h(*p1);
								p1++;
    						}
    		 			timepastforint();
			 			if(lc==itimelen)
			 				{ *p2=*p1;
								 Putc(*p1);
    			                 temp^=*p1;
				  				p2++;
				  				lc--;
				  				k--;
				 			}
			 			else
			   				{while(((lc-itimelen)>0)&&(k>0))
			     				{	*p2=0;
								     Putc(0);
    			  					temp^=0;
				   					p2++;
				   					lc--;
				   					k--;
				 				}
							if(k==0)
				  				j=FALSE;
							else
				  				{	*p2=*p1;
									 Putc(*p1);
    			  					temp^=*p1;
				   					p2++;
				   					lc--;
				   					k--;
				  				}
			   				}
             			k1--;
					  }
				    }
				  else
				   j=FALSE; 
				  i1--;
				  if(i1==0)
				  	i1=1100;
			     }	
			  
     } 
    Putc(temp);
    			 
}





//读取360H内行驶累计里程
ulong Get_360Hday_M(void)
{ulong t=0,lc=0; 
 uchar *p1,*p2,*p3;
 uchar i,j,k;
 uint i1,i2;
 FM_CS;
 p1=com1subbuf+11;
 for (i=0; i<5; i++)
    {
        itime[i] = timeb2h(SYS_Time[i]);
		*p1=SYS_Time[i];
		p1++;
    }
    timepastforint();
    itimelen = itimelen-21600;
	locatetime();
	lc=0;

	i=d360_index_buf1;
	if(!((i==0)&&(d360_save_flag2==NOOP)))
       {if((i==0)&&(d360_save_flag2==NEEDSAVE))
	  		{i=20;	
	   		 p1=D360_Buf2;
	        }
        else  
	        {
			 p1=D360_Buf1;
	        }
		j= TRUE;
		p2=p1;
		while((j == TRUE)&&(i>0))
		  	{p1 = p2+(i-1) * 25 + 3;
			 if(comtime(p1)==TRUE)
			 	{lc=lc+*(p1+6);
				 i--;
				 }
			 else
			   j = FALSE;
			}
        }
	
	i1=flash_page_index;
	if(i1==0)
		{ 	p1=flash_buf;
		  	LoadPage(i1,p1,528);
			if(*(p1+500)==VALID)
			  {j=TRUE;
			   i1=1100;
			  }	
			else
			  j=FALSE;		 
		 }
	i2=1100;
	while((j==TRUE)&&(i1>0)&&(i2>0))
		{ 	p1=flash_buf;
		  	LoadPage(i1-1,p1,528);
			if(*(p1+500)==VALID)
			  { k=20;
			    while((j == TRUE)&&(k>0))
		  			{	p1 =flash_buf+ (k-1) * 25 + 3;
			 		 	if(comtime(p1)==TRUE)
			 			   { lc=lc+*(p1+6);
				 			 k--;
				 			}
			 			else
			   				j = FALSE;
					}
			  }	
			else
			  j=FALSE;	
			i2--;
			i1--;
			if(i1==0)
				i1=1100;	 
         }
   t=lc;
   p1=com1subbuf+8;
   *p1=lc/65536;
   lc=lc%65536;
   p1++;
   *p1=lc/256;
   p1++;
   *p1=lc%256;
   return t;
	  
}


//取得同一驾驶员所有的疲劳驾驶信息
uchar Get_pilao_2day(void)
{ulong t=0;
 uchar *p1,*p2,*p3;
 uchar i,j,k=0,temp=0x55;

//cli();	
			p2=com1subbuf+1;
			*p2=0x55;
			 p2++;
			 *p2=0x7a;
			 temp^=*p2;
			 p2++;
			 *p2=0x11;
			 temp^=*p2;
			 p2++;
			 *p2=0;
			 temp^=*p2;
			 p2++;
			 
 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))
	   { *p2=k*10;
		 temp^=*p2;
		 p2++;
		 *p2=0;
		 temp^=*p2;
		 p2++;
		 *p2=temp;
		 p2=com1subbuf;
		 *p2=k;
	     return k;
	    }
    else
	   { p2++;
	     *p2=0;
		 temp^=*p2;
		 p2++;
	     if(condrv_index_buf==0)
		  { //p2=com1subbuf+7;
		    for(i=0;i<16;i++)
		     {p1=ConD_Buf+i*14+1;
			  for (j=0; j<5; j++)
    			{
        			itime[j] = timeb2h(*(p1+3+j));
    			}
              timepastforint();
			  if((*p1==*p3)&&(*(p1+1)==*(p3+1))&&(*(p1+2)==*(p3+2))&&(itimelen>=t))
			    {p1=p1+3;
				 for(j=0;j<10;j++)
			  	    {*p2=*p1;
					  temp^=*p2;
					  p2++;
					  p1++;
				     }
				  k++;
				}
			  }
             p1=p2;
			 p2=com1subbuf+5;
			 *p2=k*10;
			 temp^=*p2;
			 p2=p1;
			 *p2=temp;
			 p2=com1subbuf;
			 *p2=k;
			 return k;
    	   }
		 else
		  { //p2=com1subbuf+7;
		    for(i=condrv_index_buf;i<16;i++)
		     {p1=ConD_Buf+i*14+4;
			  for (j=0; j<5; j++)
    			{
        			itime[j] = timeb2h(*p1);
					p1++;
    			}
              timepastforint();
			  p1=ConD_Buf+i*14+1;
			  if((*p1==*p3)&&(*(p1+1)==*(p3+1))&&(*(p1+2)==*(p3+2))&&(*(p1-1)==VALID)&&(itimelen>=t))
			    {p1=p1+3;
				 for(j=0;j<10;j++)
			  	    {*p2=*p1;
					 temp^=*p2;
					  p2++;
					  p1++;
				     }
				  k++;
				}
			  }
             for(i=0;i<condrv_index_buf;i++)
		     {p1=ConD_Buf+i*14+4;
			  for (j=0; j<5; j++)
    			{
        			itime[j] = timeb2h(*p1);
					p1++;
    			}
              timepastforint();
			  p1=ConD_Buf+i*14+1;
			  if((*p1==*p3)&&(*(p1+1)==*(p3+1))&&(*(p1+2)==*(p3+2))&&(*(p1-1)==VALID)&&(itimelen>=t))
			    {p1=p1+3;
				 for(j=0;j<10;j++)
			  	    {*p2=*p1;
					 temp^=*p2;
					  p2++;
					  p1++;
				     }
				  k++;
				}
			  }
			p1=p2;
			 p2=com1subbuf+5;
			 *p2=k*10;
			 temp^=*p2;
			 p2=p1;
			 *p2=temp;
			 p2=com1subbuf;
			 *p2=k;
			 return k;
		   }  
	   }
}

//取得同一驾驶员所有的疲劳驾驶信息

⌨️ 快捷键说明

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