C# 实现串口发送接收 完整的例子

//程序设计:段利庆 QQ:14035344

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.IO.Ports;

using System.Threading;

namespace MyMailSample
{
    public partial class FrmComm : Form
    {
        //定义模块级串口对象
        public SerialPort SpCom1 = new SerialPort("COM1", 4800, Parity.None, 8, StopBits.One);
        public FrmComm()
        {
            InitializeComponent();
            //添加串口接收事件方法
            this.SpCom1.DataReceived += new SerialDataReceivedEventHandler(SpCom1_DataReceived);
        }

        //接收事件方法定义
        void SpCom1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            //throw new Exception("The method or operation is not implemented.");
            byte[] b = new byte[4];
            //SpCom1.Read(b, 0, 1);
            //MessageBox.Show(b[0].ToString());


        }

        private void FrmComm_Load(object sender, EventArgs e)
        {
            //打开串口
            SpCom1.Open();
        }

        private void FrmComm_FormClosed(object sender, FormClosedEventArgs e)
        {
            //关闭串口
            SpCom1.Close();
        }

        private void butSend_Click(object sender, EventArgs e)
        {
            byte[] b = new byte[4]; //{ 0,0,0,0};
            b[0] = 1;
            b[1] = 240;
            b[2] = 0;
            b[3] = 0;


            //发送读卡指令
            SpCom1.Write(b, 0, 4);

        }

        private void butReceive_Click(object sender, EventArgs e)
        {


            byte[] b = new byte[4];
            if (SpCom1.BytesToRead < 4)
            {
                MessageBox.Show("接收缓冲数据小于4");
                //取走剩余的接收缓冲区数据
                SpCom1.Read(b, 0, SpCom1.BytesToRead);
                return;
            }
            SpCom1.Read(b, 0, 3);

            textBox1.Text = b[0].ToString() + " " + b[1].ToString() + " " + b[2].ToString() + " " + b[3].ToString();

        }

        private void butBeep_Click(object sender, EventArgs e)
        {

            byte[] b = new byte[4]; //{ 0,0,0,0};
            b[0] = 1;
            b[1] = 243;
            b[2] = 0;
            b[3] = 0;


            //读卡器 3短音提示
            SpCom1.Write(b, 0, 4);
        }

        private void butReadCard_Click(object sender, EventArgs e)
        {
            butSend_Click(sender, e);
            //采用单线程保护延时,防止其他事件在处理结束前 插入其中(主要针对 串口读写的操作 方法)
            Thread.Sleep(1000);
            butReceive_Click(sender, e);
        }

        private void butReceives_Click(object sender, EventArgs e)
        {
           

            Int32 len;
            len = SpCom1.BytesToRead;
            if (len ==0)
            {
                MessageBox.Show("接收缓冲无数据");

                return;
            }

            byte[] b = new byte[len];
            SpCom1.Read(b, 0, len);

            string s = "";

            for (int i = 0; i < len; i++)
            {
                s = s + b[i].ToString("X2") + " ";
            }
           
            textBox1.Text = s;
        }

    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值