| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1672 人关注过本帖, 1 人收藏
标题:C#串口通信
取消只看楼主 加入收藏
ykp
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-3-23
结帖率:66.67%
收藏(1)
已结贴  问题点数:20 回复次数:6 
C#串口通信
C#串口通信中当我点选HexSend发送的时候将输入框数据转化为十六进制,取消点选将数据转化过来,点选HexView将接收框数据转化为十六进制,取消点选将数据转化过来
代码如下,请大侠帮忙完善,不胜感激
using System;
using System.Collections.Generic;
using
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using
using System.Text.RegularExpressions;
using System.Threading;


namespace TESS
{
    public partial class fomMain : Form
    {


        public fomMain()
        {
            InitializeComponent();
        }


        private void fomMain_Load(object sender, EventArgs e)
        {

            for (int i = 1; i < 15; i++)
            {
                cmbxComNum.Items.Add("COM" + i.ToString());

            }
            string[] sacheck = Enum.GetNames((typeof()));
            for (int i = 0; i < sacheck.Length; i++)
            {
                cmbxCheck.Items.Add(sacheck[i]);
            }
            string[] saStop = Enum.GetNames((typeof()));
            for (int i = 0; i < saStop.Length; i++)
            {
                cmbxStop.Items.Add(saStop[i]);
            }
            cmbxBaudRate.SelectedIndex = 3;
            cmbxCheck.SelectedIndex = 1;
            cmbxData.SelectedIndex = 0;
            cmbxComNum.SelectedIndex = 0;
            cmbxStop.SelectedIndex = 1;

        }


        private void btnOpen_Click(object sender, EventArgs e)
        {
            serialPortMain.PortName = cmbxComNum.SelectedItem.ToString();
            serialPortMain.BaudRate = int.Parse(cmbxBaudRate.SelectedItem.ToString());
            serialPortMain.Parity = (Parity)(Enum.Parse(typeof(Parity), cmbxCheck.SelectedItem.ToString()));
            serialPortMain.StopBits = (StopBits)(Enum.Parse(typeof(StopBits), cmbxStop.SelectedItem.ToString()));
            //serialPortMain.StopBits = StopBits.One;
            try
            {
                serialPortMain.Open();
                btnOpen.Enabled = false;
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }

        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            if (serialPortMain.IsOpen)
            {
                serialPortMain.Close();
            }
            btnOpen.Enabled = true;
        }
        private void btnSend_Click(object sender, EventArgs e)
        {

            nt bytes = serialPortMain.BytesToRead; // 获取字节长度  
            byte[] buffer = new byte[bytes];// 创建字节数组
            serialPortMain.Read(buffer, 0, bytes);// 读取缓冲区的数据到数组
            string str = "";
            for (int i = 0; i < buffer.Length; i++)
            {
                str += buffer[i].ToString("X2");
            }

            serialPortMain.WriteLine(txtSend.Text.Trim());
            

        }
        private void serialPortMain_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {

            this.Invoke((EventHandler)
               (delegate
                {
                    int bytes = serialPortMain.BytesToRead; // 获取字节长度  
                    byte[] buffer = new byte[bytes];// 创建字节数组               
                    serialPortMain.Read(buffer, 0, bytes);// 读取缓冲区的数据到数组,参数1字节数组,参数2数组起始位,参数3数组长度
                    if (ckbxView.Checked)
                    {
                        string str = "";
                        for (int i = 0; i < buffer.Length; i++)
                        {
                            str += buffer[i].ToString("X2");
                        }
                        txtRcv.Text = str;
                        //txtRcv.AppendText("\r\n" + DateTime.Now.ToString() + "接收到数据:" +str );
                    }
                    else
                    {
                        txtRcv.AppendText(Encoding.ASCII.GetString(buffer));

                    }


                }

               )
            );

        }
        
        private void ckbxSend_CheckedChanged(object sender, EventArgs e)
        {
            string hexOutput = "";
            if (ckbxSend.Checked)
            {


                char[] values = txtSend.Text.ToCharArray();
                foreach (char letter in values)
                {
                    int value = Convert.ToInt32(letter);
                    hexOutput += String.Format("{0:X}", value);
                }
                txtSend.Text = hexOutput;
            }
           
            else
            {
               
            }           
        }

        private void ckbxView_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbxView.Checked)
            {
                string hexOutput = "";
                char[] values = txtRcv.Text.ToCharArray();
                foreach (char letter in values)
                {
                    int value = Convert.ToInt32(letter);
                    hexOutput += String.Format("{0:X}", value);
                }
                txtRcv.Text = hexOutput;
            }
            else
            {

            }

        }






        }
}

搜索更多相关主题的帖子: 不胜感激 十六进制 通信 
2011-03-28 14:31
ykp
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-3-23
收藏
得分:0 
,高手大侠尽快指点啊,不胜感激,谢谢了 啊
2011-03-28 14:35
ykp
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-3-23
收藏
得分:0 
回复 3楼 yehuanfeng
private void ckbxSend_CheckedChanged(object sender, EventArgs e)
        {
            string hexOutput = "";
            if (ckbxSend.Checked)
            {


                char[] values = txtSend.Text.ToCharArray();
                foreach (char letter in values)
                {
                    int value = Convert.ToInt32(letter);
                    hexOutput += String.Format("{0:X}", value);
                }
                txtSend.Text = hexOutput;
            }
           
            else
            {
               
            }           
        }

        private void ckbxView_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbxView.Checked)
            {
                string hexOutput = "";
                char[] values = txtRcv.Text.ToCharArray();
                foreach (char letter in values)
                {
                    int value = Convert.ToInt32(letter);
                    hexOutput += String.Format("{0:X}", value);
                }
                txtRcv.Text = hexOutput;
            }
            else
            {

            }

        }






      
2011-03-29 14:52
ykp
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-3-23
收藏
得分:0 
回复 3楼 yehuanfeng
关键代码已经找出,请帮忙解决问题,谢谢
2011-03-29 14:54
ykp
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-3-23
收藏
得分:0 
回复 5楼 ykp
您好,我现在的问题还是没解决,例如:我在输入框输入11,当我点击的时候将11转化为十六进制即31 31,当我取消点选的时候,将31 31转化为11,你QQ多少,方便告诉我的话,就说一下,我的350674330
2011-03-30 14:42
ykp
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-3-23
收藏
得分:0 
string hexOutput = "";
                char[] values = txtRcv.Text.ToCharArray();
                foreach (char letter in values)
                {
                    int value = Convert.ToInt32(letter);
                    hexOutput += String.Format("{0:X}", value);
                }
                txtRcv.Text = hexOutput;
我的这段代码已经可以将11转化为16进制的31 31了,我要解决的就是取消点选将十六进制的31 31 转化为11,请帮忙指教,我是这样写的,但是不对
                string strOutput = "";
                char[] values = txtSend.Text.ToCharArray();
                foreach (char letter in values)
                {
                    int value = Convert.ToInt32(letter);
                    byte[] data = System.BitConverter.GetBytes(value);
                    strOutput += Encoding.ASCII.GetString(data);
                }
                txtSend.Text = strOutput;
2011-03-30 15:57
ykp
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-3-23
收藏
得分:0 
回复 8楼 yehuanfeng
分数我会给你的
2011-03-30 15:57
快速回复:C#串口通信
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014850 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved