C#下传感器和PC之间的串口通信问题
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;
namespace HeartVoice
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
private System.IO.Ports.SerialPort com;
private void Form1_Load(object sender, EventArgs e)
{
com = new System.IO.Ports.SerialPort();
//获取所有的串口
this.com.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.IOrecieve);
Microsoft.VisualBasic.Devices.Computer pc = new Microsoft.VisualBasic.Devices.Computer();
foreach (string s in pc.Ports.SerialPortNames)
{
this.Comcombox.Items.Add(s);
}
}
private void IOrecieve(object sender, SerialDataReceivedEventArgs e)
{
byte[] readbuffer = new byte[com.ReadBufferSize];
com.Read(readbuffer, 0, com.BytesToRead);
for (int i = 0; i < com.BytesToRead; i++)
{
int temp = (int)readbuffer[i];
Data.Items.Add(temp.ToString());
}
}
private void OpenCOM_Click(object sender, EventArgs e)
{
if (Comcombox.SelectedItem != null)
{
com.Close();
com.PortName = Comcombox.SelectedItem.ToString();
com.BaudRate = 115200;
com.ReadBufferSize = 1024;
com.WriteBufferSize = 1024;
com.DataBits = 8;
com.StopBits = System.IO.Ports.StopBits.One;
com.Open();
com.DiscardInBuffer();
com.DiscardOutBuffer();
if (com.IsOpen)
{
OpenCOM.Enabled = false;
MessageBox.Show("串口已经打开!");
}
else
{
MessageBox.Show("串口打来失败!");
}
}
else
{
MessageBox.Show("请选择串口!");
}
for (int i = 1; i < 5; i++)
{
string num = i.ToString() + "K";
this.COMHZ.Items.Add(num);
}
this.COMHZ.DropDownStyle = ComboBoxStyle.DropDownList;
this.COMHZ.SelectedIndex = 0;
this.Enhance.Minimum = 1;
this.Enhance.Maximum = 10;
this.Enhance.Increment = 1;
}
private void CloseCOM_Click(object sender, EventArgs e)
{
com.Close();
OpenCOM.Enabled = true;
MessageBox.Show("串口已关闭!");
}
private void Start_Click(object sender, EventArgs e)
{
if (!com.IsOpen)
{
MessageBox.Show("请选择串口并打开!");
}
else
{
byte[] command = new byte[2];
command[0] = 0x20;
command[1] = 0x32;//开始采样命令
string comstring = Encoding.UTF8.GetString(command);
com.Write(comstring);
}
}
private void Close_Click(object sender, EventArgs e)
{
if (!com.IsOpen)
{
MessageBox.Show("请选择串口并打开!");
}
else
{
byte[] command = new byte[2];
command[0] = 0x20;
command[1] = 0x33;//停止采样命令
string comstring = Encoding.UTF8.GetString(command);
com.Write(comstring);
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (com.IsOpen)
{
byte[] command = new byte[2];
command[0] = 0x20;
command[1] = 0x33;//停止采样命令
string comstring = Encoding.UTF8.GetString(command);
com.Write(comstring);
com.DiscardInBuffer();
com.DiscardOutBuffer();
com.Close();
}
}
private void COMHZ_SelectedIndexChanged(object sender, EventArgs e)
{
byte[] command1 = new byte[3];//调节采样频率命令
byte[] command2 = new byte[3];
byte[] command3 = new byte[3];
byte[] command4 = new byte[3];
command1[0] = command2[0] = command3[0] = command4[0] = 0x20;
command1[1] = command2[1] = command3[1] = command4[1] = 0x37;
command1[2] = 0x0;
command2[2] = 0x1;
command3[2] = 0x2;
command4[2] = 0x3;
string comstring;
switch (this.COMHZ.SelectedIndex)
{
case 0:
comstring = Encoding.UTF8.GetString(command1);
com.Write(comstring);
break;
case 1:
comstring = Encoding.UTF8.GetString(command2);
com.Write(comstring);
break;
case 2:
comstring = Encoding.UTF8.GetString(command3);
com.Write(comstring);
break;
case 3:
comstring = Encoding.UTF8.GetString(command4);
com.Write(comstring);
break;
default:
break;
}
}
private void Enhance_ValueChanged(object sender, EventArgs e)
{
byte[] command1 = new byte[] { 0x20, 0x34, 0x00 };
byte[] command2 = new byte[] { 0x20, 0x34, 0x01 };
byte[] command3 = new byte[] { 0x20, 0x34, 0x02 };
byte[] command4 = new byte[] { 0x20, 0x34, 0x03 };
byte[] command5 = new byte[] { 0x20, 0x34, 0x04 };
byte[] command6 = new byte[] { 0x20, 0x34, 0x05 };
byte[] command7 = new byte[] { 0x20, 0x34, 0x06 };
byte[] command8 = new byte[] { 0x20, 0x34, 0x07 };
byte[] command9 = new byte[] { 0x20, 0x34, 0x08 };
byte[] command10 = new byte[] { 0x20, 0x34, 0x09 };//设置放大倍数命令
string comstring;
int num = Convert.ToInt32(this.Enhance.Value.ToString());
switch (num)
{
case 1:
comstring = Encoding.UTF8.GetString(command1);
com.Write(comstring);
break;
case 2:
comstring = Encoding.UTF8.GetString(command2);
com.Write(comstring);
break;
case 3:
comstring = Encoding.UTF8.GetString(command3);
com.Write(comstring);
break;
case 4:
comstring = Encoding.UTF8.GetString(command4);
com.Write(comstring);
break;
case 5:
comstring = Encoding.UTF8.GetString(command5);
com.Write(comstring);
break;
case 6:
comstring = Encoding.UTF8.GetString(command6);
com.Write(comstring);
break;
case 7:
comstring = Encoding.UTF8.GetString(command7);
com.Write(comstring);
break;
case 8:
comstring = Encoding.UTF8.GetString(command8);
com.Write(comstring);
break;
case 9:
comstring = Encoding.UTF8.GetString(command9);
com.Write(comstring);
break;
case 10:
comstring = Encoding.UTF8.GetString(command10);
com.Write(comstring);
break;
}
}
}
}
哪位高手大侠给看看这段程序到底哪儿错了?为什么读出的数据中有那么多0啊????