我正在尝试将一些数据发送到通过串行端口工作的LCD显示器。这段代码完成VB6的工作,但我需要将其转换为C#。可悲的是,它不起作用。有什么想法吗?
VB6(示例)
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.PortOpen = True
MSComm1.Output = Chr(2)
MSComm1.Output = Trim(Text1.Text)
C#(示例)
var serialPort1 = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
serialPort1.Open();
serialPort1.Write(((char)2).ToString());
serialPort1.Write(textbox1.Text);
serialPort1.Close();
我认为问题是关于serialPort1.Write函数,但我无法弄明白。你能帮忙吗?
答案 0 :(得分:0)
可悲的是它不起作用
鉴于这个广泛的陈述,我将假设它是数据类型之间的差异,因为Chr
返回0到255之间的值,即一个字节。
serialPort1.Write(new byte[]{2}, 0, 1);
答案 1 :(得分:0)
首先,尝试使用此辅助扩展方法,以便更轻松地编写单字节控制代码
public static void Write(this SerialPort sp, byte b)
{
sp.Write(new byte[]{b}, 0, 1);
}
然后将您的代码更改为:
var serialPort1 = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
serialPort1.Encodeing = System.Text.Encoding.Default;
serialPort1.Open();
serialPort1.Write(2);
serialPort1.Write(textbox1.Text.Trim());
serialPort1.Close();
请注意,我没有语法检查,但只是随心所欲,所以你可能需要调整一下。
答案 2 :(得分:0)
我制作一个字节数组
byte[] bytSend;
我用要发送的数据填充字节数组 然后我用以下命令发送数据
sp.Write(bytSend, 0,bytSend.GetUpperBound(0) + 1);
从我的头顶,所以没有真正的测试项目,对不起