实例介绍
【实例简介】串口调试助手
【实例截图】
【核心代码】
using System; using System.Collections.Generic; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.IO.Ports; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public string fasongwb;//发送文件的文本 string jieshouwb;//接收到的文本 int SHUjieshou = 0;//接收计数 int SHUfasong = 0;//发送计数 int dsjs = 0;//定时发送次数 short kongzhi = 0; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e)//窗体加载 { //MessageBox.Show(Algorithm.StringTo16("ff",Enum16进制隔离符.空格)); int b = 0;//数组下标 short i = 0; string[] a = System.IO.Ports.SerialPort.GetPortNames();//获取已有的端口 b = a.Length ;//获取元素的个数 Timer2.Interval = 100;//启动写文件定时器 Timer2.Start(); SerialPort1.DataReceived = new SerialDataReceivedEventHandler(SerialPort1_DataReceived);//添加串口接收DataReceived事件 //---------初始化--------------------------- //Duankou.SelectedIndex = 0; Botelv.SelectedIndex = 5; Jiaoyanwei.SelectedIndex = 0; Shujuwei.SelectedIndex = 2; Tingzhiwei.SelectedIndex = 0; Control.CheckForIllegalCrossThreadCalls = false;//屏蔽非法跨线程调用将始终引发异常 // ---------初始化--------------------------- //MessageBox.Show(b.ToString() ); if (b < 0) { MessageBox.Show("没有找到端口!", "警告"); } else { //MessageBox .Show (b); for (; i < b; i ) { if (JieDuanKouShu (a[i])>6) { Duankou.Items .Add (a[i]); } } i = 0;//将i清零 go:for (; i < b 6; i ) // 自动打开端口 try { if (SerialPort1.IsOpen == true) { break; } else { Duankou.SelectedIndex = i; // MessageBox.Show(i.ToString ()); SerialPort1.PortName = Duankou.Text; //MessageBox.Show(i.ToString()); SerialPort1.Open(); if (SerialPort1.IsOpen == true) { Duankou.SelectedIndex = i; Label6.Text = "端口已打开"; PictureBox1.BackColor = Color.Green; Button8.Text = "关闭端口"; } } } catch (IOException)//串口不存在异常 { i ; goto go; } catch (UnauthorizedAccessException)//串口资源占用异常 { i ; goto go; } catch (InvalidOperationException)//串口打开后,不能在赋值端口异常 { i ; goto go; } } if(SerialPort1.IsOpen==false) { Duankou.SelectedIndex = 0; } RichTextBox2.Text = "保存接收数据的路径"; this.Button2.Select(); //开始运行程序时,让发送区被选择,激活控件 CheckBox2.Checked = true ; CheckBox3.Checked = true; } private int JieDuanKouShu(string str)// 将获得的端口,如COM1转化成int类型的1 { str=str.Remove(0, 3);//从零开始删除3个字符 return (Convert.ToInt32(str)); } private void Button5_Click(object sender, EventArgs e)//打开文本按钮 { OpenFileDialog ofd = new OpenFileDialog(); ofd.ShowDialog(); if (ofd.FileName == "") { RichTextBox1.Text = "要打开的文件路径"; } else { Textfasong.Text = ""; RichTextBox1.Text = ofd.FileName; StreamReader sr = new StreamReader(ofd .FileName); Textfasong.Text = sr.ReadToEnd();//读出文本 fasongwb = Textfasong.Text; sr.Close();//关闭当前文本读取流 if (CheckBox4.Checked ==false ) Textfasong.Text = ""; } } private void Button6_Click(object sender, EventArgs e)//保存文件按钮 { FolderBrowserDialog ofd = new FolderBrowserDialog(); ofd.ShowDialog(); if (ofd.SelectedPath == "") { RichTextBox2.Text = "保存接收数据的路径"; } else RichTextBox2.Text = ofd.SelectedPath; } private void Button3_Click(object sender, EventArgs e)//清空接收 { Textjieshou.Text = ""; } private void Button4_Click(object sender, EventArgs e)//发送清空 { Textfasong.Text = ""; } private void Button1_Click(object sender, EventArgs e)//清空计数器 { SHUjieshou = 0; SHUfasong = 0; Label8.Text = "发送" SHUfasong.ToString () "次"; Label9.Text = Label9.Text = "接收" SHUjieshou.ToString () "次"; } private void CheckBox4_CheckedChanged(object sender, EventArgs e)//发送文本选择 { if (CheckBox4.Checked == true) { CheckBox2.Checked = false; Button2.Text = "发送文本"; Textfasong.Text = ""; Textfasong.Text = fasongwb; } else { Button2.Text = "发送数据"; Textfasong.Text = ""; } } private void CheckBox2_CheckedChanged(object sender, EventArgs e)//发送十六进制 { if (CheckBox2.Checked == true) CheckBox4.Checked = false; } private void CheckBox5_CheckedChanged(object sender, EventArgs e)//接收文件 { if (CheckBox5.Checked == true ) { CheckBox3.Checked = false; if (wenjianlx(RichTextBox2.Text) == false) { CheckBox5.Checked = false; CheckBox3.Checked = true; MessageBox.Show("你的保存路径中没有文件名或文件类型" "\n" "如在保存路径中输入: C:" "\\" "baocun.txt" "\n" "\"" ".txt" "\"" "根据你接收的文件类型自己设置", "提示"); } } } private bool wenjianlx(string str)//判断是有带有后缀名 { string[] a; string b; char []st={'\\'}; a = str.Split(st);//分割文本str if (a.Length < 0) { return (false); } else { b = a[a.Length-1]; foreach (char ch in b) { if (ch == '.') { return (true); } } } return (false ); } private void CheckBox3_CheckedChanged(object sender, EventArgs e) { if (CheckBox3.Checked == true) CheckBox5.Checked = false; } private void CheckBox1_CheckedChanged(object sender, EventArgs e)//定时发送数据 { if (CheckBox1.Checked == true) { if ((RichTextBox3.Text == "")||(Convert.ToInt32(RichTextBox3.Text) <= 0) )//设置时间 { MessageBox.Show("请设置发送时间!", "提示"); CheckBox1.Checked = false; return; } else Timer1.Interval = Convert.ToInt32(RichTextBox3.Text); if ((RichTextBox4.Text == "")||(Convert.ToInt32(RichTextBox4.Text) <= 0) )//设置发送次数,0为不停的发送 { dsjs = 0; } else dsjs = Convert.ToInt32(RichTextBox4.Text); Timer1.Start(); } else Timer1.Stop(); } private void Timer1_Tick(object sender, EventArgs e)//定时器1事件 { if (dsjs == 0) FaSong(); else if (dsjs > 1) { dsjs = dsjs - 1; FaSong(); } else if (dsjs == 1) { FaSong(); dsjs = 0; Timer1.Stop (); CheckBox1.Checked = false; } // If dsjs = 0 Then // 'SHUfasong = SHUfasong 1 '发送计数 // FaSong() // 'MsgBox(dsjs) //ElseIf dsjs > 1 Then // 'SHUfasong = SHUfasong 1 '发送计数 // dsjs = dsjs - 1 // FaSong() // 'MsgBox(dsjs 1) //ElseIf dsjs = 1 Then // 'SHUfasong = SHUfasong 1 '发送计数 // 'MsgBox(dsjs) // FaSong() // dsjs = 0 // Timer1.Enabled = False // CheckBox1.Checked = False //End If } private void FaSong()//发送子函数 { int a,shuju=0; string str; str = Textfasong.Text; foreach (char ch in str)//取字符长度 { shuju ; } //MessageBox.Show(shuju.ToString ()); if (SerialPort1.IsOpen == false) { CheckBox1.Checked = false; MessageBox.Show("端口未打开,请打开端口!", "提示"); } else { // ------------------------------------发送十六进制数--------------------------------------------- if (CheckBox2.Checked == true)//发送十六进制数 { if (shuju % 2 == 0) { byte[] data = Algorithm._16ToBtyes(Textfasong.Text); SerialPort1.Write(data, 0, data.Length); SHUfasong = SHUfasong data.Length;//发送计数 } else MessageBox.Show("十六进制错误,请您检查!","提示",MessageBoxButtons.OK,MessageBoxIcon.Error); } // ------------------------------------发送十六进制数------------------------------- //-------------发送文本---------------- else if (CheckBox4.Checked == true) { byte[] bt = Algorithm.StringToBytes(fasongwb,false); SerialPort1.Write(bt, 0, bt.Length); //SerialPort1.Write(fasongwb); SHUfasong = SHUfasong 1;//发送计数 } // Else '------------------------------------发送字符串---------------------------------- else { if (Textfasong.Text == "") { CheckBox1.Checked = false; MessageBox.Show("请在发送数据框内输入数据!", "提示"); } else { //SerialPort1.Write(Textfasong.Text); byte[] bt = Algorithm.StringToBytes(Textfasong.Text, false); SerialPort1.Write(bt, 0, bt.Length); SHUfasong = SHUfasong 1; //发送计数 } } } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论