串口调试助手源代码.docx
- 文档编号:28099194
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:20
- 大小:54.54KB
串口调试助手源代码.docx
《串口调试助手源代码.docx》由会员分享,可在线阅读,更多相关《串口调试助手源代码.docx(20页珍藏版)》请在冰豆网上搜索。
串口调试助手源代码
串口调试助手预源代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows.Forms;
usingSystem.IO;
usingSystem.IO.Ports;
usingSystem.Threading;
usingDevExpress.XtraEditors;
usingSystem.Text.RegularExpressions;
namespaceWindowsFormsApplication3
{
publicpartialclassForm1:
XtraForm
{
SerialPortsp1=newSerialPort();
intFlag=0;
intStateChanged=0;
intStateChanged_Ascii=1;
intStateChanged_16=0;
stringTemp=null;
stringTemp_memoSend=null;
privatevoidmemoSend_EditValueChanged(objectsender,EventArgse)
{
}
publicForm1()
{
InitializeComponent();
sp1.DataReceived+=sp1_DataReceived;
}
privatevoidForm1_Load(objectsender,EventArgse)
{
this.MaximizeBox=false;
//检查是否有串口
string[]str=SerialPort.GetPortNames();
if(str==null)
{
MessageBox.Show("本机没有串口!
","error");
return;
}
//添加串口项目
foreach(stringportinSystem.IO.Ports.SerialPort.GetPortNames())
{
cbSerial.Properties.Items.Add(port);
}
//串口设置默认选择项
cbSerial.SelectedIndex=0;
Control.CheckForIllegalCrossThreadCalls=false;
sp1.DataReceived+=newSerialDataReceivedEventHandler(sp1_DataReceived);//订阅委托
}
privatevoidcomboBoxEdit1_SelectedIndexChanged(objectsender,EventArgse)
{
}
privatevoidOpenSerial_Click(objectsender,EventArgse)
{
sp1.Close();
//SerialPortsp1=newSerialPort();
if(!
sp1.IsOpen)//串口是关闭的,设置参数,打开串口
{
try
{
//获取串口号
stringserialName=cbSerial.SelectedItem.ToString();
sp1.PortName=serialName;
//设置各参数
stringstrBaudRate=cbBaudRate.Text;
stringstrDateBits=cbDataBits.Text;
stringstrStopBits=cbStop.Text;
sp1.BaudRate=Convert.ToInt32(strBaudRate);//波特率
sp1.DataBits=Convert.ToInt32(strDateBits);//数据位
switch(cbStop.Text)//停止位
{
case"1":
sp1.StopBits=StopBits.One;
break;
case"1.5":
sp1.StopBits=StopBits.One;
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();
}
sp1.Open();
//btnOpen.Enabled=false;
labSerial.Text="串口号:
"+sp1.PortName;
labState.Text="状态:
打开";
}
catch(System.Exceptionex)
{
MessageBox.Show("Error:
"+ex.Message,"Error");
return;
}
}
}
//privatevoidCloseSerial_Click(objectsender,EventArgse)
//{
//if(sp1.IsOpen)
//{
//sp1.Close();
//labSerial.Text="串口号:
"+sp1.PortName;
//labState.Text="状态:
关闭";
//}
//}
privatevoidSend_Click(objectsender,EventArgse)
{
stringStrSend=memoSend.Text;
if(!
sp1.IsOpen)
{
MessageBox.Show("请先打开串口!
","Error");
return;
}
else
{
if(rbtnSendStr.Checked)//字符串发送
{
if(ckTimeSend.Checked&&!
(string.IsNullOrEmpty(textTime.Text)))//判断是否定时发送数据
{
stringTime=textTime.Text;
tmSend.Interval=int.Parse(Time)*1000;//时间单位是秒,化成毫秒单位
tmSend.Start();//开启定时器
}
else
{
sp1.Write(StrSend);//写入数据
}
}
else//十六进制发送
{
if(ckTimeSend.Checked&&!
(string.IsNullOrEmpty(textTime.Text)))
{
stringTime=textTime.Text;
tmSend.Interval=int.Parse(Time)*1000;
tmSend.Start();
}
else
{
stringStrSend_1=StrSend.Trim();//去掉前后的空格
//stringStrSend_2=StrSend_1.Replace("","");
//stringStrSend_3=string.Join("",Regex.Matches(StrSend_2,@"..|.").Cast
string[]StrArray=StrSend_1.Split('');//用空格符隔开字符串数组
varStr_Send=newList
//intbyteBufferLength=StrArray.Length;//数组StrArray的长度
for(inti=0;i { if(StrArray[i].Trim()=="") { //byteBufferLength--; continue; } else { if(StrArray[i].Length<3) { Str_Send.Add(StrArray[i]); } else { Str_Send.AddRange(Devide(StrArray[i])); } } } intbyteBufferLength=Str_Send.Count; byte[]byteBuffer=newbyte[byteBufferLength]; intii=0; for(inti=0;i { //Byte[]bytesOfStr=Encoding.Default.GetBytes(StrArray[i]); intdecNum=0; //if(StrArray[i]=="") //{ //continue; //} //else //{ //decNum=Convert.ToInt32(Str_Send[i],16);//把字符串转成16进制数 //byteBuffer[ii]=Convert.ToByte(decNum); //} try { decNum=Convert.ToInt32(Str_Send[i],16);//把字符串转成16进制数 byteBuffer[ii]=Convert.ToByte(decNum); } catch(System.Exceptionex) { MessageBox.Show("输入错误! ","提示"); return; } ii++; } sp1.Write(byteBuffer,0,byteBuffer.Length);//从第0个开始写入byteBuffer,长度bytebuffer的长度。 } } } } privateList { varret=Regex.Matches(str,@"..|.").Cast returnret; } privatevoidtmSend_Tick(objectsender,EventArgse) { stringStrSend=memoSend.Text; if(rbtnSendStr.Checked) { sp1.Write(StrSend); } else { stringStrSend_1=StrSend.Trim();//去掉前后的空格 string[]StrArray=StrSend_1.Split('');//用空格符隔开字符串数组 varStr_Send=newList for(inti=0;i { if(StrArray[i].Trim()=="") { continue; } else { if(StrArray[i].Length<3) { Str_Send.Add(StrArray[i]); } else { Str_Send.AddRange(Devide(StrArray[i])); } } } intbyteBufferLength=Str_Send.Count; byte[]byteBuffer=newbyte[byteBufferLength]; intii=0; for(inti=0;i { intdecNum=0; try { decNum=Convert.ToInt32(Str_Send[i],16);//把字符串转成16进制数 byteBuffer[ii]=Convert.ToByte(decNum); } catch(System.Exceptionex) { MessageBox.Show("输入错误! ","提示"); return; } ii++; } sp1.Write(byteBuffer,0,byteBuffer.Length);//从第0个开始写入byteBuffer,长度bytebuffer的长度。 } } voidsp1_DataReceived(objectsender,SerialDataReceivedEventArgse) { byte[]byteRead=newbyte[sp1.BytesToRead]; if(rbtnRceStr.Checked) { memoRcv.Text+=sp1.ReadExisting(); memoRcv.SelectionStart=memoRcv.Text.Length; memoRcv.ScrollToCaret(); } else { if(rbtnRce16.Checked) { Byte[]receivedData=newByte[sp1.BytesToRead];//创建接收字节数组 sp1.Read(receivedData,0,receivedData.Length); stringstrRcv=null; for(inti=0;i { strRcv+=receivedData[i].ToString("X2"); } memoRcv.Text+=strRcv; memoRcv.SelectionStart=memoRcv.Text.Length; memoRcv.ScrollToCaret(); } } } privatevoidStop_Click(objectsender,EventArgse)//退出接收数据 { tmSend.Stop(); } privatevoidClear_Click(objectsender,EventArgse)//清空接收数据 { memoRcv.Text=""; } privatevoidTime_Press(objectsender,KeyPressEventArgse) { if(! Char.IsLetterOrDigit(e.KeyChar)) { e.Handled=true; } else { e.Handled=false; } } privatevoidTextTime_KeyPress(objectsender,KeyPressEventArgse)//限制定时发送时间只能输入数字 { if(! (Char.IsNumber(e.KeyChar))&&e.KeyChar! =(char)8) { MessageBox.Show("请输入数字","提示"); e.Handled=true; } else { e.Handled=false; } } privatevoidmemoSend_KeyPress(objectsender,KeyPressEventArgse) { } privatevoidbtnClose_Click(objectsender,EventArgse)//关闭串口 { if(sp1.IsOpen) { sp1.Close(); labSerial.Text="串口号: "+sp1.PortName; labState.Text="状态: 关闭"; } } privatevoidSend16_KeyPress(objectsender,KeyPressEventArgse) { //stringSend16=memoRcv.Text; //byte[]buff=newbyte[Send16.Length/2]; //intindex=0; //for(inti=0;i //{ //buff[index]=Convert.ToByte(Send16.Substring(i,2),16); //++index; //} //stringresult=Encoding.Default.GetString(buff); ////MessageBox.Show(result); //memoRcv.Text=result; } privatevoidSendStr_KeyPress(objectsender,KeyPressEventArgse) { //stringSendStr=memoRcv.Text; //byte[]ba=System.Text.ASCIIEncoding.Default.GetBytes(SendStr); //StringBuildersb=newStringBuilder(); //foreach(bytebinba) //{ //sb.Append(b.ToString("x")); //} ////MessageBox.Show(sb.ToString()); //memoRcv.Text=sb.ToString(); } privatevoidrbtnSend16_CheckedChanged(objectsender,EventArgse) { StateChanged_16=1; StateChanged_Ascii=0; stringStrSend=memoSend.Text; if(Temp_memoSend==StrSend.Trim()&&Flag==1) { memoSend.Text=Temp; Flag=0; } else { memoSend.Text=""; foreach(charSinStrSend) { memoSend.Text+=((byte)S).ToString("X2"); } } } privatevoidrbtnSendStr_CheckedChanged(objectsender,EventArgse) { if(StateChanged_16==1) { Flag=1; } StateChanged_16=0; StateChanged_Ascii=1; stringStrSend=memoSend.Text; Temp=memoSend.Text; stringStrSend_1=StrSend.Trim();//去掉前后的空格 string[]StrArray=StrSend_1.Split('');//用空格符隔开字符串数组 varStr_Send=newList for(inti=0;i { if(StrArray.Length==0) { break; } else { if(StrArray[i].Trim()=="") { continue; } else { if(StrArray[i].Length<3) { Str_Send.Add(StrArray[i]); } else { Str_Send.AddRange(Devide(StrArray[i])); } } } intbyteBufferLength=Str_Send.Count; byte[]byteBuffer=newbyte[byteBufferLength]; intii=0; for(intj=0;j { intdecNum=0; try { decNum=Convert.ToInt32(Str_Send[j],16);//把字符串转成16进制数 if(decNum>=48&&decNum<=57||decNum>=65&&decNum<=90||decNum>=97&&decNum<=122)//除了数字和字母,其他都转成问号 { byteBuffer[ii]=Convert.ToByte(decNum); } else { byteBuffer[ii]=Convert.To
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 串口 调试 助手 源代码
![提示](https://static.bdocx.com/images/bang_tan.gif)