串口接收可以是字符串,也可以是数值,可以定义两个单选框来选择显示为字符串或者是数值:
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (!radioButton2.Checked)//判断是否选中了字符选项
{
string str = serialPort1.ReadExisting();//保存接收到的字符
label3.Text = str;
textBox1.AppendText(str);//显示出接收到的字符
}
else//数值模式
{
byte data;
data = (byte)serialPort1.ReadByte();//读取串口接收的一个字节
string str = Convert.ToString(data, 16).ToUpper();//将读取到的字节转换成十六进制字符串显示
label3.Text = str;
textBox1.AppendText("0x"+(str.Length==1?"0"+str:str)+" ");//在文本框中显示出转换后的字符串
}
}
串口接收功能找开,需要在Form1_Load中加入下面一条语句:
serialPort1.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
如果需要跨进程操作窗体元素,需要别外加入下面一条语句:
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
串口发送的基本代码为:
string convertdata = data.Substring(2, 2);
byte[] buffer = new byte[1];
buffer[0] = Convert.ToByte(convertdata, 16);
int tmp = buffer[0];
try
{
if (button1.Text == "打开串口")
{
serialPort1.Open();
button1.Text = "关闭串口";
serialPort1.Write(buffer, 0, 1);
}
else if (button1.Text == "关闭串口")
{
serialPort1.Close();
button1.Text = "打开串口";
}
label2.Text = buffer[0].ToString("x").ToUpper();
}
catch (Exception err)
{
if (serialPort1.IsOpen)
serialPort1.Close();
MessageBox.Show(err.ToString(), "ERROR");
}