Files
kou_zhaoxielou_shandong/测试串口收发/Form1.cs
2026-01-16 20:53:33 +08:00

132 lines
4.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace
{
public partial class Form1 : Form
{
private SerialPort serialPort;
private SerialPort serialPort2;
public Form1()
{
InitializeComponent();
// 初始化SerialPort对象
serialPort = new SerialPort();
serialPort2=new SerialPort();
// 配置串口参数
serialPort.PortName = "COM5"; // 替换为你的串口端口号
serialPort.BaudRate = 9600;
serialPort.Parity = Parity.None;
serialPort.DataBits = 8;
serialPort.StopBits = StopBits.One;
// 订阅DataReceived事件可选用于接收数据
serialPort.DataReceived += new SerialDataReceivedEventHandler(SerialPort_DataReceived);
serialPort2.PortName = "COM6"; // 替换为你的串口端口号
serialPort2.BaudRate = 9600;
serialPort2.Parity = Parity.None;
serialPort2.DataBits = 8;
serialPort2.StopBits = StopBits.One;
// 订阅DataReceived事件可选用于接收数据
serialPort2.DataReceived += new SerialDataReceivedEventHandler(SerialPort_DataReceived2);
// 获取所有显示屏的信息
var screens = Screen.AllScreens;
// 检查是否有至少两块显示屏
if (screens.Length >= 2)
{
// 获取第二块显示屏的信息
var secondScreen = screens[1];
// 设置窗口在第二块显示屏上的位置和大小
this.StartPosition = FormStartPosition.Manual;
this.Location = new System.Drawing.Point(secondScreen.Bounds.X, secondScreen.Bounds.Y);
// 可选:调整窗口大小以匹配第二块显示屏(如果需要)
// this.Size = secondScreen.Bounds.Size;
}
else
{
// 如果没有第二块显示屏,则默认在主屏幕上显示
this.StartPosition = FormStartPosition.CenterScreen;
}
}
private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string data = serialPort.ReadExisting();
this.Invoke(new Action(() =>
{
textBox1.Text = data;
}));
// 注意这里使用MessageBox只是为了演示实际使用时可能需要更新UI控件注意线程安全
}
private void SerialPort_DataReceived2(object sender, SerialDataReceivedEventArgs e)
{
string data = serialPort2.ReadExisting();
this.Invoke(new Action(() =>
{
textBox2.Text = data;
}));
// 注意这里使用MessageBox只是为了演示实际使用时可能需要更新UI控件注意线程安全
}
private void button1_Click(object sender, EventArgs e)
{
if (serialPort.IsOpen)
{
// 发送字符"X"
serialPort.WriteLine("X");
serialPort2.WriteLine("X");
// 如果需要发送单个字符,可以使用 serialPort.Write("X"[0]); 或 serialPort.Write('X');
MessageBox.Show("已发送字符'X'");
}
else
{
MessageBox.Show("串口未打开!");
}
}
private void button3_Click(object sender, EventArgs e)
{
// 打开串口
try
{
serialPort.Open();
serialPort2.Open();
MessageBox.Show("串口已打开!");
}
catch (Exception ex)
{
MessageBox.Show("打开串口失败:" + ex.Message);
}
}
private void button2_Click(object sender, EventArgs e)
{
if (serialPort.IsOpen)
{
// 发送字符"X"
serialPort.WriteLine("Z");
serialPort2.WriteLine("Z");
// 如果需要发送单个字符,可以使用 serialPort.Write("X"[0]); 或 serialPort.Write('X');
MessageBox.Show("已发送字符'Z'");
}
else
{
MessageBox.Show("串口未打开!");
}
}
}
}