当前位置:网站首页>上位机开发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");
}
}
}
上机实践:
边栏推荐
- linux下oracle常见操作以及日常积累知识点(函数、定时任务)
- matcher中find,matches,lookingAt匹配字符串的不同之处说明
- SD NAND Flash简介!
- hcip BGP enhancement experiment
- 仿SBUS与串口数据固定转换
- JS逆向入门学习之回收商网,手机号码简易加密解析
- Voice-based social software development - making the most of its value
- 2022杭电多校 第6场 1008.Shinobu Loves Segment Tree 规律题
- IDEA执行Test操作导致数据插入时出现了重复数据
- What is the function of the regular expression replaceAll() method?
猜你喜欢
哪位大佬有20年4月或者1月的11G GI和ojvm补丁呀,帮忙发下?
Qiu Jun, CEO of Eggplant Technology: Focus on users and make products that users really need
Pytorch Deep Learning Quick Start Tutorial -- Mound Tutorial Notes (3)
Egg framework usage (2)
What is SPL?
Which big guy has the 11G GI and ojvm patches in April or January 2020, please help?
偏向锁/轻量锁/重级锁锁锁更健康,上锁解锁到底是怎么完成实现的
C语言的高级用法
JS逆向入门学习之回收商网,手机号码简易加密解析
The JVM collection that Alibaba's top architects have summarized for many years, where can't I check it!
随机推荐
【Unity】【UGUI】【在屏幕上显示文本】
数据中台建设(十):数据安全管理
JS introduction to reverse the recycling business network of learning, simple encryption mobile phone number
自定义过滤器和拦截器实现ThreadLocal线程封闭
MySQL advanced (twenty-seven) database index principle
leetcode: 529. Minesweeper Game
我们的Web3创业项目,黄了
第五章:redis持久化,包括rdb和aof两种方式[通俗易懂]
第四章:activiti流程中,变量的传递和获取流程变量 ,设置和获取多个流程变量,设置和获取局部流程变量「建议收藏」
Meteorological data processing example - matlab string cutting matching and R language date matching (data splicing)
DFINITY 基金会创始人谈熊市沉浮,DeFi 项目该何去何从
IDEA performs the Test operation, resulting in duplicate data when data is inserted
基于MindSpore高效完成图像分割,实现Dice!
Four years of weight loss record
three objects are arranged in a spherical shape around the circumference
Tanabata romantic date without overtime, RPA robot helps you get the job done
QSS 选择器
Development common manual link sharing
IDEA执行Test操作导致数据插入时出现了重复数据
uniapp connect ibeacon