📄 compasshead.txt
字号:
#ifndef _USE_COMPASS_FNN_H_
#define _USE_COMPASS_FNN_H_
# include <RD_MacroAndConst.h>
#ifndef True
# define True 0x01
#endif
#ifndef False
# define False 0x00
#endif
# define CPS_FNN_CMD_ERROR 0xee
# define CPS_FNN_CMD_REMARK_BEGIN 0xf5
# define CPS_FNN_CMD_REMARK_END 0xf8
# define CPS_FNN_CMD_SAVE_MARK 0xf7
# define CPS_FNN_CMD_ENABLE_NORTH_SET 0xa5
# define CPS_FNN_CMD_NORTH_SET 0xe5
# define CPS_FNN_CMD_CLEAR_LAST_NORTH_SET 0xe8
#ifndef CPS_FNN_SHELL
# define CPS_FNN_NO_SHELL
#endif
# define CPS_FNN_START_REMARK CPSFNNSendCMD(CPS_FNN_CMD_REMARK_BEGIN)
# define CPS_FNN_END_REMARK CPSFNNReMarkEND()
# define CPS_FNN_SET_NORTH CPSFNNNorthSet()
# define INSERT_USART_RX_ISR_CODE CPSFNNGetData(TempUDR);
char CPSFNNDataBuff[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned int CPSFNNDegree = 0;
char IfBreakOperation = False;
void CPSFNNGetData(char Data);
char CPSFNNSendCMD(char CMD);
char CPSFNNReMarkEND(void);
char CPSFNNNorthSet(void);
extern void DelayMs(unsigned Time);
char CPSFNNNorthSet(void)
{
if (!CPSFNNSendCMD(CPS_FNN_CMD_ENABLE_NORTH_SET)) //允许设置罗盘零点指向
{
return False;
}
if (!CPSFNNSendCMD(CPS_FNN_CMD_CLEAR_LAST_NORTH_SET)) //清除上次磁北修正
{
return False;
}
if (!CPSFNNSendCMD(CPS_FNN_CMD_NORTH_SET)) //设置磁北
{
return False;
}
return True;
}
char CPSFNNReMarkEND(void)
{
if (!CPSFNNSendCMD(CPS_FNN_CMD_REMARK_END)) //结束罗盘转动标定
{
return False;
}
if (!CPSFNNSendCMD(CPS_FNN_CMD_SAVE_MARK)) //保存数据
{
return False;
}
return True;
}
char CPSFNNSendCMD(char CMD)
{
#ifdef CPS_FNN_NO_SHELL
return False;
#else
IfBreakOperation = False;
do
{
CPS_FNN_SHELL = CMD;
DelayMs(500);
if (CPSFNNDataBuff[3] == CMD)
{
return True;
}
else if (CPSFNNDataBuff[3] == CPS_FNN_CMD_ERROR)
{
return False;
}
}
while(!IfBreakOperation);
return False;
#endif
}
void CPSFNNGetData(char Data)
{
static char DataPoint = 0;
static char IfStartToReceive = False;
static char CheckByte = 0;
CLI();
if ((IfStartToReceive == False) && (Data == 0xaa)) //检测帧头
{
IfStartToReceive = True;
CheckByte = 0;
DataPoint = 0;
}
if (IfStartToReceive == True) //开始接收
{
CPSFNNDataBuff[DataPoint++] = Data;
if (DataPoint == 20)
{
if (CheckByte == Data) //进行数据校验
{
CPSFNNDegree = CPSFNNDataBuff[16]; //更新角度数据
CPSFNNDegree = (CPSFNNDegree << 8) | CPSFNNDataBuff[17];
}
IfStartToReceive = False; //接收完毕
}
else
{
CheckByte += Data;
}
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -