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

📄 main.c

📁 sja1000的驱动开发包
💻 C
📖 第 1 页 / 共 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);
   }
  else
  {  
    if(BCAN_CMD_PRG(0x04))
      Error_disp(0xe8);
	
	if((buf[1]&0x10)!=0)
	{
      switch(buf[1]&0x0f){						//远程帧处理
	    case  0:								//请求发送命令字为0c1h的命令帧
		      buf[1]=(buf[1]&0xe0)|0x06;
  			  buf[2]=0xc1;
              BCAN_DATA_WRITE(buf);				//将编辑的数据发送到can总线
              BCAN_CMD_PRG(TR_CMD);
			  break;
		case  1:
		      buf[1]=(buf[1]&0xe0)|0x06;
  			  buf[2]=0xc2;
              BCAN_DATA_WRITE(buf);				//将编辑的数据发送到can总线
              BCAN_CMD_PRG(TR_CMD);
			  break;
		case  2:
		      buf[1]=(buf[1]&0xe0)|0x06;
  			  buf[2]=0xc3;
              BCAN_DATA_WRITE(buf);				//将编辑的数据发送到can总线
              BCAN_CMD_PRG(TR_CMD);
			  break;
        case  3:
              buf[1]=(buf[1]&0xe0)|0x06;
  			  buf[2]=0xc4;
              BCAN_DATA_WRITE(buf);				//将编辑的数据发送到can总线
              BCAN_CMD_PRG(TR_CMD);
			  break;	
		case  4:
		      buf[1]=(buf[1]&0xe0)|0x06;
  			  buf[2]=0xc5;
              BCAN_DATA_WRITE(buf);				//将编辑的数据发送到can总线
              BCAN_CMD_PRG(TR_CMD);
			  break;
		case  5:
		      buf[1]=(buf[1]&0xe0)|0x06;
  			  buf[2]=0xc6;
              BCAN_DATA_WRITE(buf);				//将编辑的数据发送到can总线
              BCAN_CMD_PRG(TR_CMD);
			  break;
		case  6:
		case  7:
		case  8:
		case  9:
		default:
		      break;
	  }
	}
	else
    switch(buf[2])
    {
	  case 0xc1:    							//直通显示
	       DrecDisplay(&buf[3]);
		   break;
	  case 0xc2:								//消隐命令
	       ClearDispPrg(&buf[3]);
		   break;
	  case 0xc3:    							//测试命令
	       TestDispPrg();
		   break;
	  case 0xc4:								//左循环命令
	       LiftCrcDispPrg(&buf[3]);
		   break;
	  case 0xc5:    							//右循环命令
	       RightCrcDispPrg(&buf[3]);
           break;
	  case 0xc6:								//闪烁
	       FlightDispPrg(&buf[3]);            
	       break;
	  case 0xc9:								//改变总线波特率命令
	  default:
	       break;
	}
  }
}

//
void   DrecDisplay(uchar *databuf)	//直通显示
{
   ClearDispAttr();
   memcpy(&DispBuf[1],&databuf[1],4);
   switch(databuf[0])
   {  
    case   0:
	       DispFlag|=0xe0;
           break;
	case   1:
	       DispFlag|=0xd0;
           break;
    case   2:
	       DispFlag|=0xb0;
           break;
	case   3:
	       DispFlag|=0x70;
           break;
	case   4:
	       DispFlag|=0xc0;
           break;
	case   5:
	       DispFlag|=0xa0;
           break;
	case   6:
	       DispFlag|=0x60;
           break;
	case   7:
	       DispFlag|=0x90;
           break;
	case   8:
	       DispFlag|=0x50;
           break;
	case   9:
	       DispFlag|=0x30;
           break;
	case   10:
	       DispFlag|=0x80;
           break;
	case   11:
	       DispFlag|=0x40;
           break;
	case   12:
	       DispFlag|=0x10;
           break;
	case   13:
	       DispFlag|=0x20;
           break;
	case   14:
	       DispFlag=0;
           break;
    default:
	       break;
   }

}

//测试处理函数
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 + -