c#c++串口设计

 代码如下

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Serialization;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;

namespace 串口
{

    public partial class Form1 : Form
    {
        //SerialPort serialPort1 = new SerialPort();
        private int received_count = 0;
        private int total_count = 0;
        private bool serial_open_state = false;

        public Form1()
        {
            InitializeComponent();


        }

        void UpdataSerialPort()
        {
            string[] serialPort1 = SerialPort.GetPortNames();
            cbox.Items.Clear();
            foreach (string Port in serialPort1)
            {
                cbox.Items.Add(Port);
            }
            if (cbox.Items.Count > 0)
                cbox.SelectedIndex = 0;
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            UpdataSerialPort();
        }

        private void btn_scan_Click(object sender, EventArgs e)
        {
            UpdataSerialPort();
        }

        private void UserRecSerialPortDate(byte[] data)
        {
            StringBuilder str = new StringBuilder();

            //string str = System.Text.Encoding.UTF8.GetString(data);


            if (chb_recDataShowHex.Checked == true)
            {
                foreach (byte b in data)
                {
                    str.Append(b.ToString("X02") + " ");
                }

                if (chb_hexWordWrapAuto.Checked == true)
                {
                    str.Append("\r\n");
                }

            }
            else
            {
                str.Append(System.Text.Encoding.UTF8.GetString(data));
            }
            received_count += data.Length;
            Invoke(new MethodInvoker(delegate
            {
                textBox1.Text += str;
            }));
        }


        private void UserOpenSerialPort()
        {
            serialPort1.Open();

            //判断
            if (serialPort1.IsOpen == true)
            {
                serial_open_state = true;
                btn_open.Text = "关闭串口";
                textBox1.Text += "打开成功\r\n";

            }
            //禁用控件
            cbox.Enabled = false;
            cbox2.Enabled = false;
        }

        private void UserCloseSerialPort()
        {
            serialPort1.Close();
            //更新串口状态
            serial_open_state = false;
            btn_open.Text = "打开串口";
            textBox1.Text += "关闭串口\r\n";
            cbox.Enabled = true;
            cbox2.Enabled = true;

        }

        private void btn_open_Click(object sender, EventArgs e)
        {

            if (serial_open_state == true)
            {

                UserCloseSerialPort();

            }
            else
            {
                //打开串口

                //判断串口号是否为空
                if (cbox.Text == "" || cbox.Text == null)
                {
                    MessageBox.Show("串口号为空");
                    return;
                }
                //设置串口号
                serialPort1.PortName = cbox.Text;
                //打开串口

                serialPort1.BaudRate = int.Parse(cbox2.Text);          //设置波特率
                serialPort1.DataBits = int.Parse(cbox3.Text);          //设置数据位

                //serialPort1.BaudRate = Convert.ToInt32(cbox2.Text);

                //设置校验方式
                switch (cbox4.Text)
                {
                    case "None":
                        serialPort1.Parity = Parity.None;
                        break;
                    case "Even":
                        serialPort1.Parity = Parity.Even;
                        break;
                    case "Mark":
                        serialPort1.Parity = Parity.Mark;
                        break;
                    case "Odd":
                        serialPort1.Parity = Parity.Odd;
                        break;
                }
                //设置停止位
                switch (cbox5.Text)
                {
                    case "1":
                        serialPort1.StopBits = StopBits.One;
                        break;
                    case "1.5":
                        serialPort1.StopBits = StopBits.OnePointFive;
                        break;
                    case "2":
                        serialPort1.StopBits = StopBits.Two;
                        break;
                }

                UserOpenSerialPort();


            }

        }

        private void serialPort1_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
        {
            int n = serialPort1.BytesToRead;
            byte[] data = new byte[n];
            if (n > 0)
            {
                serialPort1.Read(data, 0, n);
                UserRecSerialPortDate(data);
            }
        }

        private void btn_sendData_Click(object sender, EventArgs e)
        {
            serialPort1.Write("hello world");

            byte[] data = new byte[10];
            //获取用户输入框内容,并转换为字节数组

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (SerialPort.GetPortNames().Contains(cbox.Text) == false)
            {
                UserCloseSerialPort();
                statusStrip1.Text = cbox.Text + "丢失,串口自动关闭";
            }
        }

        private void btn_empty_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
        }

        private void btn_saveRecData_Click(object sender, EventArgs e)
        {
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.Filter = "文本文件|*.txt";
            // 显示对话框
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                // 文件名
                string fileName = dialog.FileName;
                // 创建文件,准备写入
                FileStream fs = File.Open(fileName,
                        FileMode.Create,
                        FileAccess.Write);
                StreamWriter wr = new StreamWriter(fs);

                // 逐行将textBox1的内容写入到文件中
                foreach (string line in textBox1.Lines)
                {
                    wr.WriteLine(line);
                }

                // 关闭文件
                wr.Flush();
                wr.Close();
                fs.Close();

                StreamWriter sw = new StreamWriter(btn_saveRecData.Text, false, Encoding.UTF8);
                sw.Write(textBox1.Text);
                sw.Close();
                MessageBox.Show("保存成功!", "提示");
            }


        }

    }
 }
                                赵龙威 物联网应用技术二班

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值