C# 实现串口发送数据(不用串口控件版)
参考:https://blog.csdn.net/mannix_lei/article/details/79979432
https://www.cnblogs.com/ElijahZeng/p/7609241.html
1、关于怎么建立工程的,这里就不过多赘述了,先用控件编写个窗体程序如下
2、双击窗体跳转到程序页面,直接上代码,代码里有注释,看注释都可以看懂的
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;
using System.Threading; //声明线程命名空间 namespace TB528IL_APP
{
public partial class Form1 : Form
{
#region 字段/属性/委托
/// <summary>
/// 串行端口对象
/// </summary>
private SerialPort sp; /// <summary>
/// 串口接收数据委托
/// </summary>
public delegate void ComReceiveDataHandler(string data); public ComReceiveDataHandler OnComReceiveDataHandler = null; /// <summary>
/// 端口名称数组
/// </summary>
public string[] PortNameArr { get; set; } /// <summary>
/// 串口通信开启状态
/// </summary>
public bool PortState { get; set; } = false; /// <summary>
/// 编码类型
/// </summary>
public Encoding EncodingType { get; set; } = Encoding.ASCII;
#endregion public Form1()
{
InitializeComponent();
My_COM();
OpenPort("COM1");
} #region 方法 /*********************************************
函数名: My_COM()
功 能: 新建串口实例
参 数: 无
返回值: 无
********************************************/
public void My_COM()
{
PortNameArr = SerialPort.GetPortNames();
sp = new SerialPort();
}
/*********************************************
函数名:OpenPort(string portName, int boudRate = 115200, int dataBit = 8, int stopBit = 1, int timeout = 5000)
功 能:打开端口,并且初始化默认端口波特率、数据位、停止位、超时时间等参数
参 数:<param name="portName">端口名称
<param name="boudRate">波特率
<param name="dataBit">数据位
<param name="stopBit">停止位
<param name="timeout">超时时间
返回值:无
********************************************/
public void OpenPort(string portName, int boudRate = , int dataBit = , int stopBit = , int timeout = )
{
try
{
sp.PortName = portName;
sp.BaudRate = boudRate;
sp.DataBits = dataBit;
sp.StopBits = (StopBits)stopBit;
sp.ReadTimeout = timeout;
sp.Open();
PortState = true;
}
catch (Exception e)
{
throw e;
}
} /*********************************************
函数名: ClosePort()
功 能: 关闭端口
参 数: 无
返回值: 无
********************************************/
public void ClosePort()
{
try
{
sp.Close();
PortState = false;
}
catch (Exception e)
{
throw e;
}
} /*********************************************
函数名: SendData(string sendData)
功 能: 发送字符串数据
参 数: string sendData 串口要发送的字符串
返回值: 无
********************************************/
public void SendData(string sendData)
{
try
{
sp.Encoding = EncodingType;
sp.Write(sendData);
}
catch (Exception e)
{
throw e;
}
} /*********************************************
函数名: Send_Byte(string send_byte)
功 能: 把要发送的字符串转换为16进制后发送,例如把字符串"9610"转换为0x25、0x8a发送出去
参 数: string send_byte 串口要转换为16进制发送的字符串
返回值: 无
********************************************/
public void Send_Byte(string send_byte)
{
byte[] data = new byte[];
int Time_Buff = ;
int.TryParse(send_byte, out Time_Buff); //将字符串转换为整形
data[] = 0x57;
data[] = 0xa1;
data[] = (byte)(Time_Buff >> );
data[] = (byte)Time_Buff;
// 参数:
// buffer: 包含要写入端口的数据的字节数组。
// offset: buffer 参数中从零开始的字节偏移量,从此处开始将字节复制到端口。
// count : 要写入的字节数。
sp.Write(data, , );
} #endregion //发送Light_delay按钮
private void button1_Click(object sender, EventArgs e)
{
//获取文本框的值
string Light_delay = Light_delay_textBox.Text; //linght_delay_textBox为textBox控件的名称
Send_Byte(Light_delay);
} //发送Camera_delay按钮
private void button2_Click(object sender, EventArgs e)
{
string Camera_delay = Camera_delay_textBox.Text;
SendData(Camera_delay);
} //发送Light_working_time按钮
private void button3_Click(object sender, EventArgs e)
{
string Light_working_time = Light_working_time_textBox.Text;
SendData(Light_working_time);
}
} }
3、运行结果如下,效果理想
4、关于串口接收还没完全搞明白,迟点补回来
C# 实现串口发送数据(不用串口控件版)的更多相关文章
- C#串口通信—向串口发送数据,同步接收返回数据
最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接 ...
- 【Debug】串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!
串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!
- C#把汉字转换成16进制(HEX)并向串口发送数据
报警器实例:(有发送,无返回获取) using System; using System.Collections.Generic; using System.Linq; using System.Te ...
- WPF内实现与串口发送数据和接收数据
原文:WPF内实现与串口发送数据和接收数据 与串口发送数据和接收数据,在此作一个简单的Demo.此Demo可以实现按下硬件按钮,灯亮,发送灯状态数据过来.并且可以实现几个灯同时亮,发送灯的状态数据过来 ...
- (已解决)STM32L151使用串口发送数据第一字节为FE问题!
最近学习到串口发送数据时遇到一个问题:第一个字节总是FE,后面才是对的数据. 最终解决的方法是: 讲GPIO复用的操作放到GPIO配置之前! 体现在代码中就是: //打开GPIO时钟 RCC_AHBP ...
- 不用splitter控件 简单实现对mfc对话框的分割的方法
不用splitter控件 简单实现对mfc对话框的分割的方法 直接贴上源代码主要部分吧 这个是基于对话框的工程 进行对话框的分割实现 只是相应了三个消息函数,看一下就会明白的 我空间资源里边有现成的 ...
- WPF数据模板和控件模板
WPF中有控件模板和数据模板,控件模板可以让我们自定义控件的外观,而数据模板定义了数据的显示方式,也就是数据对象的可视结构,但是这里有一个问题需要考虑,数据是如何显示出来的?虽然数据模板定义了数 ...
- stm32串口发送数据复位 第一个数据丢失
http://blog.csdn.net/kevinhg/article/details/40991655 STM32串口发送必须先检测状态,否则第一个字节无法发出,发送完毕,必须检测发送状态是否完成 ...
- 语音控制单片机工作【百度语音识别,串口发送数据到单片机】【pyqt源码+软件】!!
前些天闲着没事,就做了个语音识别结合串口发送指令的软件,用的是pyqt写的,软件打开后对着笔记本的话筒说话, 他就能识别返回文字结果,然后匹配语音中的关键词,如果有关键词就发送关键词对应的命令,比如语 ...
随机推荐
- Project Euler:Problem 33 Digit cancelling fractions
The fraction 49/98 is a curious fraction, as an inexperienced mathematician in attempting to simplif ...
- Google Code Jam在线測试题目--Alien Language
Problem After years of study, scientists at Google Labs have discovered an alien language transmitte ...
- pass an instance of class to TestCase as parameter
use testcasesource instead https://stackoverflow.com/questions/4220943/how-to-pass-dynamic-objects-i ...
- P1155 双栈排序(二分图染色)
P1155 双栈排序(二分图染色) 题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一 ...
- Codeforces--615B--Longtail Hedgehog(贪心模拟)
B. Longtail Hedgehog time limit per test 3 seconds memory limit per test 256 megabytes input stan ...
- hdoj- Windows Message Queue
Windows Message Queue Problem Description Message queue is the basic fundamental of windows system. ...
- E20170915-hm
client n. 顾客; 当事人; 诉讼委托人; [计算机] 客户端; seal n. 密封; 印章; 海豹; 封条; v. 密封; 盖章; 决定; 封上(信封); sheet n. 纸; 被 ...
- E20170821-mk
Dimension n. 尺寸; [复] 面积,范围; [物] 量纲; [数] 次元,度,维;
- android ui篇
android ui篇主要做两件事情. 第一件事情就是能够自己去定义基本的简单的界面. 第二件事情就是能够使用开源library去构造一些复杂的界面. 第一件事情就需要对于布局等方面知识有着基本的掌握 ...
- SQL连接其它服务器操作
Exec sp_droplinkedsrvlogin ZYB,Null --删除映射(录与链接服务器上远程登录之间的映射) Exec sp_dropserver ZYB --删除远程服务器链接 EXE ...