一个MSCOMM控件的使用的问题,应该不难,我第1次用,头有点大,请那位老兄帮忙啊。(0分)

  • 主题发起人 主题发起人 阿波
  • 开始时间 开始时间

阿波

Unregistered / Unconfirmed
GUEST, unregistred user!
我想写一个串口通讯的程序,将RICHEDIT中的数据取出(是十六进制的)然后用MEMO1发送出去。
发送到接收装置时,应是十六进制的数,它只认十六进制的。然后数据返回后显示在MEMO2中,
要显示为十六进制数,(返回的数据不处理应是二进制的吧,不知好何处理呢)。我了了MSCOMM
控件,但好象有的地方不是很懂,用的好象不太对,下面是我写的程序,请那位老兄指点啊。谢谢啦。
串口通讯:
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Caption:=' 阿波' ;
MSComm1.InBufferCount:=0;
MSComm1.InputLen:=0;
MSComm1.RThreshold:=1;
MSComm1.Settings:='1200,e,8,1';
//,n,"(无校验)或",o,"(奇校验)或",e,"(偶校验)
//,m,"(校验位恒定为1)!
//,s,"(校验位恒定为0)!
MSComm1.CommPort:=1;
MSComm1.DTREnable:=true;
MSComm1.RTSEnable:=true;
MSComm1.PortOpen:=true;
Memo1.text:='';
ComboBox1.text:='1200,e,8,1';
ComboBox1.Items.Insert(0,'1200,e,8,1');
ComboBox1.Items.Insert(1,'2400,e,8,1');
ComboBox1.Items.Insert(2,'4800,e,8,1');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
s,datastr:string;
begin
s:=richedit.text;
for i:=0 to (length(s) div 2)-1do
begin
datastr:=datastr+chr(strtoint('$'+copy(s,i*2+1,2)));//发送16进制数据,每两位一个字节。
MSComm1.Settings:=ComboBox1.text;
// 波特率也要进行处理吗?按数据发送出去吗?
MSComm1.Output:=Memo2.text;
//返回的数据显示在MEMO2中。
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if MSComm1.PortOpen=true then
MSComm1.PortOpen:=false;
close();
end;

procedure TForm1.MSComm1Comm(Sender: TObject);
var
recstr:Olevariant;
begin
MSComm1.Settings:=ComboBox1.text;
//波特率也要进行处理吗?按数据发送出去吗?
if Mscomm1.CommEvent=comEvReceive then
begin
recstr:=MSComm1.Input;
Memo1.text:=datastr+recstr;
end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
if MSComm1.PortOpen=true then
MSComm1.PortOpen:=false;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
MessageDlg('阿波2002年',mtInformation,[mbOk],0);
end;

end.
接收回来的数据如何显示为十六进制的。波特率到底要不要发送到接收装置呢。还是只用来表示发送速度用的,
不太明白啊。
 
后退
顶部