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

📄 800.c

📁 市面上的车载GPS定位器源代码
💻 C
📖 第 1 页 / 共 2 页
字号:

void  Send_Alarm(void)
       {
       	  uchar i;
       	  
           Send_AA(AT_CMGS_,10);
   	       delay_us(4000); 
   	       for(i=0;i<11;i++)
   	          {
   	            Send_one_Byte(byte_read(0x2C00+i));
   	            delay_us(4000);  
               }
             delay_us(4000);
             Send_AA(GPL,23);     
             
             delay_ms(12000);
             
             Send_AA(AT_CMGS_,10);
             delay_us(4000);
   	       for(i=0;i<11;i++)
   	          {
   	            Send_one_Byte(byte_read(0x2E00+i));  
   	            delay_us(4000);
               }
             delay_us(4000);
             Send_AA(GPL,23); 
             delay_ms(5);   
                
   	    } 	    
/************************************************************
短消息命令判断处理
************************************************************/
void  AT_IO(void)
      {
      	      uchar i;
      	     if(memcmp(CMT,buffer,6)==0)            //短消息来电提示
      	       {
      	       	 delay_ms(1000);
      	  	     Send_AA(AT_CMGR_,11);              //读取短消息
      	  	     delay_us(4000);
      	  	     Send_one_Byte(buffer[7]);
      	  	     delay_us(4000);
      	  	     Send_one_Byte(0x0D);
      	  	     delay_us(4000);
      	  	     Send_one_Byte(0x0A);
      	  	     initial_UART(); 	
      	  //	     OFF_1=0;
  	  	        }
  	  	        
  	  	else if(memcmp(AT_READY,buffer,10)==0)      //AT+READY
		       {
		       	   if(Send_num==1)
				     {
				    
				      delay_ms(7000);
			          Send_Alarm();
				      initial_UART();
					    Send_num=0;
				     }
				 else if(Send_num==2)
				     {
				       LED=0;
				      delay_ms(7000);
			          Send_E001();
				      initial_UART();
					    Send_num=0;
				     }
			     else if(Send_num==3)
				     {
				       LED=0;
					  delay_ms(7000);
					  Send_D001();
					  initial_UART();
					  Send_num=0;
				     }
			
				//	 uart0_init(3);
			   }
			   
		else if(memcmp(RING,buffer,6)==0)           //来电提示
		       {			
			      Send_AA(AT_QCCAV,10);             //接听
				  initial_UART();
			    }	
			    			   	        
  	    else if(memcmp(CMGR_,buffer,8)==0)	        //+CMGR:
  	           {
  	           	  i=Lookup(buffer,5);               //
  	              if(memcmp(SN,(buffer+i),6)==0)    //比较密码   
  	                 {               
  	                   if(memcmp(AON,(buffer+i+6),3)==0)       //比较指令 AON   开机指令
  	                 	 {
  	                       A_IO=1;  
  	                       delay_ms(5000);	
  	                       Send_CMGS(buffer+18);
  	                       delay_us(4000);
  	                       Send_AA(AON_OK,14);
                          } 
                     else if(memcmp(BON,(buffer+i+6),3)==0)    //比较指令  BON   开机指令
                          {
                          	B_IO=1;
                          	delay_ms(5000);	
  	                        Send_CMGS(buffer+18);
  	                        delay_us(4000);
  	                        Send_AA(BON_OK,14);
                      	   }             	    
                      else if(memcmp(AOFF,(buffer+i+6),4)==0)  //比较指令 AOFF  关机指令
                          { 
                           A_IO=0;
                     	   delay_ms(5000);
                     	   Send_CMGS(buffer+18);
                     	   delay_us(4000);
                     	   Send_AA(AOFF_OK,15);   
                 	      }  	      
                 	  else if(memcmp(BOFF,(buffer+i+6),4)==0)  //比较指令  BOFF 关机指令
                         { 
                           B_IO=0;
                     	   delay_ms(5000);
                     	   Send_CMGS(buffer+18);
                     	   delay_us(4000);
                     	   Send_AA(BOFF_OK,15);   
                 	      }   
                 	  else if(memcmp(OFF,(buffer+i+6),3)==0)  //比较指令  OFF 关机指令 
                 	     {
                 	     	LED=1;
                 	       delay_ms(5000);
                     	   Send_CMGS(buffer+18);
                     	   delay_us(4000);
                     	   Send_AA(OFF_OK,14); 
                 	     }      
                 	  else if(buffer[i+7]==0x53)              //比较指令 S = 密码改写
                 	      {
                 	       	 if(Write_SN((buffer+i+9),SN)==1)   //
                 	       	   {
                 	       	   	  delay_ms(5000);
                     	          Send_CMGS(buffer+18);
                     	          delay_us(4000);
                     	          Send_AA(SN_OK,13);  
                     //	          OFF_2=0; 
             	       	   	    }
             	       	   	 else
             	       	   	    {
             	       	   	      delay_ms(5000);
                     	          Send_CMGS(buffer+18);
                     	          delay_us(4000);
                     	          Send_AA(SN_OK,13);  
                     //	          OFF_2=0; 	
         	       	   	    	}    
             	    //   	   	      OFF_2=0;
             	       	   }
             	      else if(buffer[i+6]==0x41)               //比较指令 A   设置手机号码
             	            {
             	              if(Write_ATT(buffer+i+7,0x2C00)==1)
             	                {
             	                  delay_ms(5000);
                     	          Send_CMGS(buffer+18);
                     	          delay_us(4000);
                     	          Send_AA(ATT_OK,15);   	
         	                 	}
         	                 else
         	                    {
         	                      delay_ms(5000);
                     	          Send_CMGS(buffer+18);
                     	          delay_us(4000);
                     	          Send_AA(ATT_ERROR,17);   		
     	                    	}		
         	            	}
         	         else if(buffer[i+6]==0x42)                 //比较指令 B   设置手机号码
         	                {
         	                  if(Write_ATT(buffer+i+7,0x2E00)==1)
             	                {
             	                  delay_ms(5000);
                     	          Send_CMGS(buffer+18);
                     	          delay_us(4000);
                     	          Send_AA(ATT_OK,15);   	
         	                 	}
         	                 else
         	                    {
         	                      delay_ms(5000);
                     	          Send_CMGS(buffer+18);
                     	          delay_us(4000);
                     	          Send_AA(ATT_ERROR,17);   		
     	                    	}			
     	                	 }    	    
                	  }
             else  	    
                 {
                     delay_ms(5000);
                     Send_CMGS(buffer+18);
                     delay_us(4000);
                     Send_AA(SN_ERROR,16);  
                 }	  
                  delay_ms(9000);	 		
  	              Send_AA(AT_SMSD,11);
  	        //    OFF_1=1;
  	              initial_UART();
       	      }     
       	      
  	   } 
