当前位置:网站首页>上位机开发C#语言:模拟STC串口助手接收单片机发送数据
上位机开发C#语言:模拟STC串口助手接收单片机发送数据
2022-08-05 10:10:00 【最早的早安...】
题目概述:
设计一个模拟STC串口助手,通过串口进行接收或发送数据。
STC串口助手:
编程:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
namespace SerialCommunicate
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
}
private void button1_Click(object sender, EventArgs e)
{
try
{
serialPort1.PortName = comboBox1.Text;
serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text,10);//十进制数据转换
serialPort1.Open();
button1.Enabled = false;//打开串口按钮不可用
button2.Enabled = true;//关闭串口
}
catch {
MessageBox.Show("端口错误,请检查串口", "错误");
}
}
private void Form1_Load(object sender, EventArgs e)
{
textBox3.Text = DateTime.Now.ToString("h:mm:ss");
timer1.Enabled = true;
timer1.Interval = 1000;
for (int i = 1; i < 20; i++)
{
comboBox1.Items.Add("COM" + i.ToString());
}
comboBox1.Text = "COM4";//串口号多额默认值
comboBox2.Text = "9600";//波特率默认值
/*****************非常重要************************/
serialPort1.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);//必须手动添加事件处理程序
}
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)//串口数据接收事件
{
if (!radioButton3.Checked)//如果接收模式为字符模式
{
string str = serialPort1.ReadExisting();//字符串方式读
textBox1.AppendText(str);//添加内容
}
else { //如果接收模式为数值接收
byte data;
data = (byte)serialPort1.ReadByte();//此处需要强制类型转换,将(int)类型数据转换为(byte类型数据,不必考虑是否会丢失数据
string str = Convert.ToString(data, 16).ToUpper();//转换为大写十六进制字符串
textBox1.AppendText("0x" + (str.Length == 1 ? "0" + str : str) + " ");//空位补“0”
}
}
private void button2_Click(object sender, EventArgs e)
{
try
{
serialPort1.Close();//关闭串口
button1.Enabled = true;//打开串口按钮可用
button2.Enabled = false;//关闭串口按钮不可用
}
catch //一般情况下关闭串口不会出错,所以不需要加处理程序
{
}
}
private void button3_Click(object sender, EventArgs e)
{
byte[] Data = new byte[1];//存储一个字节 更新后发送下一个字节
if (serialPort1.IsOpen)//判断串口是否打开,如果打开执行下一步操作
{
if (textBox2.Text != "")
{
if (!radioButton1.Checked)//如果发送模式是字符模式
{
try
{
serialPort1.WriteLine(textBox2.Text);//写数据
}
catch (Exception err)
{
MessageBox.Show("串口数据写入错误", "错误");//出错提示
serialPort1.Close();
button1.Enabled = true;//打开串口按钮可用
button2.Enabled = false;//关闭串口按钮不可用
}
}
else
{
for (int i = 0; i < (textBox2.Text.Length - textBox2.Text.Length % 2) / 2; i++)//取余3运算作用是防止用户输入的字符为奇数个
{
Data[0] = Convert.ToByte(textBox2.Text.Substring(i * 2, 2), 16);
serialPort1.Write(Data, 0, 1);//循环发送(如果输入字符为0A0BB,则只发送0A,0B)
}
if (textBox2.Text.Length % 2 != 0)//剩下一位单独处理
{
Data[0] = Convert.ToByte(textBox2.Text.Substring(textBox2.Text.Length-1, 1), 16);//单独发送B(0B)
serialPort1.Write(Data, 0, 1);//发送
}
}
}
}
}
private void timer1_Tick(object sender, EventArgs e)
{
textBox3.Text = DateTime.Now.ToString("h:mm:ss");
}
}
}
上机实践:
边栏推荐
- 百年北欧奢华家电品牌ASKO智能三温区酒柜臻献七夕,共品珍馐爱意
- 语音社交软件开发——充分发挥其价值
- ffmpeg drawtext add text watermark
- The founder of the DFINITY Foundation talks about the ups and downs of the bear market, and where should DeFi projects go?
- How does the official account operate and maintain?Public account operation and maintenance professional team
- 开源一夏|OpenHarmony如何查询设备类型(eTS)
- 项目成本控制如何帮助项目成功?
- Pytorch深度学习快速入门教程 -- 土堆教程笔记(三)
- 创建一个 Dapp,为什么要选择波卡?
- 数据中台建设(十):数据安全管理
猜你喜欢
随机推荐
一文道清什么是SPL
The century-old Nordic luxury home appliance brand ASKO smart wine cabinet in the three-temperature area presents the Chinese Valentine’s Day, and tastes the love of the delicacy
[Android]如何使用RecycleView in Kotlin project
力扣(LeetCode)216. 组合总和 III(2022.08.04)
手写柯里化 - toString 理解
egg框架使用(二)
第五章:redis持久化,包括rdb和aof两种方式[通俗易懂]
语音社交软件开发——充分发挥其价值
Technical dry goods | Hausdorff distance for image segmentation based on MindSpore
Jenkins manual (2) - software configuration
茄子科技CEO仇俊:以用户为中心,做用户真正需要的产品
ffmpeg drawtext add text watermark
MySQL使用聚合函数可以不搭配GROUP BY分组吗?
Custom filters and interceptors implement ThreadLocal thread closure
Getting started with Polkadot parachain development, this article is enough
The JVM collection that Alibaba's top architects have summarized for many years, where can't I check it!
5. Deploy the web project to the cloud server
第七章,activiti个人任务分配,动态指定和监听器指定任务委派人「建议收藏」
js劫持数组push方法
项目成本控制如何帮助项目成功?









