串口数据的读取与显示
2011-03-08 11:05
375 查看
串口数据的读取与显示
假设有一个一边,不断的通过端口发送数据,每八位算作一组,其中有一位的ASCII码对应字符为“=”,现在要将它显示到TextBox控件上现在面临两个问题,如何读取串口数据,如何将串口数据显示在TextBox上。
为了能够简要的说明问题,这里并没有对接收的数据做特殊处理而只是直接显示在TextBox控件上。
1.串口数据的读取
读取串口数据是通过串口控件进行的,在工具箱中选择SerialPort,将它拖放到窗口控件上就可以了,此时,在串口下端,会显示串口控件的实例名称,本例为serialPort1:
有了SerialPort控件实例之后,要对它的一些属性进行设置,但是设置之前首先判断端口是否打开,如果打开,则先关闭端口,然后才能进行设置,设置完毕后再打开端口。这个过程中用到了SerialPort的下面两个方法:
Open 打开一个新的串行端口连接。
Close 关闭端口连接,将 IsOpen 属性设置为 false,并释放内部 Stream 对象。
其中有几个比较重要的属性:
PortName 获取或设置通信端口,包括但不限于所有可用的 COM 端口。
BaudRate 获取或设置串行波特率。
IsOpen 获取一个值,该值指示 SerialPort 对象的打开或关闭状态。
ReceivedBytesThreshold 获取或设置 DataReceived 事件发生前内部输入缓冲区中的字节数。
对应程序如下:
?
这样就会自动添加DataRecieved事件处理函数:
?
名称 | 说明 |
SerialPort.Read (Byte[], Int32, Int32) | 从 SerialPort 输入缓冲区读取一些字节并将那些字节写入字节数组中指定的偏移量处。 |
SerialPort.Read (Char[], Int32, Int32) | 从 SerialPort 输入缓冲区读取一些字节并将那些字节写入到字节数组中指定的偏移量处。 |
本程序中我们声明了一个Byte数组receivedData用来接收串口发送来的数据。要把Byte[]转化成String可以使用Encoding.ASCII.GetString()方法,它返回String。然后再清空SerialPort控件的Buffer,以便接收后面发来的数据.
?
2.将串口数据的显示在TextBox上
上面我们已经得到了串口读取的数据text,也知道不能直接将它在DataRecieved事件处理方法中设置给TextBox,为了能够将它传递给TextBox,我们需要使用窗口类的Invoke方法
Control.Invoke (Delegate, Object[]) 在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托。
通过调用委托(Delegate),并且将参数以数组的形式(Object[])传递给委托,就能使用委托里面的方法。
这里使用了委托的概念,本文不对此做深入介绍,简单来说就是声明一个委托,再用委托声明事件,最后将事件处理方法添加给事件即可,但是要注意,添加的事件处理方法的参数列表必须与委托的参数列表相同:
?
?
?
相关文章推荐
- matlab读取串口数据并显示曲线
- 用matlab实时读取串口数据并动态显示曲线
- SerialPort如何读取串口数据并显示在TextBox上,多线程委托
- C#2.0中,SerialPort如何读取串口数据并显示在TextBox上
- QT子线程读取串口数据并传到主线程实时显示心电波形图
- 扫描枪读条码数据在单片机串口电路的读取与显示
- SerialPort如何读取串口数据并显示在TextBox上,多线程委托
- C#SerialPort如何读取串口数据并显示在TextBox上
- 扫描枪读条码数据在单片机串口电路的读取与显示
- SerialPort如何读取串口数据并显示在TextBox上,多线程委托
- C#2.0中,SerialPort如何读取串口数据并显示在TextBox上
- 串口数据的读取与显示
- 从网络读取数据并动态的显示在ListView中
- Linux串口编程一次读取全部输入的数据(输入数据不定长)
- ajax读取数据后使用jqchart显示图表的方法
- 终于做到站点数据的读取,显示了,呵呵
- 将数据库中的数据读取到数据表中,并通过datagridview显示
- android基础笔记:从网路中读取数据,并显示(Thread、handler、httpclient、XmlPullParser 、BaseAdapter)
- 如何将pictureBox里的图片保存到数据库,然后从数据读取显示
- C#后台制作之数据库(Access数据库+datagirdview控件显示+串口数据存储)