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();
}
刷卡之后显示出来的数据 是一堆的数字 不是我要的卡号,,请高手解决
{
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();
}
刷卡之后显示出来的数据 是一堆的数字 不是我要的卡号,,请高手解决
解决方案 »
- C#可以调用VCMFC扩展的DLL吗?
- 请问,大家如何做.net的排版的?vs下面做排版很难看啊,大家是怎么做的?还有如果我用DW开发.net,怎么在DW里有代码提示功能啊,象VS一样
- C#连接SQL SERVER字符串,怎样写?
- 请版主,思归等高手帮忙。EXCEL难题。
- 关一个中文编码的问题,急用
- 60分,关于this的问题
- 请教:SQL查询中出现不固定的多个参数存储过程怎样写?(在线等)
- URL方式传递参数时如何隐藏参数?
- How to create to set up the document of *.MSC?
- SqlCommand中的SqlDataType怎么用?!
- 关于WCF 配置的一些初级问题,救命啊
- 如何强制用户必须登录后才能访问网站主页?
{
srt += a.ToString();
}
textBox1.Text =srt;
}
数据显示的方式不对,两个线程。你自己去搜索下。
{
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
2:如果要显示卡号。
就得建立一个关联关系1:选采码(就是刚才显示的)
如:00 00 00 FA 55
2:再输入卡号:
0511
3:还可以有名字
张三这样刷卡后,就可以根据“00 00 00 FA 55”来显示“0511 张三”了。
serialPort1_DataReceived方法替换成如下的试试?
private void serialPort1_DataReceived(object sender,SerialDataReceivedEventArgs e)
{
this.Invoke((EventHandler)delegate{textBox1.Text = serialPort1.ReadExisting();});
}