📄 main.c
字号:
//发送键处理
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 + -