/**********************************************************************
读取短消息
***********************************************************************/
/*
void SMS_read(void)
      {
      	 Send_AA(AT_CMGR_,11);              //读取短消息
      	 Send_one_Byte(buffer[7]);
      	 Send_one_Byte(0x0D);
      	 Send_one_Byte(0x0A);
  	  }
  	  */
/**********************************************************************
判断第几条短信
***********************************************************************/
/*
void SMS_num(void)
      {
      	uchar i;
      	for(i=7;
      while(buffer[i]!=0x0D);
  	}
  	*/   	     
/**********************************************************************
***********************************************************************/
//void AT_T(void)
//        {
        	
//   	}  	   
/*************************************************************
发送短信
dat: 目的地号码指针地址 
*************************************************************/
void Send_CMGS(uchar *dat)
     {
     	Send_AA(AT_CMGS_,10);
     	Send_AA(dat,11);
 	  }  
/*************************************************************
查找字符串,号
**************************************************************/
uchar Lookup(uchar *dat,uchar len)
     {
        uchar i,j;
        i=0;
        j=0;
        do
     	 {
     	   if(*(dat+i)==0x2C)
     	      {
     	        j+=1;	
 	          }
 	          i++;
 	 	  }
 	  while(j!=len);
 	  return(i); 	  
 	}
/***************************************************************

****************************************************************/ 	
/* 打开 ISP,IAP 功能 */
void ISP_IAP_enable(void)
{
	EA	=	0;	/* 关中断 */
	ISP_CONTR	=	ISP_CONTR & 0x18;       /* 0001,1000 */
	ISP_CONTR	=	ISP_CONTR | WAIT_TIME;
	ISP_CONTR	=	ISP_CONTR | 0x80;       /* 1000,0000 */
}

/**********************************************************
关闭 ISP,IAP 功能
************************************************************/
void ISP_IAP_disable(void)
{
	ISP_CONTR	=	ISP_CONTR & 0x7f;	/* 0111,1111 */
	ISP_TRIG	=	0x00;
	EA			=   1;                	/* 开中断 */
}

/***********************************************************
 字节读
***********************************************************/
uchar byte_read(uint byte_addr)
{
	ISP_ADDRH	=	(uchar)(byte_addr >> 8);
	ISP_ADDRL	=	(uchar)(byte_addr & 0x00ff);

	ISP_CMD		=	ISP_CMD	&	0xf8;        /* 1111,1000 */
	ISP_CMD		=	ISP_CMD	|	0x01;        /* 0000,0001 */

	ISP_IAP_enable();

	ISP_TRIG	=	0x46;
	ISP_TRIG	=	0xb9;
	_nop_();

	ISP_IAP_disable();
	return (ISP_DATA);
}

