c#串口收发数据
2015-10-15 17:02
465 查看
2015-11-20 15:10:09
补充:串口要添加对应的空间
//获取com口
using System.IO.Ports;
c#有串口控件
设计界面如下:
![](https://img-blog.csdn.net/20151015170240952)
重要的几个函数
效果图:
![](https://img-blog.csdn.net/20151015171155082)
注意:串口号是程序打开时扫描的,这点不方便;只能是ASCII码,不然乱码。
补充:串口要添加对应的空间
//获取com口
using System.IO.Ports;
c#有串口控件
设计界面如下:
重要的几个函数
构造函数 InitializeComponent(); //为串口绑定接收数据事件 this.serialPort1.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); //初始化下拉串口名称列表框 string[] ports = SerialPort.GetPortNames(); Array.Sort(ports); dotlist.Add(100); /* 串口设置 this.serialPort1.PortNum= comboBox1.Text.ToString(); //端口号 this.serialPort1.Parity= 0; //奇偶校验 this.serialPort1.BaudRate= 9600;//串口通信波特率 this.serialPort1.ByteSize= 8; //数据位 this.serialPort1.StopBits= 1;//停止位 this.serialPort1.ReadTimeout= 1000; //读超时 */ comboBaudName.Items.AddRange(ports); //如果只有一个串口则选中 if(comboBaudName.Items.Count==1) { comboBaudName.SelectedIndex = 0; } //默认波特率选9600 this.comboBaudRate.Items.AddRange(new object[] { "2400", "4800", "9600", "19200", "38400", "57600", "115200"}); if (ports.Length == 1) { //comboBaudName.SelectedIndex = 0; comboBaudRate.SelectedText = "9600"; } //打开或关闭串口 private void button8_Click(object sender, EventArgs e) { //根据当前串口对象,来判断操作 if(serialPort1.IsOpen) { //串口状态是open时,text是关闭 点击,则关闭串口 serialPort1.Close(); button8.Text = "打开"; } else { //串口状态是close时,text是打开 点击,则设置好端口,波特率后打开 if(comboBaudName.Text=="") { MessageBox.Show("无效的串口!"); return; } if(comboBaudRate.Text=="") { MessageBox.Show("请设置波特率!"); return; } serialPort1.PortName = comboBaudName.Text; serialPort1.BaudRate = int.Parse(comboBaudRate.Text); try { serialPort1.Open(); button8.Text = "关闭"; } catch(Exception e1) { //捕获到异常信息,创建一个新的comm对象,之前的不能用了。 serialPort1 = new SerialPort(); //显示异常信息给客户。 MessageBox.Show(e1.Message); } } } //接收串口数据函数 private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) { int n = serialPort1.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致 byte[] buf = new byte ;//声明一个临时数组存储当前来的串口数据 received_count += n;//增加接收计数 serialPort1.Read(buf, 0, n); ;//读取缓冲数据 builder.Clear();//清除字符串构造器的内容 //因为要访问ui资源,所以需要使用invoke方式同步ui。 this.Invoke((EventHandler)(delegate { //直接按ASCII规则转换成字符串 builder.Append(Encoding.ASCII.GetString(buf)); //追加的形式添加到文本框末端,并滚动到最后。 textBox1.AppendText(builder.ToString()); })); SerialPort sp = (SerialPort)sender; string indata = sp.ReadExisting(); } //发送串口数据 private void SendStringData(string data) { if(serialPort1.IsOpen) { serialPort1.Write(data); } else { MessageBox.Show("串口没有打开"); } } //发送数据按钮 private void button10_Click(object sender, EventArgs e) { if(serialPort1.IsOpen) { SendStringData(this.textBox2.Text); } }
效果图:
注意:串口号是程序打开时扫描的,这点不方便;只能是ASCII码,不然乱码。
相关文章推荐
- c#调用COM组件
- Linux串口通信
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- C#中this的用法集锦
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析
- C#生成饼形图及添加文字说明实例代码
- C#判等对象是否相等的方法汇总
- C#简单的向量用法实例教程
- C#实现基于链表的内存记事本实例