基于VS 2015并使用C#编程实现串行通信

基于VS 2015并使用C#编程实现串行通信

1.话不多说,先上结果

长得还算标志的一幅图
下面简单说一下操作步骤直接上程序,如果有看不懂的地方,请看文章最后(下载下来慢慢看,只要不是傻瓜,你就一定行)。

2.先整一个结果图所示的窗体出来

1.打开vs,文件-新建-项目,建一个Windows窗体应用程序,自己改一下名称,选择一下保存位置点确定。如下图所示:
C#窗体应用程序
之后弹出下面界面:
j结果
接下来就是添加按钮、窗口、文本框了,操作如下:
点击[工具箱]–>选中[TextBox],如下图所示。(可以点小三角箭头,在下拉菜单中选中multiline改变框框大小)之后,选中 textbox,鼠标右击,选中[属性],修改 Name 为 txtSend.如图:
操作图
操作图
重复操作一下,修改Name为 txtReceive 如下图所示:
5
接下来,我们添加按钮,点击[工具箱]–>选中[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)
        {

        }
    }
}

至此,全部结束,不会加代码童鞋点下边链接:更加详细教程链接

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值