private void serialPort1_DataReceived(object sender,SerialDataReceivedEventArgs e)
        {
            System.Threading.Thread.Sleep(100);
            int bytes = sepor.BytesToRead;
            byte[] buffer=new byte[bytes];
            if (bytes == 0)
            {
                return;
            }
            sepor.Read(buffer,0,bytes);
            string srt = string.Empty;
            foreach(byte a in buffer)
            {
                srt += a.ToString();
            }
            textBox1.Text =srt;
           
        }
 private void Form1_Load(object sender, EventArgs e)
        {
            sepor.PortName = "COM4"; //选择串口COM4
            sepor.BaudRate = 4800;  //设置通信口参数
            sepor.DataBits = 7;     //数据位
            sepor.Parity = System.IO.Ports.Parity.None; //校验位 无校验
            sepor.StopBits = System.IO.Ports.StopBits.One; //停止位  1位
            sepor.ReadBufferSize = 1024;            sepor.Open();
            sepor.ReadExisting(); //设置input从接收缓冲读取全数据
            sepor.ReceivedBytesThreshold = 1;  //设置引发OnComm事件的字节长度
            sepor.DiscardInBuffer(); //清楚接受缓冲区
            timer1.Start();
        }
刷卡之后显示出来的数据 是一堆的数字 不是我要的卡号,,请高手解决

解决方案 »

  1.   

      foreach(byte a in buffer)
      {
      srt += a.ToString();
      }
      textBox1.Text =srt;
        
      }
    数据显示的方式不对,两个线程。你自己去搜索下。
      

  2.   

    这是你真实的代码吗?sepor对象是怎么生成的?它的数据处理函数怎么是serialPort1_DataReceived
      

  3.   

            void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)   
            {   
                int n = comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致   
                byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据   
                received_count += n;//增加接收计数   
                comm.Read(buf, 0, n);//读取缓冲数据   
                builder.Clear();//清除字符串构造器的内容   
                //因为要访问ui资源,所以需要使用invoke方式同步ui。   
                this.Invoke((EventHandler)(delegate  
                {   
                    //判断是否是显示为16禁止   
                    if (checkBoxHexView.Checked)   
                    {   
                        //依次的拼接出16进制字符串   
                        foreach (byte b in buf)   
                        {   
                            builder.Append(b.ToString("X2") + " ");   
                        }   
                    }   
                    else  
                    {   
                        //直接按ASCII规则转换成字符串   
                        builder.Append(Encoding.ASCII.GetString(buf));   
                    }   
                    //追加的形式添加到文本框末端,并滚动到最后。   
                    this.txGet.AppendText(builder.ToString());   
                    //修改接收计数   
                    labelGetCount.Text = "Get:" + received_count.ToString();   
                }));   
            }   
      本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wuyazhe/archive/2010/05/17/5598945.aspx
      

  4.   

    1:肯定是一堆数据
    2:如果要显示卡号。
    就得建立一个关联关系1:选采码(就是刚才显示的)
    如:00 00 00 FA 55
    2:再输入卡号:
    0511
    3:还可以有名字
    张三这样刷卡后,就可以根据“00 00 00 FA 55”来显示“0511 张三”了。
      

  5.   

    看看数字有设么规律。如果传来的直接就是ascii。你这样转成ascii编码了。
    serialPort1_DataReceived方法替换成如下的试试?
    private void serialPort1_DataReceived(object sender,SerialDataReceivedEventArgs e)
    {
    this.Invoke((EventHandler)delegate{textBox1.Text = serialPort1.ReadExisting();});
    }