⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c#2.0下的串口编程-手机连接.cs

📁 GPS的资料,上来和大家分享,正做这个的朋友可以看看.
💻 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 + -