现在的位置: 首页 > 综合 > 正文

C#中请问如何在串口通讯中接收输出HEX格式数据

2012年08月12日 ⁄ 综合 ⁄ 共 3584字 ⁄ 字号 评论关闭

小弟最近写了个C#串口通讯软件,目前链接串口已无问题,但是不知道如何接收和输出HEX数据

以下是小弟的串口代码。。。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;

namespace Data_query
{
    public partial class Data_query : Form
    {
        SerialPort Port1 = new SerialPort();
        private void Serial_Select()
        {
            string[] Ports = SerialPort.GetPortNames();
            foreach (string Port in Ports)
            {
                Serial_Number.Items.Add(Port);
            }
        }
        public Data_query()
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;
            label.ForeColor = Color.Red;
            Serial_Select();
            Serial_Number.SelectedIndex = 0;
            Serial_Baud.SelectedIndex = 0;
        }
        //打开关闭串口
        private void Enter1_Click(object sender, EventArgs e)
        {
            if(Enter1.Text=="打开串口")
            {
                try
                {
                    Port1.PortName = Serial_Number.SelectedItem.ToString();
                    Port1.BaudRate = Convert.ToInt32(Serial_Baud.SelectedItem);
                    Port1.DataBits = 8;
                    Port1.RtsEnable = true;
                    Port1.Open();
                    Port1.DiscardInBuffer();
                    Port1.DiscardOutBuffer();
                    Enter1.Text = "关闭串口";
                    Serial_Baud.Enabled = false;
                    Serial_Number.Enabled = false;
                    label.Text = "串口:" + Serial_Number.SelectedItem.ToString() + " 波特率:" + Serial_Baud.SelectedItem.ToString() + "  数据位:8 已建立链接";
                    label.ForeColor = Color.Blue;
                }
                catch
                {
                    MessageBox.Show("目标串口无法打开,请重新尝试","错误信息",MessageBoxButtons.OK,MessageBoxIcon.Error);
                }
            }
            else if (Enter1.Text == "关闭串口")
            {
                Port1.DiscardInBuffer();
                Port1.DiscardOutBuffer();
                Port1.Close();
                Enter1.Text = "打开串口";
                Serial_Baud.Enabled = true;
                Serial_Number.Enabled = true;
                label.Text="串口状态    :     未链接 ";
                label.ForeColor = Color.Red;
            }
        }
        //刷新串口列表
        private void Refurbish_Click(object sender, EventArgs e)
        {
            Serial_Number.Items.Clear();
            Serial_Select();
            this.Serial_Number.SelectedIndex = 0;
            this.Serial_Baud.SelectedIndex = 0;
            if (Enter1.Text == "关闭串口")
            {
                Port1.DiscardInBuffer();
                Port1.DiscardOutBuffer();
                Port1.Close();
                Enter1.Text = "打开串口";
                Serial_Baud.Enabled = true;
                Serial_Number.Enabled = true;
            }
            label.Text = "串口状态    :     未链接 ";
            label.ForeColor = Color.Red;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ThreadStart Thread1 = new ThreadStart(SentMEssage);
            Thread thread = new Thread(Thread1);
            thread.Start();
        }
        private void SentMEssage()
        {
            byte[] data = Encoding.Unicode.GetBytes(textBox1.Text);

            string str = Convert.ToBase64String(data);

            Port1.WriteLine(str);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            ThreadStart Thread2 = new ThreadStart(GetMessage);
            Thread thread = new Thread(Thread2);
            thread.Start();
        }
        private void GetMessage()
        {
            byte[] data = Convert.FromBase64String(Port1.ReadLine());

            textBox2.Text = Encoding.Unicode.GetString(data);
        }
    }
}

抱歉!评论已关闭.