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();
}
刷卡之后显示出来的数据 是一堆的数字 不是我要的卡号,,请高手解决
解决方案 »
- Ajax现在能实现很多功能,有没有详细功能介绍呢?
- 关于命名空间System.Net无法使用
- 小弟在做毕业设计初接触“水晶报表”照着网上的代码自己写但是出现了下列问题,请高手指教
- 关于DataGridView问题
- 怎么从内存中读取内容到声明的string变量中?
- (C#)关于word中取消选中问题,请大家帮忙!在线等!
- winform动态加入按钮问题?
- 如何在asp和aspx页面间传值或相互调用值呢?
- 一单据录入系统,求解决方案(基于.Net WinForm)
- 如何用编程的方式来改变我本机的IP地址?
- 用c#开发的office2003程序与office2007程序,代码相同吗?是否能互相兼容
- 如何增加VS中某个控件的功能啊?需要自己重头做一个控件吗?
public class RevSerialPort
{
SerialPort serialPort;
StringBuilder sb;
public RevSerialPort()
{
sb = new StringBuilder();
serialPort = new SerialPort();
serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
} public RevSerialPort(string portName)
{
sb = new StringBuilder();
serialPort = new SerialPort(portName);
serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
} public RevSerialPort(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits)
{
sb = new StringBuilder();
serialPort = new SerialPort(portName, baudRate, parity, dataBits, stopBits);
serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
} void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
sb.Append(serialPort.ReadExisting());
int index = sb.ToString().IndexOf((char)0xd);
if (index > 0)
{
try
{
System.Windows.Forms.SendKeys.SendWait(sb.ToString(0, index) + "~");
}
finally
{
sb.Remove(0, index + 1);
}
}
} public void Start()
{
serialPort.Open();
} public void Stop()
{
if (serialPort.IsOpen)
serialPort.Close();
}
}
我用com口读电子称上的数据过,那是16进制数据,然后把16进制转化成10进制的数就可以,
不了解你的东西自能给你个思路
System.Text.Encoding.Ascii.GetString(byte[]);
RevSerialPort rsp;public Form1()
{
InitializeComponent();
try
{
rsp = new RevSerialPort("COM1");//这里指定一个COM口来初始化
rsp.Start();
}
catch (Exception ex)
{
XtraMessageBox.Show(ex.Message);
}
}void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (rsp != null)
rsp.Stop();
}
其中Form1_FormClosing是对应了FormClosing事件的,自己添加,rsp是全局变量,为了可以在窗口关闭时释放资源。
{
System.Threading.Thread.Sleep(100);
int bytes = sepor.BytesToRead;
byte[] buffer=new byte[bytes];
if (bytes == 0)
{
return;
}
sepor.Read(buffer,0,bytes);
Encoding.UTF8.GetString(buffer)
Convert.ToString(byte, 16)//转换成十六进制字符
Convert.ToByte("十六进制字符",16);//转换成十进制数据
{
System.Threading.Thread.Sleep(100);
int bytes = sepor.BytesToRead;
byte[] buffer=new byte[bytes];
if (bytes == 0)
{
return;
}
sepor.Read(buffer,0,bytes);
textBox1.Text =Encoding.UTF8.GetString(buffer);
这样不行?
string strReceivedData="";
for(int i=0;i<buffer.Length;i++)
{
strReceivedData+=(char)(buffer[i].ToString());
}
没有ReadExit()这个方法哦。ReadExisting有这个
{ #region 串口工具 GetBox.Focus(); Thread thread = new Thread(CrossThreadFlush);
thread.IsBackground = true;
thread.Start(); if (serialPortDeb.IsOpen)
{
MessageBox.Show("串口已打开!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
serialPortDeb.Open(); string[] ports = System.IO.Ports.SerialPort.GetPortNames();
for (Int32 i = 0; i < ports.Length; i++)
{
comboBoxPortN.Items.Add(ports[i]);
}
comboBoxPortN.Text = ports[0];
} OpenP.Visible = false; #endregion } private void CrossThreadFlush()
{
while (true)
{
//将sleep和无限循环放在等待异步的外面
Thread.Sleep(10);
ThreadFunction();
}
} private void ThreadFunction()
{
if (this.GetBox.InvokeRequired)//等待异步
{
FlushClient fc = new FlushClient(ThreadFunction);
try
{
this.Invoke(fc);//通过代理调用刷新方法
}
catch
{ }
}
else
{
lock (this)
{ if (serialPortDeb.BytesToRead != 0)
{
if (tabControlCon.SelectedIndex == 0)
{ string GetString = serialPortDeb.ReadExisting().Trim().ToString();
GetStringNum = GetStringNum + System.Convert.ToInt32(GetString.Length);
GetBox.Text = GetBox.Text + GetString; GetNum.Text = GetStringNum.ToString(); this.GetBox.SelectionStart = this.GetBox.Text.Length;
this.GetBox.SelectionLength = 0;
this.GetBox.ScrollToCaret(); }
}
}
}
}
string str = string.Empty;
for (int Index = 0; Index < buffer.Length;Index++ )
{
str += ((Char)(buffer[Index])).ToString();
}
textBox1.Text =str;
{
textBox1.Text += serialPort1.ReadExisting();
}