第一步:实例化串口通讯类
SerialPort sp = new SerialPort();
第二步:设置串口信息并打开串口
//串口设置
private void btnSetSP_Click()
{
sp.Close();
sp.PortName = "COM1";//串口号
sp.BaudRate = int.Parse("9600");//波特率
sp.DataBits = int.Parse("8");//数据位
sp.StopBits = (StopBits)int.Parse("1");//停止位
sp.ReadTimeout = 500;//读取数据的超时时间,引发ReadExisting异常
bntSwitchSP_Click();//开串口
}
//打开串口
private void bntSwitchSP_Click()
{
if (sp.PortName!= "" && sp.BaudRate!= "" && sp.DataBits!= "" && sp.StopBits!= "")
{
try
{
if (sp.IsOpen)
{
sp.Close();
sp.Open();//打开串口
}
else
{
sp.Open();//打开串口
}
}
catch (Exception ex)
{
MessageBox.Show("错误:" + ex.Message, "C#串口通信");
}
}
else
{
MessageBox.Show("请先设置串口!", "RS232串口通信");
}
}
第三步:发送指令
//发送数据
public void ToSendMessage()
{
if (sp.IsOpen)
{
try
{
sp.Encoding = System.Text.Encoding.GetEncoding("GB2312");
string Command = "100110010001111101";
//发送数据(类型:十六进制)
sp.Write(strToHexByte(Command ), 0, strToHexByte(Command ).Length);
发送数据(类型:字符串)
//sp.Write(SerialCommand);
//发送成功!
}
catch (Exception ex)
{
MessageBox.Show("错误:" + ex.Message);
}
}
else
{
MessageBox.Show("串口未打开!");
}
}
// 字符串转换成16进制编码
private byte[] strToHexByte(string hexString)
{
hexString = hexString.Replace(" ", "");
if ((hexString.Length % 2) != 0) hexString += " ";
byte[] returnBytes = new byte[hexString.Length / 2];
for (int i = 0; i < returnBytes.Length; i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2).Replace(" ", ""), 16);
return returnBytes;
}
大功告成,学会了没有啊