C#中如何使用SerialPort控件向单片机发送数据?
C#中如何使用SerialPort控件向单片机发送数据?(C#做的是一个基于VisualC++的Windows窗体应用程序)问题一:C#中如何使用SerialPort控件...
C#中如何使用SerialPort控件向单片机发送数据?(C#做的是一个基于Visual C++的Windows窗体应用程序)
问题一:C#中如何使用SerialPort控件?比如我要达到这样的效果:点击界面上的一个按纽,点击时发生的事件是将本界面上的一些数据传送到单片机。
问题二:界面上的数字是十进制的,单片机需要的是十六进制的,怎么处理?
非常需要您的指点,最好能有类似的实例,非常感谢!
我的信箱GEJIZHE@163.COM
QQ:413054244 展开
问题一:C#中如何使用SerialPort控件?比如我要达到这样的效果:点击界面上的一个按纽,点击时发生的事件是将本界面上的一些数据传送到单片机。
问题二:界面上的数字是十进制的,单片机需要的是十六进制的,怎么处理?
非常需要您的指点,最好能有类似的实例,非常感谢!
我的信箱GEJIZHE@163.COM
QQ:413054244 展开
展开全部
串口主要有以下几个参数:
1.串口名称(PortName)
2.波特率(BaudRate)
3.数据位(DataBits)
4.奇偶效应(Parity)
5.停止位(StopBits)
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Windows;
6 using System.Windows.Controls;
7 using System.Windows.Data;
8 using System.Windows.Documents;
9 using System.Windows.Input;
10 using System.Windows.Media;
11 using System.Windows.Media.Imaging;
12 using System.Windows.Navigation;
13 using System.Windows.Shapes;
14 using System.IO.Ports;
15
16 namespace CsharpComm
17 {
18 /// <summary>
19 /// Window1.xaml 的交互逻辑
20 /// </summary>
21 public partial class Window1 : Window
22 {
23 public Window1()
24 {
25 InitializeComponent();
26 }
27
28 //定义 SerialPort对象
29 SerialPort port1;
30
31 //初始化SerialPort对象方法.PortName为COM口名称,例如"COM1","COM2"等,注意是string类型
32 public void InitCOM(string PortName)
33 {
34 port1 = new SerialPort(PortName);
35 port1.BaudRate = 9600;//波特率
36 port1.Parity = Parity.None;//无奇偶校验位
37 port1.StopBits = StopBits.Two;//两个停止位
38 port1.Handshake = Handshake.RequestToSend;//控制协议
39 port1.ReceivedBytesThreshold = 4;//设置 DataReceived 事件发生前内部输入缓冲区中的字节数
40 port1.DataReceived += new SerialDataReceivedEventHandler(port1_DataReceived);//DataReceived事件委托
41 }
42
43 //DataReceived事件委托方法
44 private void port1_DataReceived(object sender, SerialDataReceivedEventArgs e)
45 {
46 try
47 {
48 StringBuilder currentline = new StringBuilder();
49 //循环接收数据
50 while (port1.BytesToRead > 0)
51 {
52 char ch = (char)port1.ReadByte();
53 currentline.Append(ch);
54 }
55 //在这里对接收到的数据进行处理
56 //
57 currentline = new StringBuilder();
58 }
59 catch(Exception ex)
60 {
61 Console.WriteLine(ex.Message.ToString());
62 }
63
64 }
65
66 //打开串口的方法
67 public void OpenPort()
68 {
69 try
70 {
71 port1.Open();
72 }
73 catch { }
74 if (port1.IsOpen)
75 {
76 Console.WriteLine("the port is opened!");
77 }
78 else
79 {
80 Console.WriteLine("failure to open the port!");
81 }
82 }
83
84 //关闭串口的方法
85 public void ClosePort()
86 {
87 port1.Close();
88 if (!port1.IsOpen)
89 {
90 Console.WriteLine("the port is already closed!");
91 }
92 }
93
94 //向串口发送数据
95 public void SendCommand(string CommandString)
96 {
97 byte[] WriteBuffer = Encoding.ASCII.GetBytes(CommandString);
98 port1.Write(WriteBuffer, 0, WriteBuffer.Length);
99 }
100
101 //调用实例
102 private void btnOpen_Click(object sender, RoutedEventArgs e)
103 {
104 //我现在用的COM1端口,按需要可改成COM2,COM3
105 InitCOM("COM1");
106 OpenPort();
107 }
108 }
109 }
最后推荐你再看一下这篇文章,应该会很有帮助
http://scorpiomiracle.javaeye.com/blog/653923
1.串口名称(PortName)
2.波特率(BaudRate)
3.数据位(DataBits)
4.奇偶效应(Parity)
5.停止位(StopBits)
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Windows;
6 using System.Windows.Controls;
7 using System.Windows.Data;
8 using System.Windows.Documents;
9 using System.Windows.Input;
10 using System.Windows.Media;
11 using System.Windows.Media.Imaging;
12 using System.Windows.Navigation;
13 using System.Windows.Shapes;
14 using System.IO.Ports;
15
16 namespace CsharpComm
17 {
18 /// <summary>
19 /// Window1.xaml 的交互逻辑
20 /// </summary>
21 public partial class Window1 : Window
22 {
23 public Window1()
24 {
25 InitializeComponent();
26 }
27
28 //定义 SerialPort对象
29 SerialPort port1;
30
31 //初始化SerialPort对象方法.PortName为COM口名称,例如"COM1","COM2"等,注意是string类型
32 public void InitCOM(string PortName)
33 {
34 port1 = new SerialPort(PortName);
35 port1.BaudRate = 9600;//波特率
36 port1.Parity = Parity.None;//无奇偶校验位
37 port1.StopBits = StopBits.Two;//两个停止位
38 port1.Handshake = Handshake.RequestToSend;//控制协议
39 port1.ReceivedBytesThreshold = 4;//设置 DataReceived 事件发生前内部输入缓冲区中的字节数
40 port1.DataReceived += new SerialDataReceivedEventHandler(port1_DataReceived);//DataReceived事件委托
41 }
42
43 //DataReceived事件委托方法
44 private void port1_DataReceived(object sender, SerialDataReceivedEventArgs e)
45 {
46 try
47 {
48 StringBuilder currentline = new StringBuilder();
49 //循环接收数据
50 while (port1.BytesToRead > 0)
51 {
52 char ch = (char)port1.ReadByte();
53 currentline.Append(ch);
54 }
55 //在这里对接收到的数据进行处理
56 //
57 currentline = new StringBuilder();
58 }
59 catch(Exception ex)
60 {
61 Console.WriteLine(ex.Message.ToString());
62 }
63
64 }
65
66 //打开串口的方法
67 public void OpenPort()
68 {
69 try
70 {
71 port1.Open();
72 }
73 catch { }
74 if (port1.IsOpen)
75 {
76 Console.WriteLine("the port is opened!");
77 }
78 else
79 {
80 Console.WriteLine("failure to open the port!");
81 }
82 }
83
84 //关闭串口的方法
85 public void ClosePort()
86 {
87 port1.Close();
88 if (!port1.IsOpen)
89 {
90 Console.WriteLine("the port is already closed!");
91 }
92 }
93
94 //向串口发送数据
95 public void SendCommand(string CommandString)
96 {
97 byte[] WriteBuffer = Encoding.ASCII.GetBytes(CommandString);
98 port1.Write(WriteBuffer, 0, WriteBuffer.Length);
99 }
100
101 //调用实例
102 private void btnOpen_Click(object sender, RoutedEventArgs e)
103 {
104 //我现在用的COM1端口,按需要可改成COM2,COM3
105 InitCOM("COM1");
106 OpenPort();
107 }
108 }
109 }
最后推荐你再看一下这篇文章,应该会很有帮助
http://scorpiomiracle.javaeye.com/blog/653923
迪凯特科技(北京)有限公司
2023-07-28 广告
2023-07-28 广告
RS232串行通讯的数据格式包括以下组成部分:1. 起始位:一位,用于表示数据的开始。2. 数据位:通常为8位,但也可以是7位或9位。3. 校验位:可以选择奇偶校验或无校验。4. 停止位:一位,用于表示数据的结束,也可以选择使用1.5个或2...
点击进入详情页
本回答由迪凯特科技(北京)有限公司提供
展开全部
你如果只是一个字符可以这样:
byte bt[0] = Convert.ToByte(你输入的字符串, 16);//注:此处字符串是单字节的
int n = Convert.ToInt32(你输入的字符串, 16);//如你需要的是数值型的
若字符串不是单字节的,可以转换成数组如下:
for(int i=0;i<str.Length/2;i=i+2)
{
byte[i]=Convert.ToByte(str.Substring(i*2, 2), 16);
}
byte bt[0] = Convert.ToByte(你输入的字符串, 16);//注:此处字符串是单字节的
int n = Convert.ToInt32(你输入的字符串, 16);//如你需要的是数值型的
若字符串不是单字节的,可以转换成数组如下:
for(int i=0;i<str.Length/2;i=i+2)
{
byte[i]=Convert.ToByte(str.Substring(i*2, 2), 16);
}
参考资料: http://zhidao.baidu.com/question/147554728
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
其实很简单,设置几个参数即可,下面是我写的从串口读取DS18B20发回温度的例子。
namespace 串口通信
{
public partial class Form1 : Form
{
SerialPort sp=new SerialPort ("COM1");
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
sp.BaudRate = 9600;
sp.DataBits = 8;
sp.Parity = Parity.None;
sp.StopBits = StopBits.One;
sp.ReadTimeout = -1;
sp.Open();
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
sp.DiscardInBuffer();
label1.Text = Convert.ToString(sp.ReadByte());
}
}
}
namespace 串口通信
{
public partial class Form1 : Form
{
SerialPort sp=new SerialPort ("COM1");
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
sp.BaudRate = 9600;
sp.DataBits = 8;
sp.Parity = Parity.None;
sp.StopBits = StopBits.One;
sp.ReadTimeout = -1;
sp.Open();
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
sp.DiscardInBuffer();
label1.Text = Convert.ToString(sp.ReadByte());
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2010-12-24
展开全部
给我个邮箱,我发给你本书,很详细。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询