📄 c#2.0下的串口编程-手机连接.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;
namespace amoi
{
public partial class Form2 : Form
{
private SerialPort sp = new SerialPort();
private StringBuilder sb = new StringBuilder();
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
string[] ports = SerialPort.GetPortNames();
cmbCurCom.DataSource = ports;
cmbBitRate.SelectedIndex = 0;
cmbCurCom.SelectedIndex = 0;
}
private void btOpenCom_Click(object sender, EventArgs e)
{
//SerialPort sp = new SerialPort();
sp.BaudRate = int.Parse(cmbBitRate.Text);
sp.DataBits = 8;
sp.Parity = Parity.None;
sp.PortName = cmbCurCom.Text;
sp.StopBits = StopBits.One;
// sp.Close();
sp.Open();
btOpenCom.Enabled = false;
btCloseCom.Enabled = true;
}
private void btCloseCom_Click(object sender, EventArgs e)
{
if (sp.IsOpen)
{
sp.Close();
}
btOpenCom.Enabled = true;
btCloseCom.Enabled = false;
}
private void btTestAT_Click(object sender, EventArgs e)
{
//发送数据
//SendStringData(sp,"AT");
//也可用字节的形式发送数据
if (!sp.IsOpen)
{
sp.Open();
}
SendBytesData(sp, "atr");
//开启接收数据线程
ReceiveData(sp);
}
//==============================
//发送字符串数据
private void SendStringData(SerialPort serialPort, string txt)
{
serialPort.Write(txt);
}
/// <summary>
/// 开启接收数据线程
/// </summary>
private void ReceiveData(SerialPort serialPort)
{
//同步阻塞接收数据线程
Thread threadReceive = new Thread(new ParameterizedThreadStart(SynReceiveData));
threadReceive.Start(serialPort);
//也可用异步接收数据线程
//Thread threadReceiveSub = new Thread(new ParameterizedThreadStart(AsyReceiveData));
//threadReceiveSub.Start(serialPort);
}
//发送二进制数据
private void SendBytesData(SerialPort serialPort, string txt)
{//61 74 0D 0A 0A
//97 116 13 10 10
byte[] bytesSend = System.Text.Encoding.Default.GetBytes(txt);
serialPort.Write(bytesSend, 0, bytesSend.Length);
}
//同步阻塞读取
private void SynReceiveData(object serialPortobj)
{
SerialPort serialPort = (SerialPort)serialPortobj;
System.Threading.Thread.Sleep(0);
serialPort.ReadTimeout = 1000;
try
{
//阻塞到读取数据或超时(这里为2秒)
byte firstByte = Convert.ToByte(serialPort.ReadByte());
int bytesRead = serialPort.BytesToRead;
byte[] bytesData = new byte[bytesRead + 1];
bytesData[0] = firstByte;
for (int i = 1; i <= bytesRead; i++)
bytesData[i] = Convert.ToByte(serialPort.ReadByte());
//txtReceive.Text = System.Text.Encoding.Default.GetString(bytesData);
sb.AppendLine(System.Text.Encoding.Default.GetString(bytesData)); //+ System.Environment.NewLine;
// Convert.ToBase64String(bytesData, Base64FormattingOptions.None);
//sb.AppendLine(Convert.ToBase64String(bytesData, Base64FormattingOptions.None));
}
catch (Exception e)
{
MessageBox.Show(e.Message);
//处理超时错误
}
serialPort.Close();
}
//异步读取
private void AsyReceiveData(object serialPortobj)
{
SerialPort serialPort = (SerialPort)serialPortobj;
System.Threading.Thread.Sleep(500);
try
{
//txtReceive.Text = serialPort.ReadExisting();
sb.AppendLine(serialPort.ReadExisting());// +System.Environment.NewLine;
}
catch (Exception e)
{
MessageBox.Show(e.Message);
//处理错误
}
serialPort.Close();
}
///////////////////////////////
private void btTestCom_Click(object sender, EventArgs e)
{
txtDebug.Text = sb.ToString();
sb.Remove(0, sb.Length);
}
private void btSmsCenter_Click(object sender, EventArgs e)
{
//发送数据
//SendStringData(sp,"AT");
//也可用字节的形式发送数据
if (!sp.IsOpen)
{
sp.Open();
}
SendBytesData(sp, "at+csca ?rn");
//开启接收数据线程
ReceiveData(sp);
// txtDebug.Text += "输出缓冲区:"+sp.WriteBufferSize.ToString() + System.Environment.NewLine;
//// txtDebug.Text += sp.ReadLine() + System.Environment.NewLine;
// txtDebug.Text += "输入缓冲区:" + sp.ReadBufferSize.ToString() + System.Environment.NewLine;
}
private void btExeMyCode_Click(object sender, EventArgs e)
{
//发送数据
//SendStringData(sp,"AT");
//也可用字节的形式发送数据
if (!sp.IsOpen)
{
sp.Open();
}
SendBytesData(sp, txtMyCode.Text.Trim() + "rn");
//开启接收数据线程
ReceiveData(sp);
}
private void btJieMa_Click(object sender, EventArgs e)
{
string s = txtDebug.Text;
string phone = "";
string text = "";
DateTime sendTime = new DateTime();
jace.CN.SMSLib.CNText.GSMCode code = new jace.CN.SMSLib.CNText.GSMCode();
string SCA = "";
bool isOK = jace.CN.SMSLib.CNText.DecodingMsg(s, ref phone, ref text, ref sendTime, ref code, ref SCA);
if (isOK)
{
//来源电话号
txtCnInfo.Text += phone + System.Environment.NewLine;
//信息内容
txtCnInfo.Text += text + System.Environment.NewLine;
txtCnInfo.Text += sendTime.ToString() + System.Environment.NewLine;
txtCnInfo.Text += SCA + System.Environment.NewLine;
txtCnInfo.Text += isOK.ToString() + System.Environment.NewLine;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -