https://blog.csdn.net/qq_33723441/article/details/54598457
1、在Dlg.h文件中添加头文件
#include "CSerialPort.h"
- 1
2、在Dlg.h文件中定义串口类
public:
CSerialPort m_SerialPort; //定义串口类
- 1
- 2
3、在Dlg.h文件中定义串口类的实现函数
afx_msg LONG OnComm(WPARAM ch, LPARAM port); //串口字符接收消息
- 1
4、在Dlg.c文件中添加消息和函数的绑定
BEGIN_MESSAGE_MAP(***Dlg, CDialogEx)
ON_MESSAGE(WM_COMM_RXCHAR, OnComm) //添加消息和函数之间的绑定
END_MESSAGE_MAP()
- 1
- 2
- 3
5、在Dlg.c文件中的OnInitDialog()函数进行串口初始化
if (m_SerialPort.InitPort(this,1,115200))//串口1,波特率115200
{
m_SerialPort.OpenListenThread(); //启动串口监视线程
}
else
{
AfxMessageBox(_T("COM1没有发现,或被其它设备占用"));
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
6、在Dlg.c文件中添加接收函数
LONG CLD_PowerDlg::OnComm(WPARAM ch, LPARAM port) //串口接收函数的实现,对接收数据进行处理
{
UpdateData(TRUE); //读取编辑框内容
if (port==1) //判断端口是否是1号,不是则退出
{
rx_data[rx_count]=(byte)ch;
rx_count++;
/*************************************接收数据处理****************************************/
if((rx_data[0]==0x55) && (rx_data[1]==0xAA)&& (rx_data[2]==0xdc) && (rx_data[6]==0x44)) //判断接收数据类型
{
if(rx_data[7]==0x00) //LD电源状态判断
m_Butten_Power_False.SetIcon(IDI_ICON_RED32); //LD电源故障,添加红色报警图片
else
m_Butten_Power_False.SetIcon(IDI_ICON_GREEN32); //LD电源正常,添加绿色图片
m_Detect_Current = ((rx_data[8] << 8) + rx_data[9])/10; //LD回检电流值
m_PulseWidth = (rx_data[10] << 8) + rx_data[11]; //LD电源脉宽
m_Frequency = rx_data[14]; //LD电源频率
}
}
UpdateData(0); //更新编辑框内容
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
7、串口发送按钮函数举例:
char *a=NULL;
a = new char[12];
a[0]=0x55; a[1]=0xAA; a[2]=0xdc; //数据字头标识
a[3]=0x06;
a[4]=0x00;
a[5]=0x03;
a[6]=0xbb;
a[7]=0x00;
a[8]=0xcc; a[9]=0x33; a[10]=0xc3; a[11]=0x3c; //数据字头结尾,校验数据
m_SerialPort.WriteData(a,12); //发送
a=NULL;
delete a;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
8、串口CSerialPort类源程序文件在我的CSDN中下载,链接如下:
http://download.csdn.net/download/qq_33723441/9740248