51单片机与上位机通信,使用C#语言
private void Form1_Load(object sender, EventArgs e)
{
int i = 0;
string[] portname = SerialPort.GetPortNames();
foreach (string port in portname)
{
CuankoucomboBox.Items.Add(port);
i++;
}
if (i > 0)
{
CuankoucomboBox.SelectedIndex = 0;
}
BotecomboBox.SelectedIndex = BotecomboBox.Items.IndexOf("9600");//波特率设为9600
Openbutton.Text = "打开串口";
sendbutton.Enabled = false;
serialPort1.Close();
}
private void Openbutton_Click(object sender, EventArgs e)
{
if (Openbutton.Text == "打开串口")
{
try
{
Openbutton.Text = "关闭串口";
sendbutton.Enabled = true;
serialPort1.PortName = CuankoucomboBox.SelectedItem.ToString();
serialPort1.BaudRate = Convert.ToInt32(BotecomboBox.SelectedItem);//设置波特率和把串口名字赋给serailport控件
serialPort1.DataBits = 8;//传输数据的长度
serialPort1.StopBits = StopBits.One;//使用停止位为1位
serialPort1.Parity = Parity.None;//不使用奇偶校验位
serialPort1.Open();//打开串口
serialPort1.DiscardInBuffer();
serialPort1.DiscardOutBuffer();//释放缓冲区的数据
}
catch(System.IO.IOException)
{
MessageBox.Show("串口不存在,请选择正确串口");
Openbutton.Text = "打开串口";
}
}
else if(Openbutton.Text=="关闭串口")
{
try
{
Openbutton.Text = "打开串口";
sendbutton.Enabled = false;
serialPort1.DiscardInBuffer();
serialPort1.DiscardOutBuffer();//释放缓冲区的数据
serialPort1.Close();
}
catch (System.InvalidOperationException)
{
Openbutton.Text = "打开串口";
serialPort1.Close();
}
}
}
Int32 receivelength;
private void sendbutton_Click(object sender, EventArgs e)
{
byte[] data = Encoding.Unicode.GetBytes(sendtextBox.Text);
serialPort1.Encoding = System.Text.Encoding.GetEncoding("GB2312");//如果发中文必须有这一句
receivelength = 0;
serialPort1.Write(sendtextBox.Text);//发送数据
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);//注册DataReceived事件
}
void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)//DataReceived委托事件
{
// throw new NotImplementedException();
this.Invoke((EventHandler)(delegate
{
receivelength += serialPort1.ReadBufferSize;
byte []buff=new byte[receivelength];
serialPort1.Read(buff,0,receivelength);
string str = Encoding.Default.GetString(buff);//把buf数组转换成字符串类型
//string str = Convert.ToString(buff);
ReceivedtextBox.AppendText(str);
if (receivelength != 0)
{
serialPort1.DataReceived -= new SerialDataReceivedEventHandler(serialPort1_DataReceived);
}
}));
}
private void button1_Click(object sender, EventArgs e)
{
sendtextBox.Text = "";
}
private void button2_Click(object sender, EventArgs e)
{
ReceivedtextBox.Text = "";
}
}
}
相关推荐
(源代码)C#作为上位机,控制51单片机(下位机),串口通信源程序
51单片机的程序一般用汇编语言或C语言编写,与C#上位机通信时,需编写适当的串口接收和响应代码。4. **源代码结构**:压缩包中的源代码可能包含两个部分:C#上位机程序和51单片机的固件代码。
C#实现的可扩展简单上位机通信程序
C#上位机通信程序设计是一个涵盖了软件工程、网络协议以及用户界面设计等多个领域的复杂主题。上位机指的是对下位机(如嵌入式系统或传感器等)进行管理和控制的计算机。在众多的编程语言中,C#因其高效、简洁、面向对象的特性,成为实现上位机通信程序设计的理想选择。在数据交互领域,通信协议是定义设备间通信方式的一套规则和约定。它规定了数据的格式、数据交换的步骤、数据传输的速率以及错误检测和纠正的方法。一个良好的通信协议设计,可以确保数据在不同系统或设备之间正确无误、高效地传输。
C#上位机与51单片机串口通信协议设计及源码解析
串口通信是嵌入式与工控领域最基础的数据交换方式,承担着上位机与下位机之间的指令传输和状态反馈。其核心原理是双方按照约定好的波特率、帧格式与校验机制,逐字节地可靠传递数据。明确帧结构、命令字和累加和校验,是保证通信稳定与可调试的关键。该技术广泛应用于LED控制、电机驱动、传感器采集等教学实践与工业控制场景。基于C#开发的PC上位机通过SerialPort类与51单片机进行交互,既能快速搭建人机界面,又能高效完成实时控制。本文围绕C#与51单片机平台,系统讲解串口通信源程序的架构设计、上下位机实现细节及高频故障
C#作为上位机,控制51单片机(下位机),串口通信源程序(附效果图)
在本文中,我们将深入探讨如何使用C#作为上位机,通过串口通信与51单片机(下位机)进行交互。51单片机是微控制器领域中的一个经典型号,广泛应用于各种嵌入式系统。
51单片机串口通信(上位机接收单片机数据)
在上位机端,可以使用各种编程语言(如C#、Python或VB.NET)编写应用程序来接收来自单片机的数据。通常,我们需要打开一个串口连接,设置相同的通信参数,并通过读取串口缓冲区来获取数据。


单片机/工控
