题目概述:
设计一个模拟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");}
}

}

上机实践:

上位机开发C#语言:模拟STC串口助手接收单片机发送数据相关推荐

  1. 新手入门上位机开发 C#语言:PC串口发送数据

    题目概述: VS2017开发环境 PC串口发送数据 编程: namespace _004_7_28 { public partial class Form1 : Form {public Form1( ...

  2. c#上位机开发(三)——简易串口发送数据

    今天主要写一个串口数据发送的应用程序,只专门用来发送数据,具体效果图如下 1.功能要求 发送数据,数据由下拉框进行选择,然后点击按钮进行发送 2.功能实现 (1)上位机界面实现 界面看起来很简单,可以 ...

  3. Matlab上位机开发(五)Matlab串口通信

    1. Matlab串口通信 Matlab提供了串口通信的功能,串口通信的流程如下: 1.1. 创建串口对象 创建一个串口对象的API如下: scom = serial('<串口号>'); ...

  4. STM32F103RC串口发送数据1使LED闪烁---串口助手作为主机发送数据1,单片机作为从机接收

    主要是一个函数的使用, 串口助手发送的数据1 这个是接收1 if(USART_RX_BUF[0]=='1') 主函数这样写会 接收数据1  使LED闪烁 int main(void){ u8 t;u8 ...

  5. Linux下添加虚拟串口,接收和发送数据

    之前写的那虚拟串口有点问题,只能读取,不能接收.今天再来改一下.将python的内容改为如下: 先新建一个文档,内容如下 #! /usr/bin/env python#coding=utf-8impo ...

  6. 新手入门上位机开发 C#语言:Windows窗体应用(.NET Framework) 开发定时器

    题目概述: VS2017 Windows窗体应用(.NET Framework) 上面开发一个定时器. 编程: namespace _003_7_27 { public partial class F ...

  7. Matlab上位机开发(一) —— 了解上位机

    1. 上位机的作用 在嵌入式项目开发中,无论是单片机项目.嵌入式Linux项目.FPGA项目,上位机始终是一个很重要的部分,主要用于: 数据显示(波形.温度等) 用户控制(LED,继电器等) 文件传输 ...

  8. Matlab上位机开发

    Matlab上位机开发 1 了解上位机 1.1 上位机的作用 1.2 常用上位机开发方式 1.2.1 Windows上位机(基于串口通信) 1.2.2 Android上位机(基于网络通信) 1.3 教 ...

  9. 第九章 AT32F403A基于V2库串口 dma接收不定长数据

    目录 概述 硬件 DMA 软件 流程 初始化 初始化代码: 中断服务函数: DMA1通道5设置函数:(重新使能通道) DMA1通道4发送函数:(设置dma长度和内存地址) 测试 最后 概述 本文主要是 ...

最新文章

  1. (面试)java基础-== 和 equals 的区别?
  2. java命令查看jvm内存
  3. MongonDB 知识
  4. 机器学习高阶认识(一): 机器学习假设与迁移学习
  5. Qt Creator在桌面上预览
  6. 第一章 Linux是什么
  7. sql 注入防护与xss攻击防护
  8. 知识图谱入门2-2:用户输入->知识库的查询语句
  9. 使用WM_QUIT终止线程
  10. 以后的blog将转移到微信公众号,请扫码关注谢谢!
  11. 如何用yolov5训练自己的图片
  12. python多态如何理解_大家对python中多态是如何理解的?
  13. spring扫描bean总结
  14. 直方图规定化python+opencv实现
  15. 基尼系数,excel计算方法
  16. Win10锁屏壁纸获取
  17. 如何寻找“真爱”型合伙人
  18. 互联网骨干网及国际通用结算介绍
  19. echart 三维可视化地图_Echarts三维坐标系
  20. peek用法解决多读一行

热门文章

  1. 知乎 笨办法学python_知乎高赞回答:作为准大学生,该如何入门计算机专业?...
  2. 手机电池不耐用怎么办,一招叫你恢复如新
  3. 服务器节点代表网站的什么,云服务器的节点是什么意思
  4. cdma2000解析_CDMA2000 1x EV-DO 分层协议解析
  5. 浏览器的同源策略和跨域请求_学习版
  6. 颠覆HTTP,IPFS今天成功上位了吗?
  7. photoscan集群教程
  8. Red Hat 宣布新的红帽认证工程师计划
  9. 纠结!分布式锁到底用Redis好还是ZooKeeper好?
  10. 袋鼠云批流一体分布式同步引擎ChunJun(原FlinkX)的前世今生