zoukankan      html  css  js  c++  java
  • C# 如何操作串口

    1.首先要引用  System.IO.Ports

    using 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;
    using System.Threading;
    
    namespace FrmScanProt
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            //APICloud  //app
    
            string text = "";
            SerialPort sp = new SerialPort();
    
            delegate void UpdateTextEventHandler(string text);  //委托,此为重点.
            UpdateTextEventHandler updateText;  //事件
    
    
            private void Form1_Load(object sender, EventArgs e)
            {
                AddParameters();
    
    
                string[] itemName = SerialPort.GetPortNames();  //获取当前计算机串型端口名称数组.
                cboPortName.Items.Clear();
                foreach (var item in itemName)
                {
                    cboPortName.Items.Add(item);
                }
    
                cboPortName.SelectedIndex = 0;
                cboBaudRate.SelectedIndex = 1;
                cboDataBit.SelectedIndex = 3;
                cboParityBit.SelectedIndex = 0;
                cboStopBit.SelectedIndex = 1;
    
                updateText += new UpdateTextEventHandler(UpdateTextBox);    //委托方法
                sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived); //处理串口对象的数据接收事件的方法.
    
                sp.Close();
                lblScan.Text = "未开启采集程序.";
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                if (txtCode.Text != "")
                {
                    listBox1.Items.Add(txtCode.Text);
                    txtCode.Text = "";
                    txtCode.Focus();
                }
                else { MessageBox.Show(" 条码不能为空!"); txtCode.Focus(); }
            }
    
            private void btnStartScan_Click(object sender, EventArgs e)
            {
                if (!sp.IsOpen)
                {
                    sp.Open();  //打开一个新的串口连接.
                    lblScan.Text = "采集中...";
                    txtCode.Focus();
                }
            }
    
            private void btnEndScan_Click(object sender, EventArgs e)
            {
                if (sp.IsOpen)
                {
                    sp.Close(); //关闭一个串口连接.
                    lblScan.Text = "采集结束.";
                    txtCode.Focus();
                }
            }
    
            /// <summary>
            /// 串口名称
            /// </summary>
            private void cboPortName_SelectedIndexChanged(object sender, EventArgs e)
            {
                sp.PortName = cboPortName.Items[cboPortName.SelectedIndex].ToString();
            }
    
            /// <summary>
            /// 波特率(每秒传送字节数)
            /// </summary>
            private void cboBaudRate_SelectedIndexChanged(object sender, EventArgs e)
            {
                //获取或设置串口波特率
                // cboBaudRate.Items.Add(sp.BaudRate);
                sp.BaudRate = Convert.ToInt32(cboBaudRate.Items[cboBaudRate.SelectedIndex].ToString());
    
            }
            /// <summary>
            /// 数据字节
            /// </summary>
            private void cboDataBit_SelectedIndexChanged(object sender, EventArgs e)
            {
                //设置每个字节的标准数据长度
                sp.DataBits = Convert.ToInt32(cboDataBit.Items[cboDataBit.SelectedIndex].ToString());
            }
            /// <summary>
            /// 停止位置
            /// </summary>
            private void cboStopBit_SelectedIndexChanged(object sender, EventArgs e)
            {
                //设置每个字节的标准停止位数
                sp.StopBits =(StopBits)cboStopBit.SelectedIndex;
            }
            /// <summary>
            /// 奇偶位置
            /// </summary>
            private void cboParityBit_SelectedIndexChanged(object sender, EventArgs e)
            {
                //设置奇偶校验检查协议
               // sp.Parity = Parity.Odd;
                sp.Parity = (Parity)System.Enum.Parse(typeof(Parity), cboParityBit.SelectedIndex.ToString());
            }
            /// <summary>
            /// 接收到的数据
            /// </summary>
            private void sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                if(!sp.IsOpen)
                {
                    MessageBox.Show("请先启用扫描枪采集...");
                    Thread.Sleep(2000);
                    this.Close();
                    return;
                }
    
                Thread.Sleep(100);
                byte[] buffer = Encoding.UTF8.GetBytes(sp.ReadExisting());
                string newString = Encoding.UTF8.GetString(buffer);
    
                //string readString = sp.ReadExisting();//读取串口对象的流和输入缓冲区所有立即可用的字节流.
    
                this.Invoke(updateText, new string[] { newString });   //控件基础句柄的线程上,执行委托.
            }
    
            /// <summary>
            /// 获取数据.
            /// </summary>
            private void UpdateTextBox(string text)
            {
                this.txtCode.Text = text;
                listBox1.Items.Add(txtCode.Text);
                txtCode.Text = "";
            }
    
    
            private void AddParameters()
            {
                this.cboBaudRate.Items.AddRange(new object[] { "4800", "9600", "14400", "19200", "38400", "56000", "57600", "115200", "128000" });
    
                this.cboDataBit.Items.AddRange(new object[] { "5", "6", "7", "8" });
    
                this.cboStopBit.Items.AddRange(new object[] { "0.5", "1", "1.5", "2" });
    
                this.cboParityBit.Items.AddRange(new object[]{"none","odd","even"});
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                listBox1.Items.Clear();
            }
        }
    }

  • 相关阅读:
    Sa提权sql语句大全
    转载 使用AJAX实现动态刷新页面功能
    VirtualBox宿主机与虚拟机的数据共享数据空间
    SP_OACreate提权经验
    linux mysql启动错误
    Microsoft SQL Server SA权限最新入侵方法 不用net user添加账户
    Java中关于HashMap的使用和遍历
    转载 突破360防黑加固添加用户
    个人随想BLOG
    面试题收集
  • 原文地址:https://www.cnblogs.com/bmyblogs/p/6509981.html
Copyright © 2011-2022 走看看