假如我现在按下按键,我按键的后台程序,会自动发送一个我已经定义好的数组例如:ff,01,ff,ff,ff,ff,01,03,05。这些数据要通过串口发送出去,应如何实现?求助啊

解决方案 »

  1.   

    c#串口通信,不难的,lz看看:http://hi.baidu.com/deep_pro/blog/item/4d5f200340c44d80d53f7c49.html
      

  2.   

    用C#的SerialPort类具体串口通信的例子网上很多的!
      

  3.   

    我这里写的串口通信程序(一) 这个串口通信程序,测试了只能够自发自收,假如我用单片机发数据就收不到了,?问:这个只是适合自发自收吗?
       SerialPort sp = new SerialPort();
       private void btn1_Click(object sender, EventArgs e)
       {
       sp.PortName = "COM3";
       sp.BaudRate = 9600;
       sp.Open();
       byte[] data = Encoding.Unicode.GetBytes(re.Text);
       string str = Convert.ToBase64String(data);
       sp.WriteLine(str);
       MessageBox.Show("数据发送成功", "系统提示");
       }   private void btn2_Click(object sender, EventArgs e)
       {
       byte[] data = Convert.FromBase64String(sp.ReadLine());
       tr.Text = Encoding.Unicode.GetString(data);
       sp.Close();
       MessageBox.Show("数据接收成功", "系统提示");
    (二)这个是用事件触发的,但是用单片机发数据在revtext.Text上接受不到,问?为什么?
       }
    System.IO.Ports.SerialDataReceivedEventArgs 将导致该该事件被触发;   private void mycomm_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
       {
       int DataLength = mycomm.BytesToRead;//获取接受缓冲区中数据的字节数
       int i = 0;
       StringBuilder strb = new StringBuilder();
       while (i < DataLength)
       {
       byte[] dbs = new byte[2048];
       int len = mycomm.Read(dbs,0,2048);//每次从输入缓冲区中读取2048个字节,并将这些字节写入到dbs[]数组中
       strb.Append(ASCIIEncoding.GetEncoding("gb2312").GetString(dbs, 0, len));
       i += len;
       }
       revtext.Text += strb;// revtext.Text 将显示接收到的数据
       }(三)这个与上面类似,用单片机可以实现发数据,在界面上接收,但是收到的是乱码?问:为什么?
      private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
       { int DataLength = serialPort1.BytesToRead;
       int i = 0;
       StringBuilder strb = new StringBuilder();
       while(i<DataLength )
       {
       byte[] dbs = new byte[14];
       int len = serialPort1.Read(dbs, 0, 14);
         
      RevAppend(ASCIIEncoding.GetEncoding("gb2312").GetString(dbs, 0, len));
       i += len;
       }  void RevAppend(string str)
       {
       if (textBox1.InvokeRequired)
       this.Invoke(new MethodInvoker(delegate
       {
       textBox1.AppendText(str); ;
       textBox1.SelectionStart = int.MaxValue;
       textBox1.SelectionLength = 1;
       textBox1.ScrollToCaret();
       }));
       else
       {
       textBox1.AppendText(str);
       textBox1.SelectionStart = int.MaxValue;
       textBox1.SelectionLength = 1;
       textBox1.ScrollToCaret();
       }
       }这些是我写的,可是出现的问题,我上面都写了,希望你们帮忙看看
      

  4.   


    /// <summary>
      ///发送一个数据
      /// </summary>
      /// <param name="COM">"COM1"</param>
      /// <param name="BaudRate">9600</param>
      /// <param name="Data">"123"tobyte[]</param>
      /// <param name="Encoding">ASCII</param>
      public static byte[] SerialPort(string p_COM, int p_BaudRate, byte[] p_Data, Encoding p_Encoding)
      {
      SerialPort _SendPort = new SerialPort();
      _SendPort.PortName = p_COM;
      _SendPort.BaudRate = p_BaudRate;
      _SendPort.DataBits = 8;
      _SendPort.Parity = Parity.None;
      _SendPort.StopBits = StopBits.One;
      _SendPort.DtrEnable = true;
      _SendPort.DtrEnable = true;
      _SendPort.Encoding = p_Encoding;  if (_SendPort.IsOpen)
      {
      _SendPort.Close();
      _SendPort.Open();
      }
      else
      {
      _SendPort.Open();
      _SendPort.Write(p_Data, 0, p_Data.Length);
      byte[] refData = new byte[_SendPort.BytesToRead];
      for (int i = 0; i != p_Data.Length; i++)
      {
      refData[i] = Convert.ToByte(_SendPort.ReadByte());
      }
      return refData;
      }  return null;  }我觉得这个不错 一目了然->http://wenku.baidu.com/view/ae9f3ecaa1c7aa00b52acbe3.html好吧,再给个Demo地址->http://download.csdn.net/detail/mendern/2425658深入学习,参考:
    http://topic.csdn.net/u/20080623/08/4bbd2475-45f1-42e3-a613-16b094759ade.html?31411
    http://topic.csdn.net/u/20080619/08/dcef3fe2-f95b-4918-8edb-36d48a3d0528.html?15470
      

  5.   

    ff,01,ff,ff,ff,ff,01,03,05你这个数据,我猜一下,如果说错了请当我没说你这个应该是16进制  将每个数转换成byte 然后组团发送