基于VS 2015并使用C#编程实现串行通信
1.话不多说,先上结果
下面简单说一下操作步骤直接上程序,如果有看不懂的地方,请看文章最后(下载下来慢慢看,只要不是傻瓜,你就一定行)。
2.先整一个结果图所示的窗体出来
1.打开vs,文件-新建-项目,建一个Windows窗体应用程序,自己改一下名称,选择一下保存位置点确定。如下图所示:
之后弹出下面界面:
接下来就是添加按钮、窗口、文本框了,操作如下:
点击[工具箱]–>选中[TextBox],如下图所示。(可以点小三角箭头,在下拉菜单中选中multiline改变框框大小)之后,选中 textbox,鼠标右击,选中[属性],修改 Name 为 txtSend.如图:
重复操作一下,修改Name为 txtReceive 如下图所示:
接下来,我们添加按钮,点击[工具箱]–>选中[Button],拖至工作区,选中按钮然后右键选择属性,并且命名Name为:btnClearSend, 另外,显示部分 Text 为:清除发送,如下图:
同样方法,(添加其他按钮)操作如下:
“清除接收”按钮
–>Name: btnClearRec
–>Text: 清除接收
“打开串口”按钮
–>Name: btnOpenPort
–>Text: 打开串口
“发送”按钮
–>Name: btnSend
–>Text: 发送
都整完以后这样:
最后一步了,点击[工具箱]–>[Label],并设置显示(Text,显示作用),如
图所示:
然后,点击[工具箱]–>[ComboBox],拖动至“端口号下方”,右键属性,将 Name 修改为:cboPortName,Items 中添加 Com 端口号,如图所示:
利用相同的方法,将“波特率”“奇偶校验”“数据位”“停止位”设置完成,,对“波特率”“奇偶校验”“数据位”“停止位”下的[combo box] 进行设置。
“波特率”下方 combobox.
–>Name:cboBaudRate
–>Items: 9600 14400 19200 115200[注意每行一个]
“奇偶校验”下方 combobox.
–>Name:cboTest
–>Items: None Odd Even[注意每行一个]
“数据位”下方 combobox.
–>Name:cboData
–>Items:8 7 6 5 4[注意每行一个]
“停止位”下方 combobox.
–>Name:cboStop
–>Items: 1 2[注意每行一个]
至此,我们窗体部分就大功告成了了(注意保存结果),结果如下(也就是一开始的结果图):
3.接下来就是加代码了,看看看下边
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
namespace SerialPort02
{
public partial class Form1 : Form
{
SerialPort SpCom = new SerialPort();
public Form1()
{
InitializeComponent();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void 清除发送_Click(object sender, EventArgs e)
{
txtSend.Text = string.Empty;
}
private void Textbox_Load(object sender, EventArgs e)
{
SpCom.DataReceived += SpCom_DataReceived;
}
private void SpCom_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int length = SpCom.BytesToRead;
byte[] recData = new byte[length];
SpCom.Read(recData, 0, length);
string recText = Encoding.GetEncoding("GB2312").GetString(recData);
//更新接收区
txtReceive.Invoke(new EventHandler(delegate
{
txtReceive.AppendText(recText);
}));
}
private void btnClearRec_Click(object sender, EventArgs e)
{
txtReceive.Text = string.Empty;
}
private void btnOpenPort_Click(object sender, EventArgs e)
{
if (SpCom.IsOpen)
{
SpCom.Close();
btnOpenPort.Text = "打开串口";
}
else
{
InitPort();
try
{
SpCom.Open();
btnOpenPort.Text = "关闭串口";
MessageBox.Show("串口初始化成功!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
private void btnSend_Click(object sender, EventArgs e)
{
try
{
byte[] encodeBytes =
Encoding.GetEncoding("GB2312").GetBytes(txtSend.Text);
int length = encodeBytes.Length;
SpCom.Write(encodeBytes, 0, length);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//初始化串口的函数
public void InitPort()
{
SpCom.PortName = cboPortName.Text;
SpCom.BaudRate = int.Parse(cboBaudRate.Text);
SpCom.DataBits = int.Parse(cboData.Text);
SpCom.Parity = (Parity)Enum.Parse(typeof(Parity), cboTest.Text);
SpCom.StopBits = (StopBits)Enum.Parse(typeof(StopBits),
cboStop.Text);
}
private void txtReceive_TextChanged(object sender, EventArgs e)
{
}
}
}
至此,全部结束,不会加代码童鞋点下边链接:更加详细教程链接