winform编程:实现串口不断接收数据(我的是心电板,其实是想画心电图,40ms发送一个数据包,里面包含8个数据),并把数据作为一个参数,用来在以panel为画布进行绘图的参数。其中还要使用到timer。求各位大侠给个思路,这是不是关乎到两个进程?我是初学者,头脑里乱七八糟的。以下是我写的杂七杂八的代码。(是否需要两个中断?如果是该怎么使用,如果不需要又该怎么让窗口不断接收数据又可以让panel不停的画心电图。)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Timers;namespace ecg3
{
public partial class Form1 : Form
{ ArrayList data = new ArrayList();
Pen myPen = new Pen(Color.Red);
#region xy增益与坐标申明
private float xGain;//x增益
System.Timers.Timer t = new System.Timers.Timer();
public Form1()
{
InitializeComponent();
}
public float XGain
{
get { return xGain; }
set { xGain = value; }
}
private float yGain;//y增益 public float YGain
{
get { return yGain; }
set { yGain = value; }
}
private float xOrigin;//x原点 public float XOrigin
{
get { return xOrigin; }
set { xOrigin = value; }
}
private float yOrigin;//y原点 public float YOrigin
{
get { return yOrigin; }
set { yOrigin = value; }
}
private float xNext;//x新坐标 public float XNext
{
get { return xNext; }
set { xNext = value; }
}
private float yNext;//y新坐标 public float YNext
{
get { return yNext; }
set { yNext = value; }
}
private float i; public float I
{
get { return i; }
set { i = value; }
}
#endregion
private void Form_Load(object sender, EventArgs e)
{
serialPort.Open();
xOrigin = 0;
yOrigin = this.panel.Height / 2;
serialPort.DataReceived+=new System.IO.Ports.SerialDataReceivedEventHandler(serialPort_DataReceived); t.Enabled = true;
t.Interval = 4;
t.AutoReset = true;
t.Elapsed += new ElapsedEventHandler(panel_Paint);//这个地方不能这样使用
} //private void t_Elapsed(object source, ElapsedEventArgs e)
// {
// data.Add(serialPort.ReadByte());
// } private void panel_Paint(object sender, PaintEventArgs e)
{ Graphics g = e.Graphics;
// int ii = i;
xGain = i;
i=(float)(i+0.01);
yGain = float.Parse(data[7].ToString());
data.Clear();
xNext = xGain + xOrigin;
yNext = yGain + yOrigin;
g.DrawLine(myPen, xOrigin, yOrigin, xNext, yNext);
xOrigin = xNext;
yOrigin = yNext;
} private void beginBtn_Click(object sender, EventArgs e)
{
this.beginBtn.Visible = false;
serialPort.Open();
}
private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
for (int d = 0; d < 8; d++)
{
data.Add(serialPort.ReadByte());
}
} private void closeBtn_Click(object sender, EventArgs e)
{
this.closeBtn.Visible = false;
serialPort.Close();
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Timers;namespace ecg3
{
public partial class Form1 : Form
{ ArrayList data = new ArrayList();
Pen myPen = new Pen(Color.Red);
#region xy增益与坐标申明
private float xGain;//x增益
System.Timers.Timer t = new System.Timers.Timer();
public Form1()
{
InitializeComponent();
}
public float XGain
{
get { return xGain; }
set { xGain = value; }
}
private float yGain;//y增益 public float YGain
{
get { return yGain; }
set { yGain = value; }
}
private float xOrigin;//x原点 public float XOrigin
{
get { return xOrigin; }
set { xOrigin = value; }
}
private float yOrigin;//y原点 public float YOrigin
{
get { return yOrigin; }
set { yOrigin = value; }
}
private float xNext;//x新坐标 public float XNext
{
get { return xNext; }
set { xNext = value; }
}
private float yNext;//y新坐标 public float YNext
{
get { return yNext; }
set { yNext = value; }
}
private float i; public float I
{
get { return i; }
set { i = value; }
}
#endregion
private void Form_Load(object sender, EventArgs e)
{
serialPort.Open();
xOrigin = 0;
yOrigin = this.panel.Height / 2;
serialPort.DataReceived+=new System.IO.Ports.SerialDataReceivedEventHandler(serialPort_DataReceived); t.Enabled = true;
t.Interval = 4;
t.AutoReset = true;
t.Elapsed += new ElapsedEventHandler(panel_Paint);//这个地方不能这样使用
} //private void t_Elapsed(object source, ElapsedEventArgs e)
// {
// data.Add(serialPort.ReadByte());
// } private void panel_Paint(object sender, PaintEventArgs e)
{ Graphics g = e.Graphics;
// int ii = i;
xGain = i;
i=(float)(i+0.01);
yGain = float.Parse(data[7].ToString());
data.Clear();
xNext = xGain + xOrigin;
yNext = yGain + yOrigin;
g.DrawLine(myPen, xOrigin, yOrigin, xNext, yNext);
xOrigin = xNext;
yOrigin = yNext;
} private void beginBtn_Click(object sender, EventArgs e)
{
this.beginBtn.Visible = false;
serialPort.Open();
}
private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
for (int d = 0; d < 8; d++)
{
data.Add(serialPort.ReadByte());
}
} private void closeBtn_Click(object sender, EventArgs e)
{
this.closeBtn.Visible = false;
serialPort.Close();
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货