之前没有任何上位机和c#的编写经验,一天时间马马虎虎搞定了,主要的问题是不知道如何将多个变量的值分别显示在不同的文本框中。先上图:
图标都换了啊哈哈。下面是代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;
namespace 液位监测
{
public partial class Form1 : Form
{
string data;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);//必须手动添加事件处理程序
}
private void button1_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
try
{
serialPort1.Close();
}
catch { }
button1.Text = "打开串口";
}
else
{
try
{
serialPort1.PortName = comboBox1.Text;
serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text);
serialPort1.Open();
button1.Text = "关闭串口";
}
catch
{
MessageBox.Show("串口打开失败");
}
}
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
data = serialPort1.ReadExisting();
//textBox10.Text = data;
//datavalue = Convert.ToInt32(data, 10);
//count++;
//index = count % 8;
this.Invoke(new EventHandler(DisplayText));
}
private void DisplayText(object sender, EventArgs e)
{
if (data.Length == 8)
{
textBox1.Text = ((Int32)data[0]).ToString();
if ((Int32)data[0] > 0)
label23.ForeColor = System.Drawing.Color.LightGreen;
else
label23.ForeColor = System.Drawing.Color.Red;
textBox2.Text = ((Int32)data[1]).ToString();
textBox3.Text = ((Int32)data[2]).ToString();
textBox4.Text = ((Int32)data[3]).ToString();
textBox5.Text = ((Int32)data[4]).ToString();
textBox6.Text = ((Int32)data[5]).ToString();
textBox7.Text = ((Int32)data[6]).ToString();
textBox8.Text = ((Int32)data[7]).ToString();
}
}
没写完只是初步写了一下后面再完善。分别放在八个文本框里,我是把接收到的数值看成数组,每个字节对应一位。。。下位机一个循环完我延时了一秒所以不知道这个是不是每次都正好读八个字节的原因。还有一些任务要做:传浮点数、显示浮点数。有时间再跟新吧去跑步了。