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

C# 串口与窗体应用程序的连接

2016-01-20 16:46 786 查看
这几天又被安排看了几天的书,,,,,真是乏味啊。。。。所以当boss说要我试试自己创建一个窗体应用程序,实现与串口的连接的时候,整个人就跟打了鸡血一样,兴趣和动力立马就上来了啊。

好吧,废话不多说,直接切入正题。

第一部分 设计窗体

不多说,直接设计成下面这个样子就行了,用的控件有GroupBox、button、TextBox(TextBox的MultiLine属性设置成了true,表示自动换行)。



(相关链接:设置端口的方法

既然关系到串口,这里我们要做的,就是要有串口才行嘛,我们可以直接使用软件生成串口模拟操作,下面提供地址:

度网盘下载地址:链接: http://pan.baidu.com/s/1jHpfyjs 密码: kfhe

安装后将压缩包里面 .dll格式的文件拷贝替换到安装目录下,打开软件即可生成端口。



第二部分 代码实现

using System.IO.Ports;
namespace WindowsFormsApplication8
{
public partial class Form1 : Form
{
//Send
SerialPort comm = new SerialPort();//新增串口
//Read
SerialPort comm2 = new SerialPort();//新增串口

StringBuilder builder = new StringBuilder();//新增缓存变量
string Buffer_rev = " ";//接收串口的缓存

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
comm.PortName = "Com" + "1";//设置端口
comm.BaudRate = 9600;//设置波特率

comm2.PortName = "Com" + "2";//设置端口
comm2.BaudRate = 9600;//设置波特率

comm.Open();
comm2.Open();

comm2.DataReceived += comm2_DataReceived;
}
void comm2_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (comm2 == null || comm2.IsOpen == false) return;
if (builder.Length > 100)//假设接收的内容长度不能超过100个字符
{
builder = new StringBuilder();//超出100个字符就清空
}

int n = comm2.BytesToRead;//记录缓存数量
byte[] buf = new byte
;//声明一个临时数组存储当前来的串口数据
comm2.Read(buf, 0, n);//读取缓冲数据(读取buf数组中从0开始的n个字符)
foreach (byte item in buf)//遍历
{
builder.Append((char)item);//拼接字符串
}
//Invoke()的作用是:在应用程序的主线程上执行指定的委托。
//一般应用:在辅助线程中修改UI线程(主线程)中对象的属性时,调用this.Invoke();
//呵呵了。。。。shenmegui
//目测通俗点讲应该就是将发送出去的数据在接收端显示出来的意思。。。
this.Invoke(new Action(() =>
{
this.textBox1.Text = builder.ToString();
}));
}
private void button1_Click(object sender, EventArgs e)//发送数据
{
try
{
string SendStr = textBox2.Text + '\r';//获取要发送的数据,并添加回车符
if (this.comm.IsOpen)
this.comm.Write(SendStr);//发送数据
else
MessageBox.Show("串口已关闭");
}
catch (Exception ex)
{
}
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void textBox2_TextChanged(object sender, EventArgs e)
{

}

private void button2_Click(object sender, EventArgs e)//清除
{
textBox2.Text = null;
}
}
}
然后运行,无错。。

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