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

📄 main.c

📁 基于SJA1000的CAN开发程序
💻 C
📖 第 1 页 / 共 2 页
字号:
				    
				 EnterNext();
				 break;
           case  0x03:
		         BandRateBuf=Tempdata;
				 if(Tempdata>12) Error_disp(NO_BANDRATE_SIZE);
 				 else{
				   if(!BCAN_ENTER_RETMODEL())
				   {
					 BCAN_SET_BANDRATE(Tempdata);
					 BCAN_QUIT_RETMODEL();
				   }
				   DispBuf[2]=1;
                   DispBuf[3]=0;DispBuf[4]=0;
                   FlightLed3=1;
                   FlightLed4=0;ClearLed4=0;
				 }
				 break;
		   default:
		         break;
		}
	 }
	 if(DispBuf[1]==0x0b)
	 {
       if(0<DispBuf[2])
	   {
         SetSystemBuf[DispBuf[2]-1]=Tempdata; 
		 
    	 if(DispBuf[2]==0x0a)
         { 
		   DispBuf[2]=1;
           DispBuf[3]=0;DispBuf[4]=0;
           FlightLed3=1;
           FlightLed4=0;ClearLed4=0; 
		 }
		 else  EnterNext(); 
	   }
	 }
    if(DispBuf[1]==0x0c)
	{
	  switch(DispBuf[2])
	  {
		case 1:
             EditMsSendCount =Tempdata; 
			 EditMsSendSave  =Tempdata; 
			 DispBuf[1]=0x05;
			 DispBuf[2]=0x0d;
			 FunckeyCount++;
			 ClearDispAttr();
			 MoveFlag=0;
 			 break;
		default:
			break;
	  }
	}
  }
}

//按确认键后进入下一小项处理
void      EnterNext(void)                     //按确认键后进入下一小项处理
{
   DispBuf[3]=0;DispBuf[4]=0;
   FlightLed3=1;
   FlightLed4=0;ClearLed4=0;
   MoveFlag=0;
   DispBuf[2]++;
}

//发送键处理
void      CanSendKey(void)						//发送键
{
  if(!FunckeyFlag)
  { BCAN_DATA_WRITE(SetSystemBuf);				//将编辑的数据发送到can总线
    BCAN_CMD_PRG(TR_CMD);
  }
}

//
void  InitCPU(void)
{
 EA         =1;
 IT0        =1;
 EX0        =1;
 PX0        =1; 
 InitUart();        //初始化串口 
}                                             

////
uchar  Config_SJA(void)
{ 
  uchar  data   status=0;
  Delay_50us(100) ;
  TimeOut_Start(20);
  BandRateBuf = ByteRate_1000k;
  BCAN_ENTER_RETMODEL();
  if(BCAN_CREATE_COMMUNATION())//
    {
    status = CAN_INTERFACE_ERR;
    return(status);
  }
  if(BCAN_SET_BANDRATE(BandRateBuf))//初始化系统默认值波特率100kbps
   {
    status = CAN_INITBTR_ERR ;
    return(status);
  }
  if(BCAN_SET_OBJECT(0xaa,0x00))
  {
    status =CAN_INITOBJECT_ERR;
    return(status);
  }
  
  if(BCAN_SET_OUTCLK(0xaa,0x48))
  {
    status =CAN_INITOUTCTL_ERR;
    return(status);
  }
  if(BCAN_QUIT_RETMODEL())
  {
    status = CAN_QUITRESET_ERR;
    return(status);
  }
  
  SJA_BCANAdr=REG_CONTROL;
  *SJA_BCANAdr=0X1E;
  
  return  status; 
}

//
void   CanRcv_Prg(void)
{
  uchar  data buf[10],status;
   if(BCAN_DATA_RECEIVE(buf))					//接收数据
   {status=0xe9;
    Error_disp(status);
   }

 } 

