我用api函数开发了一个串口调试程序,现在需要接收并以double形式显示角度,请问如何做,谢谢大家。
输入数据帧格式如下表。
序号 名称 占用字节数目 备注
1 帧头 2 取值:0x5555
2 长度码 1 取值:“方位码”占用的字节长度=2
3 方位码 2 取值范围:0~720;单位:0.5度;
4 CRC码 2 将“长度码”和“方位码”的内容作CRC-16效验
5 帧尾 2 取值:0xAAAA
注:
0x 55 55 02 00 B4 D0 77 AA AA // 90 度
0x 55 55 02 01 0E 50 54 AA AA // 135 度
0x 55 55 02 01 69 11 BE AA AA // 180.5 度
0x 55 55 02 01 6E 50 7C AA AA // 183 度
0x 55 55 02 01 E0 D0 18 AA AA // 240 度
0x 55 55 02 01 FB 90 13 AA AA // 253.5 度
我的代码是
BOOL CCommtestDlg::ProcessCOMMNotification (UINT wParam,long lParam)
{
..............
CString StrTemp;
BYTE abIn[MAXBLOCK];
int len;
len=ReadBlock(abIn,MAXBLOCK); //缓冲区字符长度
for(int i=0;i <len;i++)
{
BYTE bt=abIn[i];
if(m_ctrlHexDisplay.GetCheck())
StrTemp.Format("%02x ",bt);
else
StrTemp.Format("%c",bt);
???????
输入数据帧格式如下表。
序号 名称 占用字节数目 备注
1 帧头 2 取值:0x5555
2 长度码 1 取值:“方位码”占用的字节长度=2
3 方位码 2 取值范围:0~720;单位:0.5度;
4 CRC码 2 将“长度码”和“方位码”的内容作CRC-16效验
5 帧尾 2 取值:0xAAAA
注:
0x 55 55 02 00 B4 D0 77 AA AA // 90 度
0x 55 55 02 01 0E 50 54 AA AA // 135 度
0x 55 55 02 01 69 11 BE AA AA // 180.5 度
0x 55 55 02 01 6E 50 7C AA AA // 183 度
0x 55 55 02 01 E0 D0 18 AA AA // 240 度
0x 55 55 02 01 FB 90 13 AA AA // 253.5 度
我的代码是
BOOL CCommtestDlg::ProcessCOMMNotification (UINT wParam,long lParam)
{
..............
CString StrTemp;
BYTE abIn[MAXBLOCK];
int len;
len=ReadBlock(abIn,MAXBLOCK); //缓冲区字符长度
for(int i=0;i <len;i++)
{
BYTE bt=abIn[i];
if(m_ctrlHexDisplay.GetCheck())
StrTemp.Format("%02x ",bt);
else
StrTemp.Format("%c",bt);
???????
( 0x01 * 0x100 + 0x69 ) / 2 = 180.5
float Angel;
Angel = (buf[3] * 0x100 + buf[4]) / 2.0;
for(int i=0;i<len;i++)
{
BYTE bt=abIn[i];
if(m_ctrlHexDisplay.GetCheck())
StrTemp.Format("%02x ",bt);
else
StrTemp.Format("%c",bt);
// AcceptRead+=StrTemp;
m_strRXData+=StrTemp; char ch = (char)bt;
BYTE buf[9];
memcpy(buf,abIn+i,9);
m_strPortRXData += (char)ch; if( 0x55 == buf[ 0 ] && 0x55 == buf[ 1 ] )
{
flag = 1;
}
if(0xAA == buf[ 7 ] && 0xAA == buf[ 8 ])
{
flag = 2;
}
if (flag == 2)
{
float Angel;
Angel = (buf[3] * 0x100 + buf[4])/2;
m_meter.UpdateNeedle(Angel);
memset(buf,0,9);
}
}
无法得到想要的数据,请问是怎么回事?谢谢!