📄 main.c
字号:
FlightLed4=0;ClearLed4=0;
}
}
}
//按确认键后进入下一小项处理
void EnterNext(void)
{
unsigned char i;
FlightLed3=1;
FlightLed4=0;ClearLed4=0;
MoveFlag=0;
i=ReadSjaReg(REG_TxBuffer1+DispBuf[2]);
DispBuf[2]++;
DispBuf[3]=i>>4;
DispBuf[4]=i&0x0f;
}
//发送键处理
void CanSendKey(void) //发送键
{
if((ReadSjaReg(REG_CONTROL)&0x01)==0)
{
BCAN_CMD_PRG(TR_CMD);
}
else
{
Write_DispBuf(0,0x0E,0x12,0x0f,0x0d);//在复位模式
}
}
//
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))//初始化系统默认值波特率1000kbps
{
status = CAN_INITBTR_ERR ;
return(status);
}
if(BCAN_SET_OBJECT(0xaa,0xff))
{
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) //左循环显示处理
{
ClearDispAttr();
memcpy(&DispBuf[1],&databuf[1],4);
LiftCrcDispFlag=1;RightCrcDispFlag=0;
}
void RightCrcDispPrg(uchar *databuf) //右循环显示处理
{
ClearDispAttr();
memcpy(&DispBuf[1],&databuf[1],4);
LiftCrcDispFlag=0;RightCrcDispFlag=1;
}
//
void CanSend_Prg(void) //can发送数据
{
if(AutoSendFlag)
{
if((DispBuf[1]==0x05)&&(DispBuf[2]==0x0d)) //
{
DispBuf[3]= (unsigned char )TestSendData>>4;
DispBuf[4]= ((unsigned char )TestSendData)&0x0f;
}
}
}
void CanErr_Prg(void) //发现错误后处理
{
DispBuf[1]=0;
DispBuf[2]=0;
Config_SJA(); //
Error_disp(CAN_BUS_ERR);
}
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)
{
if(AutoSendFlag)
{
if((ReadSjaReg(REG_CONTROL)&0x01)==0)
{
AutoSendFrameID >>=5;
AutoSendFrameID++;
if(AutoSendFrameID>0x0fe00)
{
AutoSendFrameID=0;
}
AutoSendFrameID <<=5;
TestSendData++;
WriteSjaReg(REG_TxBuffer1,AutoSendFrameID>>8);
WriteSjaReg(REG_TxBuffer2,((unsigned char)AutoSendFrameID&0xf0)|0x06);
WriteSjaReg(REG_TxBuffer3,0xc1);
WriteSjaReg(REG_TxBuffer4,14);
WriteSjaReg(REG_TxBuffer5,(unsigned char)(TestSendData>>12));
WriteSjaReg(REG_TxBuffer6,(unsigned char)((TestSendData>>8)&0x0f));
WriteSjaReg(REG_TxBuffer7,((unsigned char)TestSendData>>4));
WriteSjaReg(REG_TxBuffer8,((unsigned char)TestSendData&0x0f));
BCAN_CMD_PRG(TR_CMD);
}
else
{
AutoSendFlag=0;
Write_DispBuf(0,0x0E,0x12,0x0f,0x0d);//在复位模式
}
}
}
//提取波特率的对应值
unsigned char ValueToBandRate(void)
{
unsigned char i;
unsigned int BandRate;
BCAN_ENTER_RETMODEL();
i = ReadSjaReg(REG_BTR0);
BandRate=(unsigned int)(i<<8);
i = ReadSjaReg(REG_BTR1);
BandRate +=i;
BCAN_QUIT_RETMODEL();
switch(BandRate)
{
case 0xbfff: //;5KBPS的预设值
i =0;
break;
case 0x672f: //;10KBPS的预设值
i =1;
break;
case 0x532F: //;20KBPS的预设值
i =2;
break;
case 0x87FF: //;40KBPS的预设值
i =3;
break;
case 0x472F: //;50KBPS的预设值
i =4;
break;
case 0x83FF: //;80KBPS的预设值
i =5;
break;
case 0x432f: //;100KBPS的预设值
i =6;
break;
case 0x031c: //;125KBPS的预设值
i =7;
break;
case 0x81fa: //;200KBPS的预设值
i =8;
break;
case 0x011c: //;250KBPS的预设值
i =9;
break;
case 0x80fa: //;400KBPS的预设值
i =10;
break;
case 0x001c: //;500KBPS的预设值
i =11;
break;
case 0x80b6: //;666KBPS的预设值
i =12;
break;
case 0x0016: //;800KBPS的预设值
i =13;
break;
case 0x0014: //;1000KBPS的预设值
i =14;
break;
default:
i=0xff;
break;
}
return i;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -