C#的山寨版的串口调式助手
来源:互联网 发布:诺基亚n9deb的软件 编辑:程序博客网 时间:2024/05/23 16:35
最近由于在搭建双目模块,下面使用的是180度舵机。但是使用Arduino自带的调式软件略感不爽,所以研究一下决定自己搞一个出来满足自己一下,增加一下成就感,毕竟不是做软件的,所以这个是不是自己写的这个不是很重要,关键是学习的过程和方法。而且改成满足自己的要求最重要,需求导向型。
本人想到用c#是因为本人学习过一段时间的C#语法,但是不怎么用的到,这个上位机是最初级的,本人感觉还不算入门,以后会更加努力学习。
这个要搭建的对象是不是萌萌哒。废话不多说干货。
效果图:
大致的制作过程:
声明一下本人使用的是vs2013版本。具体的什么版本依你的爱好。
1、建立c#”Windows窗口应用程序“工程
2、安装本人的山寨版的布局先布局好,建议使用groupBox控制把各个模块区分开。本人是这样做的分为4个模块即串口设置、发送格式、发送数据、接受数据,想再次扩展的话也方便。
3、强烈建议把一个模块搞好测试没问题,再去弄下一个模块。
4、程序源码(可以直接复制粘贴到相应模块下)
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.IO.Ports;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace 初始化版的上位机{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { SearchAndAddSerialToComboBox(serialPort1, CKH); //扫描并讲课用串口添加至下拉列表 } /// <summary> /// 扫描可用串口 /// </summary> /// <param name="MyPort"></param> /// <param name="MyBox"></param> private void SearchAndAddSerialToComboBox(SerialPort MyPort, ComboBox MyBox) { //将可用端口号添加到ComboBox string[] MyString = new string[20]; //最多容纳20个,太多会影响调试效率 string Buffer; //缓存 MyBox.Items.Clear(); //清空ComboBox内容 for (int i = 1; i < 20; i++) //循环 { try //核心原理是依靠try和catch完成遍历 { Buffer = "COM" + i.ToString(); MyPort.PortName = Buffer; MyPort.Open(); //如果失败,后面的代码不会执行 MyString[i - 1] = Buffer; MyBox.Items.Add(Buffer); //打开成功,添加至下俩列表 MyPort.Close(); //关闭 } catch { } } MyBox.Text = MyString[0]; //初始化 } /// <summary> /// 加载框架赋初值 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_Load(object sender, EventArgs e) { BTL.Text = "4800"; /*****************非常重要************************/ serialPort1.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);//必须手动添加事件处理程序 } /// <summary> /// 串口数据接收 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)//串口数据接收事件 { if (!radioButton3.Checked)//如果接收模式为字符模式 { string str = serialPort1.ReadExisting();//字符串方式读 textBox2.AppendText(str);//添加内容 } else { //如果接收模式为数值接收 byte data; data = (byte)serialPort1.ReadByte();//此处需要强制类型转换,将(int)类型数据转换为(byte类型数据,不必考虑是否会丢失数据 string str = Convert.ToString(data, 16).ToUpper();//转换为大写十六进制字符串 textBox2.AppendText("0x" + (str.Length == 1 ? "0" + str : str) + " ");//空位补“0” //上一句等同为:if(str.Length == 1) // str = "0" + str; // else // str = str; // textBox1.AppendText("0x" + str); } } /// <summary> /// 打开串口程序 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button2_Click(object sender, EventArgs e) { string CommNum = this.CKH.Text; int IntBdr = Convert.ToInt32(this.BTL.Text);//将波特率和串口号保存起来 if (!serialPort1.IsOpen) { serialPort1.PortName = CommNum; serialPort1.BaudRate = IntBdr; try { serialPort1.Open();//打开串口 CKbutton.Text = "关闭串口"; CKH.Enabled = false; CKH.Enabled = false;//将串口号与波特率选择控制关闭 } catch { MessageBox.Show("串口打开失败!\n\n可能是串口已补占用"); } } else { serialPort1.Close(); CKbutton.Text = "打开串口"; CKH.Enabled = true; CKH.Enabled = true;//将串口号与波特率选择控件打开。 } } /// <summary> /// 串口发送数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button3_Click(object sender, EventArgs e) { byte[] Data = new byte[1];//作用同上集 if (serialPort1.IsOpen)//判断串口是否打开,如果打开执行下一步操作 { if (textBox1.Text != "") { if (!radioButton1.Checked)//如果发送模式是字符模式 { try { serialPort1.WriteLine(textBox1.Text);//写数据 } catch (Exception err) { MessageBox.Show("串口数据写入错误", "错误");//出错提示 serialPort1.Close(); } } else { for (int i = 0; i < (textBox1.Text.Length - textBox1.Text.Length % 2) / 2; i++)//取余3运算作用是防止用户输入的字符为奇数个 { Data[0] = Convert.ToByte(textBox1.Text.Substring(i * 2, 2), 16); serialPort1.Write(Data, 0, 1);//循环发送(如果输入字符为0A0BB,则只发送0A,0B) } if (textBox1.Text.Length % 2 != 0)//剩下一位单独处理 { Data[0] = Convert.ToByte(textBox1.Text.Substring(textBox1.Text.Length - 1, 1), 16);//单独发送B(0B) serialPort1.Write(Data, 0, 1);//发送 } } } } } }}
本人开始做的时候在网上查看了很多资料都说简单,但是就是做出不来,后来才想明白,简单只是对于做过的人来说的,现在我也可以说这个东西没想象的那么难,加油。。。。
要是需要急用的话可以联系本人把工程给大家。邮箱:757860682@qq.com。本人以互相学习为目的,希望大家不吝赐教。。
0 0
- C#的山寨版的串口调式助手
- c#的串口开发调试助手
- C#编写的串口调试助手
- C# 下串口助手的实现
- C#打造属于自己的串口助手!
- MATLAB语言的串口助手
- C# 串口助手开发
- C#串口调试助手
- C#串口通信助手
- C#串口调试助手
- 做了一个网页版的串口调试助手
- 山寨版的portal
- Qt写的串口调试助手
- MFC实现的串口通信助手
- PjComm:控制台版本的串口调试助手
- MFC实现的串口通信助手
- MFC实现的串口通信助手
- 基于QT4的linux串口助手
- 35 个 Java 代码性能优化总结
- Android运行时权限工具类
- 娱乐视频直播背后的技术支持——DASH重构
- MongoDB的存储结构及对空间使用率的影响
- 【Prison Break】第五天(4.1)
- C#的山寨版的串口调式助手
- 【CAS】自定义数据库连接配置
- 1 多线程下载一个文件(普通的java工程:java实现)
- 【win32】高仿QQ截图
- (23)插值查找
- Q&A——图形渲染(三)
- 应用启动图标的适配
- java4种线程池的使用
- Java设计线程安全的类