我把一个利用TComm控件做的通讯程序改进了一下,还有一些问题,哪位大虾能帮我诊断一下?

xiceseraph 2006-05-17 03:25:23
这个程序在安装了TComm控件的BCB6能正确编译通过,本意是想利用PC与一台单片机通过RS232串口通信,不过现在单片机出了些问题,准备单机调试。
串口使用的是三芯线,分别是接地、发送、接收。在PC上接好串口,把线另一头的“发送”和“接收”端用导线连上,使用串口调试助手V2.2可以给自己发送和接收数据,不过我编写的这个程序就无法实现了。

具体程序如下:

//------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "Comm"
#pragma resource "*.dfm"
TForm1 *Form1;
TRect rt;
String ReceiveStr;
float ReceiveData[50];
TPoint PointArray[50];

//------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
DoubleBuffered = true;
}
//------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//打开通信端口
Comm1->PortOpen =true;
Form1->mReceive->Clear();
}
//------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
String InputStr;
//命令指定,并加上结尾字符Cr
InputStr=Trim(txtInput->Text) + '\x0d';
Comm1->OutputString(InputStr);//送出数据
}
//------------------------------------------------------------------
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
//先不引发事件
Comm1->RThreshold = 0;
//送出设置的字符串
Comm1->OutputString("SET TYPE 3\r");
Delay(1000);//延迟
Comm1->DataCount =0; //清除接收区
Comm1->RThreshold = 1; //设置接收事件的阀值
//设定画图方式
Pic1->Canvas->Pen->Mode =pmCopy;
//画出边框
Pic1->Canvas->Rectangle(0,0,Pic1->Width ,Pic1->Height);
rt=Pic1->ClientRect; //指定范围
}
//------------------------------------------------------------------
void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
//检查是否打开了通信端口
if (Comm1->PortOpen) Comm1->PortOpen =false;
exit(0);
}
//------------------------------------------------------------------
void __fastcall TForm1::BitBtn4Click(TObject *Sender)
{
String Buf1,Buf2;
int DotPos,i,j;
//接收数据
Buf1 = Trim(Comm1->Input);
//数据Append到ReceiveStr变量中
ReceiveStr = ReceiveStr + Buf1;
//检查结尾字符是否已返回
if (ReceiveStr.Pos('!')< 1) return;
else
{
i = 0; //序数归0
mReceive->Text = "";
do
{
//检查逗号的位置
DotPos = ReceiveStr.Pos(',');
if (DotPos==0) break;
//取出数值字符串
Buf2 = ReceiveStr.SubString(1,DotPos-1);
//放到Memo组件中,并且加上断行字符(Cr、Lf)
mReceive->Text =mReceive->Text+ IntToStr(i+1) + "->" + Buf2 + '\r' + '\n';
//留下未处理的数据
ReceiveStr =ReceiveStr.Delete(1,DotPos);
i += 1; //序数加1
if (i>49) break;
}
while (1); //直到找不到逗号
} //else loop
}
//------------------------------------------------------------------
//时间延迟函数
void Delay(DWORD DT)
{
long tt;
tt=GetTickCount();
while (GetTickCount()-tt<DT)
{
Application->ProcessMessages();
if ((GetTickCount()-tt)<=0)
tt=GetTickCount();
}
}

//-------------------------------------------------------------------


