C#编写串口小助手_第1页
C#编写串口小助手_第2页
C#编写串口小助手_第3页
C#编写串口小助手_第4页
C#编写串口小助手_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在窗体上添加三个“GroupBox〞控件,分别将窗体分为“串口设置〞、“数据接收〞以及“数据发送〞三局部。添加假设干“Label〞和“ComboBox〞分别用于串口号、波特率、停止位、奇偶校验、数据位等的设置;添加两个“RodioButton〞用于字符显示和HEX显示的选择;添加假设干“Button〞用于串口检测、翻开串口、清空数据以及发送数据等功能按钮;最后分别在数据接收栏和数据发送栏中各添加一个“TextBox〞控件,用于数据的收发。对各个布置好的控件进行命名,方便编程。另外更改“字符显示〞的RodioButton控件属性中的Checked为true,使在翻开程序后默认选择“字符显示〞。更改数据接收栏中的TextBox控件属性中的ReadOnly为true,使这个空间只能显示接收到的数据,不能被编辑。更改窗体Form属性中的AcceptButton为btnSend〔发送数据按钮的名称〕,使在窗体下按下回车键关联“发送数据〞按钮。双击控件可以在程序中添加相应代码,本程序所有代码在本文的最后粘贴出来,大家可以根据代码以及注释来学习C#下的串口程序编写。另外现在的多数笔记本电脑已经没有串口,我们可以购置USB转串口模块来学习串口。另外告诉大家一个小诀窍:为了方便软件测试,可以将串口的RX和TX用杜邦线连接,这样串口发出的信息就能被自己接收到了,仅用一个串口就能调试该软件。usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.IO.Ports;namespaceWindowsFormsApplication1{publicpartialclassForm1:Form{SerialPortsp=null;//声明一个串口类boolisOpen=false;//翻开串口标志位boolisSetProperty=false;//属性设置标志位boolisHex=false;//十六进制显示标志位publicForm1(){InitializeComponent();//窗口初始化,net自动生成}privatevoidForm1_Load(objectsender,EventArgse){this.MaximumSize=this.Size;this.MinimumSize=this.Size;this.MaximizeBox=false;for(inti=0;i<10;i++)//最大支持到串口10,可根据自己需求增加{cbxCOMPort.Items.Add("COM"+(i+1).ToString());}cbxCOMPort.SelectedIndex=0;//列出常用的波特率cbxBaudRate.Items.Add("1200");cbxBaudRate.Items.Add("2400");cbxBaudRate.Items.Add("4800");cbxBaudRate.Items.Add("9600");cbxBaudRate.Items.Add("19200");cbxBaudRate.Items.Add("38400");cbxBaudRate.Items.Add("43000");cbxBaudRate.Items.Add("56000");cbxBaudRate.Items.Add("57600");cbxBaudRate.Items.Add("115200");cbxBaudRate.SelectedIndex=5;//列出停止位cbxStopBits.Items.Add("0");cbxStopBits.Items.Add("1");cbxStopBits.Items.Add("1.5");cbxStopBits.Items.Add("2");cbxStopBits.SelectedIndex=1;//列出数据位cbxDataBits.Items.Add("8");cbxDataBits.Items.Add("7");cbxDataBits.Items.Add("6");cbxDataBits.Items.Add("5");cbxDataBits.SelectedIndex=0;//列出奇偶校验位cbxParity.Items.Add("无");cbxParity.Items.Add("奇校验");cbxParity.Items.Add("偶校验");cbxParity.SelectedIndex=0;//默认为Char显示rbnChar.Checked=true;}privatevoidbtnCheckCOM_Click(objectsender,EventArgse)//检测哪些串口可用{boolcomExistence=false;//有可用串口标志位cbxCOMPort.Items.Clear();//去除当前串口号中的所有串口名称for(inti=0;i<10;i++){try{SerialPortsp=newSerialPort("COM"+(i+1).ToString());sp.Open();sp.Close();cbxCOMPort.Items.Add("COM"+(i+1).ToString());comExistence=true;}catch(Exception){continue;}}if(comExistence){cbxCOMPort.SelectedIndex=0;//使ListBox显示第1个添加的索引}else{MessageBox.Show("没有找到可用串口!","错误提示");}}privateboolCheckPortSetting()//检查串口是否设置{if(cbxCOMPort.Text.Trim()=="")returnfalse;if(cbxBaudRate.Text.Trim()=="")returnfalse;if(cbxDataBits.Text.Trim()=="")returnfalse;if(cbxParity.Text.Trim()=="")returnfalse;if(cbxStopBits.Text.Trim()=="")returnfalse;returntrue;}privateboolCheckSendData(){if(tbxSendData.Text.Trim()=="")returnfalse;returntrue;}privatevoidSetPortProperty()//设置串口的属性{sp=newSerialPort();sp.PortName=cbxCOMPort.Text.Trim();//设置串口名sp.BaudRate=Convert.ToInt32(cbxBaudRate.Text.Trim());//设置串口的波特率floatf=Convert.ToSingle(cbxStopBits.Text.Trim());//设置停止位if(f==0){sp.StopBits=StopBits.None;}elseif(f==1.5){sp.StopBits=StopBits.OnePointFive;}elseif(f==1){sp.StopBits=StopBits.One;}elseif(f==2){sp.StopBits=StopBits.Two;}else{sp.StopBits=StopBits.One;}sp.DataBits=Convert.ToInt16(cbxDataBits.Text.Trim());//设置数据位strings=cbxParity.Text.Trim();//设置奇偶校验位if(s.CompareTo("无")==0){sp.Parity=Parity.None;}elseif(s.CompareTo("奇校验")==0){sp.Parity=Parity.Odd;}elseif(s.CompareTo("偶校验")==0){sp.Parity=Parity.Even;}else{sp.Parity=Parity.None;}sp.ReadTimeout=-1;//设置超时读取时间sp.RtsEnable=true;//定义DataReceived事件,当串口收到数据后触发事件sp.DataReceived+=newSerialDataReceivedEventHandler(sp_DataReceived);if(rbnHex.Checked){isHex=true;}else{isHex=false;}}privatevoidbtnSend_Click(objectsender,EventArgse)//发送串口数据{if(isOpen)//写串口数据{try{sp.WriteLine(tbxSendData.Text);}catch(Exception){MessageBox.Show("发送数据时发生错误!","错误提示");return;}}else{MessageBox.Show("串口未翻开!","错误提示");return;}if(!CheckSendData())//检测要发送的数据{MessageBox.Show("请输入要发送的数据!","错误提示");return;}}privatevoidbtnOpenCom_Click(objectsender,EventArgse){if(isOpen==false){if(!CheckPortSetting())//检测串口设置{MessageBox.Show("串口未设置!","错误提示");return;}if(!isSetProperty)//串口未设置那么设置串口{SetPortProperty();isSetProperty=true;}try//翻开串口{sp.Open();isOpen=true;btnOpenCom.Text="关闭串口";//串口翻开后那么相关的串口设置按钮便不可再用cbxCOMPort.Enabled=false;cbxBaudRate.Enabled=false;cbxDataBits.Enabled=false;cbxParity.Enabled=false;cbxStopBits.Enabled=false;rbnChar.Enabled=false;rbnHex.Enabled=false;}catch(Exception){//翻开串口失败后,相应标志位取消isSetProperty=false;isOpen=false;MessageBox.Show("串口无效或已被占用!","错误提示");}}else{try//翻开串口{sp.Close();isOpen=false;isSetProperty=false;btnOpenCom.Text="翻开串口";//关闭串口后,串口设置选项便可以继续使用cbxCOMPort.Enabled=true;cbxBaudRate.Enabled=true;cbxDataBits.Enabled=true;cbxParity.Enabled=true;cbxStopBits.Enabled=true;rbnChar.Enabled=true;rbnHex.Enabled=true;}catch(Exception){lblStatus.Text="关闭串口时发生错误";}}}privatevoidsp_DataReceived(objectsender,SerialDataReceivedEventArgse){System.Threading.Thread.Sleep(100);//延时100ms等待接收完数据//this.Invoke就是跨线程访问ui的方法,也是本文的范例this.Invoke((EventHandler)(delegate{if(isHex==false){tbxRecvData.Text+=sp.ReadLine();}else{Byte[]ReceivedData=newByte[sp.BytesToRead];//创立接收字节数组sp.Read(ReceivedData,0,ReceivedData.Length);//读取所接收到的数据StringRecvDataText=null

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论