/* 扇区擦除 */
void sector_erase(uint sector_addr)
{
	uint get_sector_addr	=	0;
	get_sector_addr			=	(sector_addr & 0xfe00); /* 1111,1110,0000,0000; 取扇区地址 */
	ISP_ADDRH        		=	(uchar)(get_sector_addr >> 8);
	ISP_ADDRL		        =	0x00;

	ISP_CMD	=	ISP_CMD	&	0xf8;	/* 1111,1000 */
	ISP_CMD	=	ISP_CMD	|	0x03;	/* 0000,0011 */

	ISP_IAP_enable();
	ISP_TRIG	=	0x46;        /* 触发ISP_IAP命令 */
	ISP_TRIG	=	0xb9;        /* 触发ISP_IAP命令 */
	 _nop_();

	ISP_IAP_disable();
//	return OK;
}

/* 字节编程 */
void byte_program(uint byte_addr, uchar original_data)
{
	ISP_ADDRH	=	(uchar)(byte_addr >> 8);
	ISP_ADDRL	=	(uchar)(byte_addr & 0x00ff);

	ISP_CMD		=	ISP_CMD	&	0xf8;        /* 1111,1000 */
	ISP_CMD		=	ISP_CMD	|	0x02;		/* 0000,0010 */
	ISP_DATA	=	original_data;

	ISP_IAP_enable();
	ISP_TRIG	=	0x46;        /* 触发ISP_IAP命令 */
	ISP_TRIG	=	0xb9;        /* 触发ISP_IAP命令 */
	_nop_();

	ISP_IAP_disable();
//	return	OK;
} 
/***********************************************************
写密码
************************************************************/ 
bit Write_SN(uchar *dat,uchar *SN_)
{
	uchar i;
	bit num=1;

   	 sector_erase(0x2800);      //
   	 delay_ms(50);
   	for(i=0;i<6;i++)            //写入密码=》EEPROM
   	   {
   	   	byte_program((0x2800+i),*(dat+i));
   	   	delay_ms(50);
   	   }
   	for(i=0;i<6;i++)             //写入密码=》RAM
	   {
	   	*(SN_+i)=byte_read(0x2800+i);
	   	delay_ms(50);
   	   }
   	for(i=0;i<6;i++)
   	   {
   	   	 if(byte_read(0x2800+i)!=*(SN_+i))
   	   	   {
   	   	 	num=0;
   	 	   }
 	   } 
 	   if(num==0)
 	     {
 	       return(0); 
         }
      else
        return(1);       	   
 }
/*************************************************************
写电话号码入EEPROM
**************************************************************/ 
bit Write_ATT(uchar *dat,uint addr)
    {
     uchar i;
	 bit num=1;
   	 sector_erase(addr);       //
   	 delay_ms(50);
   	 for(i=0;i<11;i++)            //写入密码=》EEPROM
   	   {
   	   	byte_program((addr+i),*(dat+i));
   	   	delay_ms(50);
   	   }
   	 for(i=0;i<11;i++)
   	   {
   	   	 if(byte_read(addr+i)!=*(dat+i))
   	   	   {
   	   	 	 num=0;
   	 	   }
 	    } 
 	   if(num==0)
 	     {
 	       return(0); 
         }
      else
        return(1);       	
	}      
/***************************************************************
ADC0,ADC1
P1.0,P1.1  为开漏模式
****************************************************************/
/*
void ADC_inp(void)
     {
     	P1M0=0x03;
     	P1M1=0x03;
 	 }
/***************************************************************
P1.0,P1.1 为51标准模式
****************************************************************/ 	 
/*
void ADC_io(void)
     {
     	P1M0=0x00;
     	P1M1=0x00;
 	 }
/***************************************************************
****************************************************************/ 
/*
void ADC_read(uchar dat)
     {
        ADC_CONTR=ADC_CONTR|dat;    /*选举AD输入通道
        delay_ms(2); 	
        ADC_CONTR=ADC_CONTR|0x08;   /*起动AD转换器
         delay_us(100); 
        while((ADC_CONTR&0x10)==0);     
      //  delay_ms(10);
        ADC_CONTR=ADC_CONTR&0xE7;   
        delay_ms(600);
        ADCdata=ADC_DATA;
        Send_one_Byte(ADCdata);
	     initial_UART();
 	  }     */
/****************************************************************
*****************************************************************/ 	
  	 	 	  	  	    	     	  	  

⌨️ 快捷键说明

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