• zhuhualun
    了解作者
  • C#
    开发工具
  • 608KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 6
    下载次数
  • 2020-07-30 19:22
    上传日期
C#窗体串口通讯界面编程,可用于和stm32下位机串口通讯
C#窗体串口通讯界面编程.zip
内容介绍
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; using System.Text.RegularExpressions; namespace 串口 { public partial class Form1 : Form { SerialPort sp1 = new SerialPort(); public Form1() { InitializeComponent(); } private void zedGraphControl1_Load(object sender, EventArgs e) { } private void Form1_Load(object sender, EventArgs e) { Control.CheckForIllegalCrossThreadCalls = false; sp1.DataReceived += new SerialDataReceivedEventHandler(sp1_DataReceived); string[] str = SerialPort.GetPortNames(); //检查是否有串口 if (str == null) { MessageBox.Show("本机没有串口!", "Error"); return; } foreach (string s in System.IO.Ports.SerialPort.GetPortNames()) { cbSerial.Items.Add(s); //添加串口 } cbSerial.SelectedIndex = 0; //各默认选择项 cbBaudRate.SelectedIndex = 3; cbDataBits.SelectedIndex = 3; cbStop.SelectedIndex = 0; cbParity.SelectedIndex = 0; rdbSend.Checked = true; //发送接收默认选择16进制 rdbRcv.Checked = true; } private void button1_Click(object sender, EventArgs e) { if (!sp1.IsOpen) //如果没有打开 { try { string serialName = cbSerial.SelectedItem.ToString(); sp1.PortName = serialName; //设置各串口号 string strBaudRate = cbBaudRate.Text; //串口设置 string strDateBits = cbDataBits.Text; string strStopBits = cbStop.Text; Int32 iBaudRate = Convert.ToInt32(strBaudRate); Int32 iDateBits = Convert.ToInt32(strDateBits); sp1.BaudRate = iBaudRate; //波特率 sp1.DataBits = iDateBits; //数据位 switch (cbStop.Text) //停止位 { case "1": sp1.StopBits = StopBits.One; break; case "1.5": sp1.StopBits = StopBits.OnePointFive; break; case "2": sp1.StopBits = StopBits.Two; break; default: MessageBox.Show("Error:参数不正确!", "Error"); break; } switch (cbParity.Text) //校验位 { case "无": sp1.Parity = Parity.None; break; case "奇校验": sp1.Parity = Parity.Odd; break; case "偶校验": sp1.Parity = Parity.Even; break; default: MessageBox.Show("Error:参数不正确!", "Error"); break; } if (sp1.IsOpen == true) { sp1.Close(); } //状态栏设置 tsSpNum.Text = "串口号:" + sp1.PortName + "|"; tsBaudRate.Text = "波特率:" + sp1.BaudRate + "|"; tsDataBits.Text = "数据位:" + sp1.DataBits + "|"; tsStopBits.Text = "停止位:" + sp1.StopBits + "|"; tsParity.Text = "校验位:" + sp1.Parity + "|"; //设置必要控件不可用 cbSerial.Enabled = false; cbBaudRate.Enabled = false; cbDataBits.Enabled = false; cbStop.Enabled = false; cbParity.Enabled = false; sp1.Open(); button1.Text = "关闭串口"; } catch (System.Exception ex) { MessageBox.Show("Error:" + ex.Message, "Error"); return; } } else { //状态栏设置(串口关闭的情况下) tsSpNum.Text = "串口号:未指定|"; tsBaudRate.Text = "波特率:未指定|"; tsDataBits.Text = "数据位:未指定|"; tsStopBits.Text = "停止位:未指定|"; tsParity.Text = "校验位:未指定|"; //恢复控件功能 cbSerial.Enabled = true; cbBaudRate.Enabled = true; cbDataBits.Enabled = true; cbStop.Enabled = true; cbParity.Enabled = true; sp1.Close(); button1.Text = "打开串口"; } } private void btnSend_Click(object sender, EventArgs e) { if (!sp1.IsOpen) //如果没有打开 { MessageBox.Show("清先打开串口!", "Error"); return; } string strSend = txtSend.Text; if (rdbSend.Checked == true) { string sendBuf = strSend; //发送缓冲 string sendnoNull = sendBuf.Trim(); //去除前后空白字符 string sendnoCommaE=sendnoNull.Replace(',',' '); //去掉英文逗号 string sendnoCommaC=sendnoCommaE.Replace(',',' ');//去掉中文逗号 string sendnoStr1=sendnoCommaC.Replace("0x",""); string sendnoStr2=sendnoStr1.Replace ("0X",""); string[] strArray = sendnoStr2.Split(' '); int byteBufferLength = strArray.Length; for (int i = 0; i<strArray.Length;i++ ) ////去掉数组中的空字符元素 { if (strArray[i] == "") { byteBufferLength--; } } byte[] byteBuffer=new byte[byteBufferLength]; //定义除去空字符后的新发送缓冲数组 int ii=0; for(int i=0;i<strArray.Length;i++) { Byte[] bytesOfStr=Encoding.Default.GetBytes(strArray[i]);/////////???将每个字符元素编码为一个字节 int decNum=0; if(strArray[i]=="") { continue ; } else { decNum=Convert.ToInt32(strArray[i],16); //将空字符以外的字符元素转换成32位有符号整形 } try //保证发送文本框中只能输入一个字节的字符即eb 90等 { byteBuffer[ii]=Convert.ToByte(decNum); } catch (System .Exception ex) { MessageBox.Show ("字节越界,请逐个字节输入!","Error"); return; } ii++; } sp1.Write(byteBuffer,0,byteBuffer.Length); } else //以字符串形式发送 { sp1.WriteLine(txtSend.Text); } } void sp1_DataReceived(object sender, SerialDataRe
评论
    相关推荐
    • C#串口通讯
      c#实现字符串的串口通讯 一条多条多次发送以及中英文转化,都有注释
    • C#串口通讯
      C#串口通讯网上收集的源码,又十几个例子,学习串口编程的时候下载的。
    • 串口通讯C#
      看了很多用VC开发串口通信的案例,本资源是基于C#开发的串口通讯,简单入手打造串口上位机
    • 串口通讯C#.rar
      用于串口通讯c#程序,包括了串口通讯必要的内容,用于上位机与下位机通讯,可以设置波特率,奇偶校验位等
    • c# 串口通讯
      利用c#事件机制注册port.DataReceived实现读取串口缓存区,
    • PC串口通讯C#项目源码
      程序建立了一个事件委托,可在后台自动事件触发接收,具有收发2种功能,能对串口进行设置,具有右键菜单.
    • C#串口通讯
      简单的C#串口调用 串口号 波特率 自选 可以显示返回的数值
    • C#串口通讯
      C#做的上位机 用于串口通讯,方便的与下位机进行通讯
    • C#串口通讯
      基于C#WindowsForm做的RS485串口数据通讯