我用c# 写一个界面 想让单片机 返回一个值 呈现在c#写的界面里 怎么连接啊 好像用什么 串口 com口连接 我也不太明白 求高人指点
12 个解决方案
#1
让单片机往COM口发数据,在计算机端写一个程序,读取COM口的数据啊。。。。你的思路不是有吗????
是计算机端的程序不会??
是计算机端的程序不会??
#2
SerialPort 控件
#3
对 计算机程序不回
#4
也知道一些private SerialPort serialPort = new SerialPort();
serialPort.PortName = com1;
serialPort.BaudRate = 9600;
serialPort.DataBits = 8;
serialPort.StopBits = StopBits.One;
serialPort.Parity = Parity.None;
serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
但是 总是出错 高人指点一下 要详细
谢谢
serialPort.PortName = com1;
serialPort.BaudRate = 9600;
serialPort.DataBits = 8;
serialPort.StopBits = StopBits.One;
serialPort.Parity = Parity.None;
serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
但是 总是出错 高人指点一下 要详细
谢谢
#5
楼上的heyuan390908582回答已经基本正确了,出错的问题,请具体说明一下出错的内容
估计缺了下面这个属性定义
serialPort.Encoding = Encoding.Default;//文本转换字节编码规则
或者这个属性的赋值错了
serialPort.PortName = "COM1";//必须是大写COM
估计缺了下面这个属性定义
serialPort.Encoding = Encoding.Default;//文本转换字节编码规则
或者这个属性的赋值错了
serialPort.PortName = "COM1";//必须是大写COM
#6
serialPort.open();打开
serialPort.Write(,,);发送
serialPort.Read(,,);读数
serialPort.Write(,,);发送
serialPort.Read(,,);读数
#7
先学基础,基础弄懂了。再来弄。
#8
我已经收到数了 但是和我要的数不一样啊 我想要我c#界面串口返回来的数 随着单片机返回数变化 单片机不断的变化着数 但界面数据好像和单片机返回的数据不一样啊 请求指点
#9
用serialPort控件可以进行串口通 然后再上下位机进行通信就可以了
#10
不太明白 能给详细的代码么
#11
我说详细点 求指导
我从单片机那里 一次接受两个数 两个数的范围 都是 0~255中变化 单片机 不断的改变数 我想用一个c#的界面的控件textbox 表示出来 我现在已经得到数了 但是 有时候 是想要的 有时候 不是想要的
这是我编的程序 有错误 刚学是新手 求指导
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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.Threading;
using System.Windows.Threading;
namespace 泥石流1
{
/// <summary>
/// Window1.xaml 的交互逻辑
/// </summary>
public partial class Window1 : Window
{
DispatcherTimer dt1 = new DispatcherTimer();
public Window1()
{
InitializeComponent();
dt1.IsEnabled = false;
dt1.Interval = TimeSpan.FromMilliseconds(0.417);
dt1.Tick += new EventHandler(dt1_Tick);
}
void dt1_Tick(object sender, EventArgs e)
{
SerialPort sp = new SerialPort();
sp.PortName = "COM3";
sp.BaudRate = 9600;
sp.Encoding = Encoding.Default;
sp.Parity = Parity.None;
sp.DataBits = 8;
sp.StopBits = StopBits.One;
sp.Open();
AReceiveData(sp);
}
private void button1_Click(object sender, RoutedEventArgs e)
{
dt1.IsEnabled = true;
}
private void button2_Click(object sender, RoutedEventArgs e)
{
dt1.IsEnabled = false;
}
//private void ReceiveData(SerialPort sp)
//{
// //同步阻塞接收数据线程
// Thread threadReceive = new Thread(new ParameterizedThreadStart(AReceiveData));
// threadReceive.Start(sp);
//}
private void AReceiveData(object spobj)
{
SerialPort sp = (SerialPort)spobj;
System.Threading.Thread.Sleep(0);
sp.ReadTimeout = 1000;
try
{
byte firstByte = Convert.ToByte(sp.ReadByte());
int bytesRead = sp.BytesToRead;
byte[] bytesData = new byte[bytesRead + 1];
bytesData[0] = firstByte;
for (int i = 1; i <= bytesRead; i++)
bytesData[i] = Convert.ToByte(sp.ReadByte());
textBox1.Text = System.Text.Encoding.Default.GetString(bytesData);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
sp.Close();
}
}
}
我从单片机那里 一次接受两个数 两个数的范围 都是 0~255中变化 单片机 不断的改变数 我想用一个c#的界面的控件textbox 表示出来 我现在已经得到数了 但是 有时候 是想要的 有时候 不是想要的
这是我编的程序 有错误 刚学是新手 求指导
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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.Threading;
using System.Windows.Threading;
namespace 泥石流1
{
/// <summary>
/// Window1.xaml 的交互逻辑
/// </summary>
public partial class Window1 : Window
{
DispatcherTimer dt1 = new DispatcherTimer();
public Window1()
{
InitializeComponent();
dt1.IsEnabled = false;
dt1.Interval = TimeSpan.FromMilliseconds(0.417);
dt1.Tick += new EventHandler(dt1_Tick);
}
void dt1_Tick(object sender, EventArgs e)
{
SerialPort sp = new SerialPort();
sp.PortName = "COM3";
sp.BaudRate = 9600;
sp.Encoding = Encoding.Default;
sp.Parity = Parity.None;
sp.DataBits = 8;
sp.StopBits = StopBits.One;
sp.Open();
AReceiveData(sp);
}
private void button1_Click(object sender, RoutedEventArgs e)
{
dt1.IsEnabled = true;
}
private void button2_Click(object sender, RoutedEventArgs e)
{
dt1.IsEnabled = false;
}
//private void ReceiveData(SerialPort sp)
//{
// //同步阻塞接收数据线程
// Thread threadReceive = new Thread(new ParameterizedThreadStart(AReceiveData));
// threadReceive.Start(sp);
//}
private void AReceiveData(object spobj)
{
SerialPort sp = (SerialPort)spobj;
System.Threading.Thread.Sleep(0);
sp.ReadTimeout = 1000;
try
{
byte firstByte = Convert.ToByte(sp.ReadByte());
int bytesRead = sp.BytesToRead;
byte[] bytesData = new byte[bytesRead + 1];
bytesData[0] = firstByte;
for (int i = 1; i <= bytesRead; i++)
bytesData[i] = Convert.ToByte(sp.ReadByte());
textBox1.Text = System.Text.Encoding.Default.GetString(bytesData);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
sp.Close();
}
}
}
#12
补充一下
接收的两个数中有空格
不用上面的也行
能出来就好
谢谢了
接收的两个数中有空格
不用上面的也行
能出来就好
谢谢了
#1
让单片机往COM口发数据,在计算机端写一个程序,读取COM口的数据啊。。。。你的思路不是有吗????
是计算机端的程序不会??
是计算机端的程序不会??
#2
SerialPort 控件
#3
对 计算机程序不回
#4
也知道一些private SerialPort serialPort = new SerialPort();
serialPort.PortName = com1;
serialPort.BaudRate = 9600;
serialPort.DataBits = 8;
serialPort.StopBits = StopBits.One;
serialPort.Parity = Parity.None;
serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
但是 总是出错 高人指点一下 要详细
谢谢
serialPort.PortName = com1;
serialPort.BaudRate = 9600;
serialPort.DataBits = 8;
serialPort.StopBits = StopBits.One;
serialPort.Parity = Parity.None;
serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
但是 总是出错 高人指点一下 要详细
谢谢
#5
楼上的heyuan390908582回答已经基本正确了,出错的问题,请具体说明一下出错的内容
估计缺了下面这个属性定义
serialPort.Encoding = Encoding.Default;//文本转换字节编码规则
或者这个属性的赋值错了
serialPort.PortName = "COM1";//必须是大写COM
估计缺了下面这个属性定义
serialPort.Encoding = Encoding.Default;//文本转换字节编码规则
或者这个属性的赋值错了
serialPort.PortName = "COM1";//必须是大写COM
#6
serialPort.open();打开
serialPort.Write(,,);发送
serialPort.Read(,,);读数
serialPort.Write(,,);发送
serialPort.Read(,,);读数
#7
先学基础,基础弄懂了。再来弄。
#8
我已经收到数了 但是和我要的数不一样啊 我想要我c#界面串口返回来的数 随着单片机返回数变化 单片机不断的变化着数 但界面数据好像和单片机返回的数据不一样啊 请求指点
#9
用serialPort控件可以进行串口通 然后再上下位机进行通信就可以了
#10
不太明白 能给详细的代码么
#11
我说详细点 求指导
我从单片机那里 一次接受两个数 两个数的范围 都是 0~255中变化 单片机 不断的改变数 我想用一个c#的界面的控件textbox 表示出来 我现在已经得到数了 但是 有时候 是想要的 有时候 不是想要的
这是我编的程序 有错误 刚学是新手 求指导
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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.Threading;
using System.Windows.Threading;
namespace 泥石流1
{
/// <summary>
/// Window1.xaml 的交互逻辑
/// </summary>
public partial class Window1 : Window
{
DispatcherTimer dt1 = new DispatcherTimer();
public Window1()
{
InitializeComponent();
dt1.IsEnabled = false;
dt1.Interval = TimeSpan.FromMilliseconds(0.417);
dt1.Tick += new EventHandler(dt1_Tick);
}
void dt1_Tick(object sender, EventArgs e)
{
SerialPort sp = new SerialPort();
sp.PortName = "COM3";
sp.BaudRate = 9600;
sp.Encoding = Encoding.Default;
sp.Parity = Parity.None;
sp.DataBits = 8;
sp.StopBits = StopBits.One;
sp.Open();
AReceiveData(sp);
}
private void button1_Click(object sender, RoutedEventArgs e)
{
dt1.IsEnabled = true;
}
private void button2_Click(object sender, RoutedEventArgs e)
{
dt1.IsEnabled = false;
}
//private void ReceiveData(SerialPort sp)
//{
// //同步阻塞接收数据线程
// Thread threadReceive = new Thread(new ParameterizedThreadStart(AReceiveData));
// threadReceive.Start(sp);
//}
private void AReceiveData(object spobj)
{
SerialPort sp = (SerialPort)spobj;
System.Threading.Thread.Sleep(0);
sp.ReadTimeout = 1000;
try
{
byte firstByte = Convert.ToByte(sp.ReadByte());
int bytesRead = sp.BytesToRead;
byte[] bytesData = new byte[bytesRead + 1];
bytesData[0] = firstByte;
for (int i = 1; i <= bytesRead; i++)
bytesData[i] = Convert.ToByte(sp.ReadByte());
textBox1.Text = System.Text.Encoding.Default.GetString(bytesData);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
sp.Close();
}
}
}
我从单片机那里 一次接受两个数 两个数的范围 都是 0~255中变化 单片机 不断的改变数 我想用一个c#的界面的控件textbox 表示出来 我现在已经得到数了 但是 有时候 是想要的 有时候 不是想要的
这是我编的程序 有错误 刚学是新手 求指导
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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.Threading;
using System.Windows.Threading;
namespace 泥石流1
{
/// <summary>
/// Window1.xaml 的交互逻辑
/// </summary>
public partial class Window1 : Window
{
DispatcherTimer dt1 = new DispatcherTimer();
public Window1()
{
InitializeComponent();
dt1.IsEnabled = false;
dt1.Interval = TimeSpan.FromMilliseconds(0.417);
dt1.Tick += new EventHandler(dt1_Tick);
}
void dt1_Tick(object sender, EventArgs e)
{
SerialPort sp = new SerialPort();
sp.PortName = "COM3";
sp.BaudRate = 9600;
sp.Encoding = Encoding.Default;
sp.Parity = Parity.None;
sp.DataBits = 8;
sp.StopBits = StopBits.One;
sp.Open();
AReceiveData(sp);
}
private void button1_Click(object sender, RoutedEventArgs e)
{
dt1.IsEnabled = true;
}
private void button2_Click(object sender, RoutedEventArgs e)
{
dt1.IsEnabled = false;
}
//private void ReceiveData(SerialPort sp)
//{
// //同步阻塞接收数据线程
// Thread threadReceive = new Thread(new ParameterizedThreadStart(AReceiveData));
// threadReceive.Start(sp);
//}
private void AReceiveData(object spobj)
{
SerialPort sp = (SerialPort)spobj;
System.Threading.Thread.Sleep(0);
sp.ReadTimeout = 1000;
try
{
byte firstByte = Convert.ToByte(sp.ReadByte());
int bytesRead = sp.BytesToRead;
byte[] bytesData = new byte[bytesRead + 1];
bytesData[0] = firstByte;
for (int i = 1; i <= bytesRead; i++)
bytesData[i] = Convert.ToByte(sp.ReadByte());
textBox1.Text = System.Text.Encoding.Default.GetString(bytesData);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
sp.Close();
}
}
}
#12
补充一下
接收的两个数中有空格
不用上面的也行
能出来就好
谢谢了
接收的两个数中有空格
不用上面的也行
能出来就好
谢谢了