可以先展示一下这个界面
可以显示从单片机传过来的数据,以温度计的形式显示,下面展示一下代上位机的代码
using System; using System.Collections.Generic; using System.ComponentModel;
using System.Data; using System.Drawing; using System.IO; using System.IO.Ports;
using System.Linq; using System.Text; using System.Threading; using System.
Threading.Tasks; using System.Windows.Forms; namespace _8个温度 { public partial
class Form1 : Form { public Form1() { InitializeComponent(); System.Windows.
Forms.Control.CheckForIllegalCrossThreadCalls = false; } private string
resultFile; //float tempreture, tempreture1; private void Form1_Load(object
sender, EventArgs e) { string[] baud = { "9600", "38400", "57600", "115200" };
//添加波特率列表 comboBox2.Items.AddRange(baud); comboBox2.Text = "115200";//设置默认值
comboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames());
//获取当前电脑可用串口并添加到选项列表中 comboBox3.Text = "1"; comboBox4.Text = "8"; comboBox5.Text
= "无"; serialPort1.DataReceived += new SerialDataReceivedEventHandler(
serialPort1_DataReceived);//添加事件处理程序 serialPort1.Encoding = Encoding.Default;
//设置编码,避免中文乱码 label25.Text = " " + DateTime.Now.ToString(); } private void
button1_Click(object sender, EventArgs e) { try { if (serialPort1.IsOpen) {
serialPort1.Close();//关闭串口 button1.Text = "打开串口"; button1.ForeColor = Color.
Black; ovalShape1.FillColor = Color.Black; comboBox1.Enabled = true; comboBox2.
Enabled= true; comboBox3.Enabled = true; comboBox4.Enabled = true; comboBox5.
Enabled= true; } else { //串口已经处于关闭状态,则设置好串口属性后打开 comboBox1.Enabled = false;
comboBox2.Enabled = false; comboBox3.Enabled = false; comboBox4.Enabled = false;
comboBox5.Enabled = false; serialPort1.PortName = comboBox1.Text; serialPort1.
BaudRate= Convert.ToInt32(comboBox2.Text); serialPort1.DataBits = 8; serialPort1
.Parity = System.IO.Ports.Parity.None; serialPort1.StopBits = System.IO.Ports.
StopBits.One; serialPort1.Open(); button1.Text = "关闭串口"; button1.ForeColor =
Color.Red; ovalShape1.FillColor = Color.Red ; } } catch (Exception ex) {
//捕获可能发生异常并进行处理 //捕获到异常,创建一个行的对象,之前的不可再用 serialPort1 = new System.IO.Ports.
SerialPort(); //刷新COM口 comboBox1.Items.Clear(); comboBox1.Items.AddRange(System.
IO.Ports.SerialPort.GetPortNames()); //响铃并显示异常给用户 System.Media.SystemSounds.Beep
.Play(); button1.Text = "打开串口"; MessageBox.Show(ex.Message ); comboBox1.Enabled
= true; comboBox2.Enabled = true; comboBox3.Enabled = true; comboBox4.Enabled =
true; comboBox5.Enabled = true; } } //接收串口数据函数 private void
serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { Thread.
Sleep(500);//休眠50ms try { //定义一个字段,来保存串口传来的信息 string str = serialPort1 .
ReadExisting();//字符串方式读取 int length = serialPort1.BytesToRead;//读取数据的长度 Byte[]
data= new byte[length];//定义缓冲区,因为串口时间触发时有可能不止一个字节 serialPort1.Read(data, 0,
length);//读取数据 textBox1.AppendText(str); string data1 = str.Substring(0, 4);
string data2 = str.Substring(6, 4); string data3 = str.Substring(12, 4); string
data4= str.Substring(18, 4); string data5 = str.Substring(24, 4); string data6 =
str.Substring(30, 4); string data7 = str.Substring(36, 4); string data8 = str.
Substring(42, 4); try { label14.Text = data1; label15.Text = data2; label16.Text
= data3; label17.Text = data4; label18.Text = data5; label19.Text = data6;
label20.Text = data7; label22.Text = data8; thermometer1.Value = Convert.
ToDouble(data1); thermometer2.Value = Convert.ToDouble(data2); thermometer3.
Value= Convert.ToDouble(data3); thermometer4.Value = Convert.ToDouble(data4);
thermometer5.Value = Convert.ToDouble(data5); thermometer6.Value = Convert.
ToDouble(data6); thermometer7.Value = Convert.ToDouble(data7); thermometer8.
Value= Convert.ToDouble(data8); } catch { MessageBox.Show("数据发送错误"); }
//label14.Text = str; //thermometer1.Value = Convert.ToInt32 (data [0])
;//1130直接这样用所以会超出数组界限 // foreach (byte Member in data) //遍历用法 // { // string
str = Convert.ToString(Member, 16).ToUpper(); // textBox1.AppendText("0x" +
(str.Length == 1 ? "0" + str : str) + " "); //文本框显示1 //上一句等同于 if(str.Length==1)
//str = '0' + str; //else //str = str; //textBox1.AppendText("0x" + str); // } }
catch(Exception ex) { serialPort1.Close(); MessageBox.Show(ex.Message ); } }
private void button2_Click(object sender, EventArgs e) { textBox1.Text = ""; }
private void button3_Click(object sender, EventArgs e) { if(textBox1 .Text =="")
{ MessageBox.Show("没有数据保存!", "错误"); return; } SaveFileDialog SaveFile = new
SaveFileDialog(); SaveFile.Filter = "All files(*.*)|*.*|txt files(*.txt)|*.txt";
//文本筛选 SaveFile.FilterIndex = 3;//文本筛选器索引,选择第一项就是1 SaveFile.RestoreDirectory =
true; if(SaveFile .ShowDialog ()==DialogResult.OK ) { resultFile = SaveFile.
FileName; StreamWriter sw = File.CreateText(resultFile); sw.Write(textBox1.Text)
; sw.Close(); } } } }
下位机的程序可以从我的资源页获取