void __fastcall TForm1::Comm1ReceiveData(TObject *Sender)
{
String Buf;
int DotPos,i,j;
float tmpSingle,MaxValue,MinValue;
TPoint pt;
//接收资料
Buf = Trim(Comm1->Input);
ReceiveStr = ReceiveStr + Buf; //Append数据
//结尾字节是否已返回
if (ReceiveStr.Pos('!')< 1) return;
else
{
i = 0;
do
{
//检查逗号的位置
DotPos = ReceiveStr.Pos(',');
if (DotPos==0) break;
//数据放进数组
ReceiveData[i] = StrToFloat( ReceiveStr.SubString(1,DotPos-1));
//剩下未处理数据
ReceiveStr =ReceiveStr.Delete(1,DotPos);
i += 1;
if (i>49) break;
}
while (1); //直到寻找不到逗号
ReceiveStr = "";
MaxValue = -9999; //默认最大数值
MinValue = 9999; //默认最小数值
//找出最大及最小值
for (i = 0 ;i<50;i++ )
{
if (ReceiveData[i]>MaxValue) MaxValue = ReceiveData[i];
if (ReceiveData[i]<MinValue) MinValue = ReceiveData[i];
}
//开始处理图形,将数据存储到PT数组中
for (i = 0 ;i<50;i++ )
{
pt.x=(int)((float)rt.Right*i/49); //Scale转换
pt.y=(int)((float)rt.Bottom*ReceiveData[i]/(MaxValue-MinValue));
PointArray[i]=pt;
}
Pic1Paint(Sender); //调用Picture的Paint事件
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Pic1Paint(TObject *Sender)
{
//绘出边框
Pic1->Canvas->Pen->Color = clBlack;
Pic1->Canvas->Brush->Color = clWhite;
Pic1->Canvas->Rectangle(rt);
//画线
Pic1->Canvas->Pen->Color = clRed;
Pic1->Canvas->Polyline(PointArray,49);

}

//----------------------------------------------------------------------------

void __fastcall TForm1::OnPaint(TObject *Sender)
{
//绘出边框
Pic1->Canvas->Pen->Color = clBlack;
Pic1->Canvas->Brush->Color = clWhite;
Pic1->Canvas->Rectangle(rt);
//画线
Pic1->Canvas->Pen->Color = clRed;
Pic1->Canvas->Polyline(PointArray,49);

}
//---------------------------------------------------------------------------



void __fastcall TForm1::BitBtn6Click(TObject *Sender)
{
if(Form1->OpenDialog1->Execute())
//显示对话框
{
Form1->BitBtn1->Enabled=true;
Form1->BitBtn2->Enabled=true;
Form1->BitBtn3->Enabled=true;
Form1->BitBtn4->Enabled=true;
Form1->BitBtn5->Enabled=true;
Form1->BitBtn7->Enabled=true;
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn7Click(TObject *Sender)
{
Form1->mReceive->Lines->LoadFromFile(Form1->OpenDialog1->FileName);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn5Click(TObject *Sender)
{//设置对话框标题
Form1->SaveDialog1->Title="另存为文本文件:";
//设置默认路径
Form1->SaveDialog1->InitialDir="C:\\Documents and Settings\\Administrator\\桌面\\";
//设置过滤器
Form1->SaveDialog1->Filter="Text Files(*.txt)|*.txt";
//显示对话框
if(Form1->SaveDialog1->Execute())
//存储文件
{
Form1->mReceive->Lines->SaveToFile(Form1->SaveDialog1->FileName);
}
}
//---------------------------------------------------------------------------
...全文
397 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tuhuo 2006-11-11
  • 打赏
  • 举报
回复
楼主你用的TComm控件是Comm32.pas和misc.pas么?我在BCB6下安装这个控件时遇到些问题,能不能说说这个控件咋安装啊?
wanglovec 2006-06-13
  • 打赏
  • 举报
回复



有什么提示吗??
chpst 2006-05-19
  • 打赏
  • 举报
回复
你先弄间单点调。看能不能发数,和收数。
void __fastcall TForm1::mSendKeyPress(TObject *Sender, char &Key)
{
//若单击Enter,则送出发送区的字符串
if (Key==13) Comm1->OutputString(mSend->Text);
}

void __fastcall TForm1::Comm1ReceiveData(TObject *Sender)
{
mReceive->Text = mReceive->Text + Comm1->Input ;
}

就写这两句,打开串口试试
}
xiceseraph 2006-05-17
  • 打赏
  • 举报
回复
对了 还有OpenDialog SaveDialog这两个控件
xiceseraph 2006-05-17
  • 打赏
  • 举报
回复
其中有BitBtn1-7  7个按钮
TEdit 、 TMemo 、 Comm1(Tcomm控件)、Pic1(PaintBOX控件)、 Comm1ReceiveData这个事件

703

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder ActiveX/COM/DCOM
社区管理员
  • ActiveX/COM/DCOM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