怎么在vb中通过mscomm控件的output 向外以十六进制发送“01”?是“01”不是“1”哦,今天在线等
外面的仪器接收到十六进制的“01”信号后,会以ascii码的方式返回数据,我要把它显示在文本框里面,能写下完整的程序么?...
外面的仪器接收到十六进制的“01”信号后,会以ascii码的方式返回数据,我要把它显示在文本框里面,能写下完整的程序么?
展开
3个回答
展开全部
新建工程,在表单中放入Command1和Text1和MsComm1控件,并设置好通讯控件的Port和Settings,粘贴以下代码:
Private Sub Command1_Click()
Dim v(0) As Byte
v(0) = &H1
MSComm1.Output = v
End Sub
Private Sub Form_Load()
MSComm1.PortOpen = True
MSComm1.InputMode = comInputModeText
End Sub
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then
Text1.Text = MSComm1.Input
End If
End Sub
Private Sub Command1_Click()
Dim v(0) As Byte
v(0) = &H1
MSComm1.Output = v
End Sub
Private Sub Form_Load()
MSComm1.PortOpen = True
MSComm1.InputMode = comInputModeText
End Sub
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then
Text1.Text = MSComm1.Input
End If
End Sub
展开全部
function StrToHexStr(const S: string): string;
//字符串转换成16进制字符串
var
I: Integer;
begin
for I := 1 to Length(S) do
begin
if I = 1 then
Result := IntToHex(Ord(S[1]), 2)
else Result := Result + IntToHex(Ord(S[I]), 2);
end;
end;
function HexStrToStr(const S: string): string;
//16进制字符串转换成字符串
var
t: Integer;
ts: string;
M, Code: Integer;
begin
t := 1;
Result := '';
while t <= Length(S) do
begin
while not (S[t] in ['0'..'9', 'A'..'F', 'a'..'f']) do
inc(t);
if (t + 1 > Length(S)) or (not (S[t + 1] in ['0'..'9', 'A'..'F', 'a'..'f'])) then
ts := '$' + S[t]
else
ts := '$' + S[t] + S[t + 1];
Val(ts, M, Code);
if Code = 0 then
Result := Result + Chr(M);
inc(t, 2);
end;
end;
参考Delphi中是用这两个函数转
//字符串转换成16进制字符串
var
I: Integer;
begin
for I := 1 to Length(S) do
begin
if I = 1 then
Result := IntToHex(Ord(S[1]), 2)
else Result := Result + IntToHex(Ord(S[I]), 2);
end;
end;
function HexStrToStr(const S: string): string;
//16进制字符串转换成字符串
var
t: Integer;
ts: string;
M, Code: Integer;
begin
t := 1;
Result := '';
while t <= Length(S) do
begin
while not (S[t] in ['0'..'9', 'A'..'F', 'a'..'f']) do
inc(t);
if (t + 1 > Length(S)) or (not (S[t + 1] in ['0'..'9', 'A'..'F', 'a'..'f'])) then
ts := '$' + S[t]
else
ts := '$' + S[t] + S[t + 1];
Val(ts, M, Code);
if Code = 0 then
Result := Result + Chr(M);
inc(t, 2);
end;
end;
参考Delphi中是用这两个函数转
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是想发送0x01? 跟发送1是一样的。只是显示不同而已。在vb下面所有十六进制数都是当作整型来处理。当然你可以把接收到的整型用hex()函数处理。得到十六进制字符。可以用format()函数格式成两位。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询