3)软件流程图
车窗模块根据按键信息控制车窗,并发送报文的流程图如下:
车窗模块接收报文控制车窗的程序
void GETCANInf(void)
{
if(RxData[1]&0x80==0x80) LRZ=1;
if(RxData[1]&0x40==0x40) LRF=1;
if(RxData[1]&0x20==0x20) RRZ=1;
if(RxData[1]&0x10==0x10) RRF=1;
if(RxData[1]&0x08==0x08) LFUPs=1;
if(RxData[1]&0x04==0x04) LFDOWNs=1;
if(RxData[2]&0x08==0x08) RFUPs=1;
if(RxData[2]&0x04==0x04) RFDOWNs=1;
if(RxData[2]&0x80==0x80) RRUPs=1;
if(RxData[2]&0x40==0x40) RRDOWNs=1;
if(RxData[2]&0x20==0x20) LRUPs=1;
if(RxData[2]&0x02==0x02) LRDOWNs=1;
}
void CANdataCon(void)
{
if(LFUPs)
{
M_OUT0=1;
M_OUT1=0;
} else if(LFDOWNs)
{
M_OUT0=0;
M_OUT1=1;
}else
{
M_OUT0=1;
M_OUT1=1;
}
if(RFUPs)
{
M_OUT2=1;
M_OUT3=0;
}else if(RFDOWNs)
{
M_OUT2=0;
M_OUT3=1;
} else
{
M_OUT2=1;
M_OUT3=1;
}
if(LRUPs)
{
M_OUT4=1;
M_OUT5=0;
} else if(LRDOWNs)
{
M_OUT4=0;
M_OUT5=1;
}else
{
M_OUT4=1;
M_OUT5=1;
}
if(RRUPs)
{
M_OUT6=1;
M_OUT7=0;
} else if(RRDOWNs)
{
M_OUT6=0;
M_OUT7=1;
}else
{
M_OUT6=1;
M_OUT7=1;
}
if(LRZ)
{
M_OUT8=0;
M_OUT9=1;
} else if(LRF)
{
M_OUT8=1;
M_OUT9=0;
}else
{
M_OUT8=1;
M_OUT9=1;
}
if(RRZ)
{
M_OUT10=1;
M_OUT11=0;
}else if(RRF)
{
M_OUT10=0;
M_OUT11=1;
} else
{
M_OUT10=1;
M_OUT11=1;
}
}
4)软件模块功能介绍
void Init_IO(void); 为单片机端口寄存器控制函数,定义端口为输入还是输出;
void RTC_Init(void);定时器初始化函数,定义为100ms中断一次;
void MCU_Init(void);电机控制端口初始化函数,初始化为停止;
void MCG_Init(void);时钟源初始化函数;
void CANInit(void);CAN通信初始化函数;
void Send_CAN_Msg(void);CAN发送数据函数;
void CAN_TxData( UINT32 CAN_ID,UINT8 Msg_Length,UINT8 *CANTxData); CAN发送数据函数;
void GETCANInf(void) ;对CAN发送数据分析函数
void CANdataCon(void) ;CAN发送数据控制电机转动函数
void scankeystate(void);按键状态扫描函数,按键状态放在相应的变量中;
void MOTORcontrol(void);天窗电机控制函数;
interrupt VectorNumber_Vrtc void RTC_ISR(void);定时器中断函数;
interrupt VectorNumber_Vcanrx void CANRx_ISR(void);CAN发送数据中断函数。