您的位置:首页 > 编程语言 > C#

用C#在一台电脑上面做串口调试的程序代码

2013-08-30 15:40 671 查看
今天要做一个串口的调试小程序,我就在一个例子的上面做了一些小的修改!!

代码如下:

sing 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;

namespace SerialPortTest

{

public partial class Form1 : Form

{

SerialPort sp = null;

bool IsOpen = false;

bool IsSetProperty = false;

public Form1()

{

InitializeComponent();

}

private void btnExit_Click(object sender, EventArgs e) //退出程序

{

sp.Close();

Application.Exit();

}

private void btnFindPort_Click(object sender, EventArgs e) //检测可用的串口

{

PortChoose.Items.Clear();

for (int i = 0; i <256; i++)

{

try

{

SerialPort sp =new SerialPort("COM"+(i+1).ToString());

sp.Open();

sp.Close();

PortChoose.Items.Add("COM"+(i+1).ToString());

}

catch(Exception)

{

labelState.Text= "COM"+(i+1).ToString()+"不可用";

continue;

}

}

}

private void Form1_Load(object sender, EventArgs e)

{

this.MaximumSize = this.Size;

this.MinimumSize = this.Size;

for (int i = 0; i < 256; i++)

{

PortChoose.Items.Add("COM" + (i + 1).ToString());

}

}

private bool CheckPortSetting() //检查串口设置

{

if (PortChoose.Text.Trim() == "" || PortJiOu.Text.Trim() == "" || PortBaude.Text.Trim() == "" || PortData.Text.Trim() == "" || PortStop.Text.Trim() == "")

{

return false;

}

else

{

return true;

}

}

private bool SendData()

{

if (SendDataBox.Text.Trim() == "")

{ return false; }

else

{ return true;}

}

private void SetPortProperty() //设置串口的属性

{

sp = new SerialPort();

sp.PortName = PortChoose.Text.Trim();

sp.BaudRate = Convert.ToInt32( PortBaude.Text.Trim());

float f = Convert.ToSingle(PortStop.Text.Trim());

if (f == 0)

{

sp.StopBits = StopBits.None;

}

else if (f == 1)

{

sp.StopBits = StopBits.One;

}

else if (f == 1.5)

{

sp.StopBits = StopBits.OnePointFive;

}

else if (f == 2)

{

sp.StopBits = StopBits.Two;

}

else

{

sp.StopBits = StopBits.One;

}

sp.DataBits = Convert.ToInt16(PortData.Text.Trim());

//设置ji偶校验位

string s = PortJiOu.Text.Trim();

if (s.CompareTo("无")==0)

{

sp.Parity = Parity.None;

}

else if (s.CompareTo("奇校验") == 0)

{

sp.Parity = Parity.Odd;

}

else if (s.CompareTo("偶校验") == 0)

{

sp.Parity = Parity.Even;

}

else

{

sp.Parity = Parity.None;

}

sp.ReadTimeout = -1; //设置超时读取时间

//打开串口

try

{

sp.Open();

IsOpen = true;

}

catch (Exception)

{

labelState.Text = "打开串口时发生错误!";

}

}

private void btnSendData_Click(object sender, EventArgs e) //发送数据

{

if (!CheckPortSetting())

{

MessageBox.Show("串口未设置!", "错误提示!");

return;

}

if (!SendData())

{

MessageBox.Show("输入要发送的数据!", "错误提示!");

return;

}

if (!IsSetProperty)

{

SetPortProperty();

IsSetProperty = true;

}

if (IsOpen)

{

try

{

sp.Close();

sp.Open();

sp.WriteLine(SendDataBox.Text);

}

catch (Exception)

{

labelState.Text = "发送数据时发生错误!";

return;

}

}

else

{

MessageBox.Show("串口未打开!","错误提示!");

return;

}

SendDataBox.Text = "";

}

private void btnAcepptData_Click(object sender, EventArgs e) /接收数据

{

if (IsOpen)

{

try

{

//读取串口数据

AcceptDataBox.Text += sp.ReadLine();

}

catch (Exception)

{

labelState.Text = "读取失败!";

return;

}

finally

{

sp.Close();

}

}

else

{

MessageBox.Show("串口未打开!", "提示!");

return;

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: