C++builder 与单片机的问题
做一个数据采集系统,利用上位机接受单片机发送的数据然后用chart控件画图显示,由于使用的是12位AD转换芯片,所以单片机发送的数据是12的,用两个字节发送;现在弄不明白C++builder该如何处理单片机发送的数据啊,是设置MSComm控件接受到两个字节在触发oncomm事件么,然后再将十六进制的数据转换成int型的,再利用数组将数据送Tchart画图?LZ是C++builder新手啊,各位高人多多指教,谢谢了。
[解决办法]
你看看你的下位机协议就能知道,假如下位机协议规定一个12位数据所表示点的横坐标和纵坐标,上位机解析完就画点即可
比如CLQ7.txt储存了上位机解析的坐标点
//读取文件
FILE* pFile=fopen("CLQ7.txt","r");
char* pBuf;
fseek(pFile,0,SEEK_END);// 移动文件指针到文件末尾
int len=ftell(pFile);// 获取文件指针所在位置到文件开始处的位置
pBuf=new char[len+1];
rewind(pFile);// 把文件指针移动到文件开头
fread(pBuf,1,len,pFile);// 读取文件
pBuf[len]=0;// 最后一个字符设置为结束符0,这样就不会接收乱码了
fclose(pFile);// 关闭文件
char* buffer;
int length=0;
buffer=new char[len+1];
for(int i=0;i<len;i++)
{
if(pBuf[i]=='\n')
{
buffer[length]=10*StrToInt(pBuf[i-2])+StrToInt(pBuf[i-1]);
length++;
}
}
//X轴
Canvas->MoveTo(20,180);
Canvas->LineTo(640,180);
//Y轴
Canvas->MoveTo(20,180);
Canvas->LineTo(20,20);
//画点
for(int i=0;i<(length);i++)
{
Canvas->MoveTo(x,120-y);
//设置横坐标
//x++;
x=x+10;
//设置纵坐标
y=buffer[i];
Canvas->LineTo(x,120-y);
}