//测试处理函数
void   TestDispPrg(void)                       //测试处理函数
{
   uchar i;
   DispFlag=0;
   DispFlag|=0x0f;
   for(i=1;i<5;i++) DispBuf[i]=0x08;        
      
}
//消隐处理函数
void   ClearDispPrg(uchar *databuf)						//消隐处理函数
{
   ClearDispAttr();
   memcpy(&DispBuf[1],&databuf[1],4);
   DispFlag=0;
  switch(databuf[0])
   {  
    case   0:
	       DispFlag|=0x10;
           break;
	case   1:
	       DispFlag|=0x20;
           break;
    case   2:
	       DispFlag|=0x40;
           break;
	case   3:
	       DispFlag|=0x80;
           break;
	case   4:
	       DispFlag|=0x30;
           break;
	case   5:
	       DispFlag|=0x50;
           break;
	case   6:
	       DispFlag|=0x90;
           break;
	case   7:
	       DispFlag|=0x60;
           break;
	case   8:
	       DispFlag|=0xa0;
           break;
	case   9:
	       DispFlag|=0xc0;
           break;
	case   10:
	       DispFlag|=0x70;
           break;
	case   11:
	       DispFlag|=0xb0;
           break;
	case   12:
	       DispFlag|=0xe0;
           break;
	case   13:
	       DispFlag|=0xd0;
           break;
	case   14:
	       DispFlag|=0xf0;
           break;
    default:
	       break;
   }
}

//
void   FlightDispPrg(uchar *databuf)  					//闪烁处理函数	
{  
   ClearDispAttr();
   memcpy(&DispBuf[1],&databuf[1],4);
   DispFlag=0;
  switch(databuf[0])
   {  
    case   0:
	       DispFlag|=0x01;
           break;
	case   1:
	       DispFlag|=0x02;
           break;
    case   2:
	       DispFlag|=0x04;
           break;
	case   3:
	       DispFlag|=0x08;
           break;
	case   4:
	       DispFlag|=0x03;
           break;
	case   5:
	       DispFlag|=0x05;
           break;
	case   6:
	       DispFlag|=0x09;
           break;
	case   7:
	       DispFlag|=0x06;
           break;
	case   8:
	       DispFlag|=0x0a;
           break;
	case   9:
	       DispFlag|=0x0c;
           break;
	case   10:
	       DispFlag|=0x07;
           break;
	case   11:
	       DispFlag|=0x0b;
           break;
	case   12:
	       DispFlag|=0x0e;
           break;
	case   13:
	       DispFlag|=0x0d;
           break;
	case   14:
	       DispFlag|=0x0f;
           break;
    default:
	       break;
   }
}

//
void   LiftCrcDispPrg(uchar *databuf)           //左循环显示处理
{
   memcpy(&DispBuf[1],&databuf[1],4);
   LiftCrcDispFlag=1;RightCrcDispFlag=0;
}
void   RightCrcDispPrg(uchar *databuf)          //右循环显示处理
{
  memcpy(&DispBuf[1],&databuf[1],4);
  LiftCrcDispFlag=0;RightCrcDispFlag=1;
}

//
void   CanSend_Prg(void)         				//can发送数据
{
}
void   CanErr_Prg(void) 	                    //发现错误后处理
{
  Error_disp(CAN_BUS_ERR); 
  Config_SJA();									//
}
void   CanDtOver_Prg(void)                      //超载处理
{
//  BCAN_CMD_PRG(COS_CMD);
}
void   CanWui_Prg(void)                     	//唤醒中断处理
{
  
}

//
void   UartRcv_Prg(void)						//串口接收到数据处理
{
    BCAN_DATA_WRITE(RcvBuf);				    //将编辑的数据发送到can总线
    BCAN_CMD_PRG(TR_CMD);
}

//自动发送
void   AutoSendDataToCanBus(void)
{
 /* uchar i;
 if((DispBuf[1]==0x05)&&(DispBuf[2]==0x0d))
 {
	
	if(EditMsSendCount ==0){
		EditMsSendCount	= EditMsSendSave;
		SendDataCount++;
		SetSystemBuf[0]++;
		SetSystemBuf[1]=0x08;
        for(i=2;i<10;i++)
		  	SetSystemBuf[i]=SendDataCount;
        BCAN_DATA_WRITE(SetSystemBuf);				//将编辑的数据发送到can总线
        BCAN_CMD_PRG(TR_CMD); 
		DispBuf[3]=SendDataCount>>4;
		DispBuf[4]=SendDataCount&0x0f;
	}
	else{
     EditMsSendCount--;
	}
 }*/
}

⌨️ 快捷键说明

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