实现简单的串口通信
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.IO.Ports; using System.IO; using System.Threading; using System.Windows.Threading; namespace 串口通信 { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { SerialPort sp = new SerialPort(); public MainWindow() { InitializeComponent(); //加载所有的端口 cbxPorts.ItemsSource = SerialPort.GetPortNames(); //设置botelv cbxBat.ItemsSource = new int[] { 38400, 9600, 115200, 57600 }; } //打开端口 private void btnOpen_Click(object sender, RoutedEventArgs e) { //判断端口是否打开 if (!sp.IsOpen) { //端口 sp.PortName = cbxPorts.Text; //波特率 sp.BaudRate = int.Parse(cbxBat.Text); //打开端口 sp.Open(); tbxShow.Text = "串口打开成功"; } else { tbxShow.Text = "打开串口失败"; } } //发送信息 private void btnSend_Click(object sender, RoutedEventArgs e) { //向端口发送信息 byte[] buff = Encoding.Default.GetBytes(tbxSend.Text); sp.Write(buff,0,buff.Length); } //接收事件 private void btnRecieve_Click(object sender, RoutedEventArgs e) { sp.DataReceived += sp_DataReceived; } void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) { //获取缓存中的字节数 int count = sp.BytesToRead; //字符转数组 byte[] buff = new byte[count]; //读取到端口发来信息 sp.Read(buff,0,count); //把读取的信息放到控件中 string str = Encoding.Default.GetString(buff); //委托显示 Dispatcher.Invoke(new Action(()=> { lbxRecieve.Items.Add(str); })); } } }
<Window x:Class="串口通信.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="411.036" Width="532.3"> <Grid> <ComboBox x:Name="cbxPorts" HorizontalAlignment="Left" Margin="95,27,0,0" VerticalAlignment="Top" Width="75" FontSize="16"/> <Button x:Name="btnOpen" Content="打开" HorizontalAlignment="Left" Margin="95,138,0,0" VerticalAlignment="Top" Width="75" FontSize="16" Click="btnOpen_Click"/> <Label Content="端口:" HorizontalAlignment="Left" Margin="35,29,0,0" VerticalAlignment="Top"/> <ComboBox x:Name="cbxBat" HorizontalAlignment="Left" Margin="95,78,0,0" VerticalAlignment="Top" Width="75" FontSize="16"/> <Label Content="波特率:" HorizontalAlignment="Left" Margin="35,80,0,0" VerticalAlignment="Top"/> <Label Content="状态:" HorizontalAlignment="Left" Margin="41,196,0,0" VerticalAlignment="Top" Width="129"/> <TextBox x:Name="tbxShow" HorizontalAlignment="Left" Height="26" Margin="41,244,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="129"/> <TextBox x:Name="tbxSend" HorizontalAlignment="Left" Height="26" Margin="226,78,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="252"/> <Label Content="发送数据框:" HorizontalAlignment="Left" Margin="226,27,0,0" VerticalAlignment="Top" Width="102"/> <Button x:Name="btnSend" Content="发送" HorizontalAlignment="Left" Margin="403,138,0,0" VerticalAlignment="Top" Width="75" Click="btnSend_Click"/> <Label Content="发送数据框:" HorizontalAlignment="Left" Margin="226,196,0,0" VerticalAlignment="Top" Width="102"/> <Button x:Name="btnRecieve" Content="接收" HorizontalAlignment="Left" Margin="403,316,0,0" VerticalAlignment="Top" Width="75" RenderTransformOrigin="0.548,3.486" Click="btnRecieve_Click"/> <ListBox x:Name="lbxRecieve" HorizontalAlignment="Left" Height="69" Margin="226,227,0,0" VerticalAlignment="Top" Width="252"/> </Grid> </Window>上面是界面代码