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

📄 main.c

📁 矿工定位系统单端
💻 C
📖 第 1 页 / 共 3 页
字号:
					else
		      {
						CALL_isr_T0() ;
		      };
					break;

      	case RECV_ADDR3:
   				if (c == 0x49)//Pos_ID[3])
		      {
						
					//ED_LED = ~RED_LED;
                       En485 = SEND;
						//Ir_En = SEND;
				
						SBUF = DLE ;
						RecvState = RECV_DATA_DLE_ETX;
						DataDleReceived = FALSE;
						Index = 0;
						Cmdok = FALSE;

						while( !TI );
						TI = FALSE;
						En485 = RECV;
			
						//Ir_En = RECV;
						START_T0(T_533_ms);
					}
					else
		      {
						CALL_isr_T0() ;
		      };
					break;

	  	case RECV_DATA_DLE_ETX:// Receive data,DEL,ETX  and answer DLE
				if (c == DLE)
				{
					if (!DataDleReceived)	//如果上一个不是DLE	   丢掉
		           {
			    	DataDleReceived = TRUE;
			        RecvState = RECV_DATA_DLE_ETX;
			        START_T0(T_533_ms);
			        break;
		           }
		          else					    //如果上一个是DLE
		           {
			    	 DataDleReceived = FALSE; //留下
		           };
				}
				else if (c == ETX)
				{
					if (DataDleReceived)  //如果是结束标记	  处理
		           {
	        	    DataDleReceived = FALSE;
						bcc = 0;
		            for (i = 0; i < Index; i++)
		            {
		        	   bcc ^= SerBuffer[i];
		            };

						if( bcc == 0)
 						{
							En485 = SEND;
							//Ir_En = SEND;
							Cmdok = TRUE;
							SBUF = DLE ;
							while( !TI );
							TI = FALSE;
							En485 = RECV;
							//Ir_En = RECV;
						}
						else
						{ 
							En485 = SEND;
							//Ir_En = SEND;
							Cmdok = FALSE;
							SBUF = NAK ;
							while( !TI );
							TI = FALSE;
                            En485 = RECV;
							//Ir_En = RECV;
						};
			      break;
					}
		      else
		        {
			    	DataDleReceived = FALSE;   //如果不是结束标记  留下
		        };
				};

			if (Index < SERBUFLEN)		    //将数据写入SerBuffer[]
		    {
		    	SerBuffer[Index++] = c;
		    };
		    RecvState = RECV_DATA_DLE_ETX;
		    START_T0(T_533_ms);
				break;

      case RECV_DLE: //Recieve answer from HOST
				if ( c == DLE)
				{
					En485 = SEND;

					//Ir_En = SEND;
					//Delay50us(2);
					for (i = 0; i < (3 + SerBuffer[2] +1); i++)  //send data
					{
						SBUF = SerBuffer[i];
			      while (!TI);
			      TI = FALSE;
			      if ( SerBuffer[i] == DLE )	   //send DLE two
			      {
			      	SBUF = DLE;
			        while (!TI);
			        TI = FALSE;
			      };
					};


					SBUF = DLE;		   //send END
					while (!TI);
			    TI = FALSE;

					SBUF = ETX;
					while (!TI);
					TI = FALSE;
					RecvState = RECV_DLE_OR_NAK ;
					START_T0(T_533_ms);
					En485 = RECV;
					//Ir_En = RECV;
				}
				else
				{
					CALL_isr_T0() ;
				};
				break;

      case RECV_DLE_OR_NAK: //Recieve answer from HOST
				if ( c == DLE)
				{
					SendOk = TRUE;
					SendReady = FALSE;
					RecvReady = TRUE;
					RecvState = RECV_STX;
				}
				else
				{
					SendOk = FALSE;
					SendReady = TRUE;
					RecvReady = FALSE;
					CALL_isr_T0() ;
				};
        En485 = RECV;
				//Ir_En = RECV;
				break;
	  	default:
				CALL_isr_T0() ;
				break;

		};//end of case
   };//end of if(RecvReady)
  };//end of if(RI)


  if ( TI && !RI )
  {
		TI = 0 ;
	 	if ( SendReady )
	 	{
			SendReady = FALSE ;

	    bcc = SerBuffer[0];   //计算BCC
	    for ( i = 1 ; i < SerBuffer[2]+3 ; i++ )
			{
		  	bcc = bcc ^ SerBuffer[i]  ;
        
			};
			SerBuffer[SerBuffer[2]+3] = bcc;

	    En485 = SEND;
			//Ir_En = SEND;
			//Delay50us(2);
			SBUF = STX ;             //发送起始位}
			RecvReady = TRUE ;
			RecvState = RECV_DLE ;   //准备接收应答
		//	GREEN_LED = ~GREEN_LED;
			while(!TI) ;
			TI = FALSE ;
			En485 = RECV;
			//Ir_En = RECV;
			START_T0(T_533_ms) ;	    //chao shi
	 	};
  };

}
//****************************************************************************
void  SetPosNum(unsigned char xdata *dat)
{
 //ByteWrite_Check (124,dat[0]); 
  Wr1307(20,dat[0]);
 ADDR=dat[0];
 num_suss=1;
}
/****************************************************************************
*              	cmd_execution();                                                             *
* Function:                                            *
*                                                                           *
* Input:                                                                    *
* Output:       -                                                           *
*                                                                           *
* Description:                                                              *
****************************************************************************/
void cmd_execution(void)
{   unsigned char len ,i;//, adr ;
	//unsigned int e;
    //unsigned char idata size , tt[2];

	//WatchDog();
	len = SerBuffer[2] ; 
	SerBuffer[2] = 0 ;
   link=1;
    switch ( SerBuffer[1] )
	{ 
        case 0x80:				  //Write time
               	SetTime(&SerBuffer[3]);
                time_set=1; 
				SerBuffer[1] = 0;
				SerBuffer[2] = 0;
				break;  
          case 0x81:				  //green LED
                //if ( SerBuffer[3] == 1) {LED_GREEN  = 1;}
			//	else if( SerBuffer[3] == 0) { LED_GREEN  = 0;};    
                //lage_car=((int)SerBuffer[3])*256+SerBuffer[4];
				///if(lage_car>999)lage_car=999;
                //small_car=((int)SerBuffer[5])*256+SerBuffer[6];
                 //if(small_car>999)small_car=999;
                for(i=0;i<10;i++)
                {
                   ledtem[i]= SerBuffer[3+i];
                }
				SerBuffer[1] = 0;
				SerBuffer[2] = 0;
				break;

	  case 0x82:				  //red RED
               // if ( SerBuffer[3] == 1) {LED_RED  = 1;}
			//	else if( SerBuffer[3] == 0) { LED_RED  = 0;};    

				SerBuffer[1] = 0;
				SerBuffer[2] = 0;
				break;


	  case 0x83:				  //Transfer Record
	  	//  recordint.chrX[1]=SerBuffer[4];
		//	 recordint.chrX[0]=SerBuffer[5];

	  	//	Status = TransferRecord(SerBuffer[3],recordint.intX);
		       if(Keyinput_ok)
			   {
			     Keyinput_ok=0;
				 for(i=0;i<5;i++)
                  SerBuffer[3+i]= input_pc[i];
				  if( in_outFlg )
				  {
				     SerBuffer[8]=0x88;//进入标志
				  }
				  else
				  {
				    SerBuffer[8]=0x99;
				  }
				  memcpy(&SerBuffer[9],psnr,4);//卡号
				      

				  mainstate=0;      //数据取走
			   }
			   else
			   { 
			      for(i=0;i<10;i++)
                  SerBuffer[3+i]=0;
				  if(ban)
				  { 
				      ban=0;
				     if(keyin==1)
					 {
				      SerBuffer[8]=0xaa;
					 }
					 if(keyin==2)
					 {
				      SerBuffer[8]=0xcc;
					 }
                    memcpy(&SerBuffer[9],psnr,4);//卡号
				  }
				 if(sta)
				 {  
				     SerBuffer[8]=0xbb;
					  sta=0;
				 }
				  
			   }
				SerBuffer[1] =0;// Status;
				SerBuffer[2] = 10;
				break;

	  case 0x85:				  //Config FeeRate
	  		
				SerBuffer[1] = 0;
				SerBuffer[2] = 0;
				break;

	  case 0x86:				  //return ocuppy or vacance
			
				SerBuffer[2] = 0;
				break;

	  case 0x87:				  //Set Meter Number
			/*	MeterNum.chrX[3] = SerBuffer[3]; 
				MeterNum.chrX[2] = SerBuffer[4]; 
				MeterNum.chrX[1] = SerBuffer[5]; 
				MeterNum.chrX[0] = SerBuffer[6]; */
				SetPosNum(&SerBuffer[3]); //add
	  			SerBuffer[1] = 0;
				SerBuffer[2] = 0;
				break;

	  default:
				SerBuffer[1] = 250;  //command error
				SerBuffer[2] = 0;
			    break;
	};  
                         
}
//*********************************************************************
void beep(unsigned char times)
{
   char i;
   if(times==1)
   { 
     outbyte=outbyte|0X10;
     SendStr_MAX7219(ms);
     Delay1ms(20);
     outbyte=outbyte&0XEF;
	 SendStr_MAX7219(ms);
	 return ;
   }
   for(i=0;i<times;i++)
   {
   outbyte=outbyte|0X10;
    SendStr_MAX7219(ms);
   Delay1ms(30);
     outbyte=outbyte&0XEF;
	SendStr_MAX7219(ms);
	
 Delay1ms(20);
   }
}
//***********************************************************8
unsigned char write_card(unsigned char *p)
{
     
   	   uchar pa[6],pkeys[12],rbuf[16];
       uchar status,i;

       status=PcdRequest(PICC_REQIDL);//PICC_REQALL);                                      //寻卡
         if(status!=MI_OK)
         {
             status=PcdRequest(PICC_REQIDL);//PICC_REQALL);
         }
         if(status==MI_OK)
         {   // printf("request ok\n ");  
		     if((status=PcdAnticoll(psnr))==MI_OK)                           //防冲撞
              {    if((status=PcdSelect(psnr))==MI_OK)                        //选定卡
                   {  
 				     
				      pa[0]=0xff;
				         pa[1]=0xff;
						  pa[2]=0xff;
						   pa[3]=0xff;
						    pa[4]=0xff;
							 pa[5]=0xff;
                   	if((status=ChangeCodeKey(pa,pkeys))==MI_OK)           //转换密钥格式
                        {    if((status=PcdAuthKey(pkeys))==MI_OK)            //传送密钥到RC500FIFO
                             {
                                 status=PcdAuthState(PICC_AUTHENT1A,3,psnr);   //验证密钥
								// printf("auth ok\n ");  
                             }
							 	 status=PcdRead(1,rbuf);  //读出第0块的内容
                               if(status==0)
		                       { // printf("read sector  0 ok \n");
    	                          //sprintf(ms,"1234567890");
 								  if(rbuf[0]==00)  //空卡
								  {
								    for(i=15;i>0;i--)
									{
									  p[i]=p[i-1];
									}
									p[0]=0x55;
								    PcdWrite(1,p);
								    PcdWrite(1,p);
								  }
                                  else                 //已经进入的卡
								  {
								    return 0;
								  }
                                   PcdRead(1,rbuf);  //读出第0块的内容
                                 if( memcmp(rbuf,p,12)==0)
								 { 
							          PcdHalt();
								    return 1;
								 }
								 else
								   return 0; 
                                  //SendStr_MAX7219(ms);
                                  // Delay100ms(5);
                                
                                   //printf("\n");
			                   }
                         }
						return 0; 
                    }
				      return 0; 
               }
			   return 0; 
          }
	    return 0; 
}
//***********************************************************8
unsigned char Read_card()
{
   	   uchar pa[6],pkeys[12],rbuf[16];
       uchar status,i;

       status=PcdRequest(PICC_REQIDL);//PICC_REQALL);                                      //寻卡
         if(status!=MI_OK)
         {
             status=PcdRequest(PICC_REQIDL);//PICC_REQALL);
         }
         if(status==MI_OK)

⌨️ 快捷键说明

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