110,533
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SerialPort port1=new SerialPort();
//接收数据
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// 读取缓冲区的数据
string data = port1.ReadExisting();
textBox1.Text = data;
}
//初始化SerialPort对象方法.PortName为COM口名称,例如"COM1","COM2"等,注意是string类型
public void InitCOM(string PortName)
{
port1 = new SerialPort(PortName);
port1.BaudRate = 9600;//波特率
port1.Parity = Parity.None;//无奇偶校验位
port1.StopBits = StopBits.One;//两个停止位
port1.DataBits = 8;
}
//DataReceived事件委托方法
private void port1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// 读取缓冲区的数据
string data = port1.ReadExisting();
textBox1.Text = data;
}
//打开串口的方法
public void OpenPort()
{
try
{
port1.Open();
}
catch
{
}
if (port1.IsOpen)
{
Console.WriteLine("the port is opened");
}
else
{
Console.WriteLine("failure to open the port");
}
}
//关闭串口
public void ClosePort()
{
port1.Close();
if (!port1.IsOpen)
{
Console.WriteLine("the port is already closed");
}
}
//向串口发送数据
public void SendCommand(string CommandString)
{
port1.Write(CommandString);
//Console.WriteLine(port1.ReadExisting());
textBox1.Text = port1.ReadExisting();
}
private void button1_Click(object sender, EventArgs e)
{
if (!port1.IsOpen)
{
InitCOM("COM1");
OpenPort();
}
SendCommand("abcdefg");
}
private void button2_Click(object sender, EventArgs e)
{
port1.Close();
}
private void Form1_Load(object sender, EventArgs e)
{
port1.DataReceived += new SerialDataReceivedEventHandler(port1_DataReceived);// new SerialDataReceivedEventHandler(port_DataReceived);
}
}
}
public delegate void RecieveRefreshTextDelegate(byte[] inbytes);
//声明委托
//定义一个委托实例
RecieveRefreshTextDelegate RecieveRefresh = new RecieveRefreshTextDelegate(RecieveRefreshText);
//定义一个实例方法
public void RecieveRefreshText(byte[] inbytes)
{
ShowRecieveData(inbytes);
}
private void ShowRecieveData(byte[] inbytes)
{
try {
ReceiveCount += inbytes.Length;
//接收数据累计个数
comjslj.Text = ReceiveCount.ToString;
//接收计数
byte bytes_temp = 0;
System.Text.StringBuilder instrs_temp = new System.Text.StringBuilder();
if (HexRecieveFlag) {
foreach (byte bytes_temp_loopVariable in inbytes) {
bytes_temp = bytes_temp_loopVariable;
instrs_temp.Append(String.Format("{0:X2} ", bytes));
}
TextBoxRecieve.AppendText(instrs_temp.ToString());
}
// ex As Exception
} catch {
}
}
// 数据接收
private void SerialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
try {
int inDataLen = SerialPort.BytesToRead();
//缓冲区收到的个数
if (inDataLen > 0) {
byte[] inBytes = new byte[inDataLen];
SerialPort.Read(inBytes, 0, inDataLen);
//读取缓冲区
TextBoxRecieve.Invoke(RecieveRefresh, inBytes);
//显示出来--同步委托
}
//ex As Exception
} catch {
}
}
public void SendCommand(string CommandString)
{
port1.Write(CommandString);
//Console.WriteLine(port1.ReadExisting());
textBox1.Text = port1.ReadExisting();
}
private void button1_Click(object sender, EventArgs e)
{
if (!port1.IsOpen)
{
InitCOM("COM1");
OpenPort();
}
SendCommand("abcdefg");
}
private void ReadData()
{
SerialPort sp = new SerialPort("COM3");
try
{
sp.Open();
string msg = sp.ReadLine();
MessageBox.Show(msg);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
sp.Close();
}
}