VC++_串口上位机编程实例
vc串口编程实例 -回复

vc串口编程实例-回复VC串口编程实例,是指使用VC(Visual C++)进行串口编程的实例。
串口编程是指通过串口(在计算机中又称通信端口)与外部设备进行数据的收发和通信。
串口编程在很多应用中都非常常见,例如与嵌入式设备、传感器、单片机等进行通信。
本文将以串口编程为主题,详细介绍如何在VC中进行串口编程的步骤和相关实例。
第一步,准备工作。
在进行串口编程之前,需要准备好一些必要的工作和工具。
首先,我们需要一台计算机和一个可用的串口接口。
然后,我们需要安装一个适合的集成开发环境(IDE)。
在本例中,我们选择使用VC进行编程。
确保已经安装好VC及其相关的开发工具和库。
第二步,创建工程。
在VC中创建一个新的工程。
在创建工程的界面中,选择“Windows桌面应用程序”作为项目类型。
输入一个项目名称,选择工作空间的目录。
点击“确定”按钮创建工程。
第三步,设置串口参数。
在VC中进行串口编程,首先需要设置串口的参数,包括波特率、数据位、停止位和校验位等。
通过设置这些参数,我们可以控制串口的通信速度和数据的可靠性。
在VC的代码中使用DCB 结构体来设置这些参数。
下面是一个示例代码段:c++DCB dcbSerialParams = { 0 };dcbSerialParams.DCBlength = sizeof(dcbSerialParams); GetCommState(hSerial, &dcbSerialParams); 获取串口配置参数dcbSerialParams.BaudRate = 9600; 设置波特率dcbSerialParams.ByteSize = 8; 设置数据位dcbSerialParams.StopBits = ONESTOPBIT; 设置停止位dcbSerialParams.Parity = NOPARITY; 设置校验位SetCommState(hSerial, &dcbSerialParams); 设置串口配置参数在上述代码中,首先定义一个DCB结构体变量dcbSerialParams,用于保存串口参数。
vc++上位机程序

VC++编写简单串口上位机程序2010年4月13日10:23:40串口通信,MCU跟PC通信经常用到的一种通信方式,做界面、写上位机程序的编程语言、编译环境等不少,VB、C#、LABVIEW等等,我会的语言很少,C 语言用得比较多,但是还没有找到如何用C语言来写串口通信上位机程序的资料,在图书管理找到了用VC++编写串口上位机的资料,参考书籍,用自己相当蹩脚的C++写出了一个简单的串口上位机程序,分享一下,体验一下单片机和PC通信的乐趣。
编译环境:VC++6.0操作系统:VMWare虚拟出来的Windows XP程序实现功能:1、PC初始化COM1口,使用n81方式,波特率57600与单片机通信。
PC的COM口编号可以通过如下方式修改:当然也可以通过上位机软件编写,通过按钮来选择COM端口号,但是此次仅仅是简单的例程,就没有弄那么复杂了。
COM1口可用的话,会提示串口初始化完毕。
否则会提示串口已经打开Port already open,表示串口已经打开,被占用了。
2、点击开始转换,串口会向单片机发送0xaa,单片机串口中断接收到0xaa后启动ADC转换一次,并把转换结果ADCL、ADCH共两个字节的结果发送至PC,PC进行数值转换后在窗口里显示。
(见文章末尾图)3、为防止串口被一只占用,点击关闭串口可以关闭COM1,供其它程序使用,点击后按钮变为打开串口,点击可重新打开COM1。
程序的编写:1、打开VC++6.0建立基于对话框的MFC应用程序Test,2、在项目中插入MSComm控件:工程->增加到工程->Components and Controls->双击Registered ActiveX Controls->选择Microsoft Communications Control, version 6.0->Insert,按默认值添加,你会发现多了个电话图标,这是增加后串口通信控件。
VC实现串口通信项目源码

VC实现串口通信项目源码以下是一个简单的VC实现串口通信项目的源码:```cpp#include <windows.h>#include <iostream>using namespace std;//定义串口类class SerialPortpublic:SerialPort(const char* portName)//打开串口hSerial = CreateFile(portName, GENERIC_READ , GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);//检查串口是否成功打开if (hSerial == INVALID_HANDLE_VALUE)if (GetLastError( == ERROR_FILE_NOT_FOUND)cerr << "Error: " << portName << " 不存在" << endl;} elsecerr << "Error: 打开串口失败" << endl;}}//配置串口DCB dcbSerialParams = {0};dcbSerialParams.DCBlength = sizeof(dcbSerialParams);cerr << "Error: 获取串口配置信息失败" << endl;}dcbSerialParams.BaudRate = CBR_9600; // 设置波特率为9600dcbSerialParams.ByteSize = 8; // 设置数据位为8位dcbSerialParams.StopBits = ONESTOPBIT; // 设置停止位为1个dcbSerialParams.Parity = NOPARITY; // 设置奇偶校验方式为无校验cerr << "Error: 设置串口配置信息失败" << endl;}//配置读写操作的超时时间cerr << "Error: 设置串口超时时间失败" << endl;}}//读取串口数据int readData(char* buffer, int bufferSize)DWORD bytesRead;if (!ReadFile(hSerial, buffer, bufferSize, &bytesRead, NULL)) cerr << "Error: 读取串口数据失败" << endl;return -1;}return bytesRead;}//发送串口数据bool writeData(const char* buffer, int bufferSize)DWORD bytesWritten;if (!WriteFile(hSerial, buffer, bufferSize, &bytesWritten, NULL))cerr << "Error: 发送串口数据失败" << endl;return false;}return true;}//关闭串口void closePorCloseHandle(hSerial);}private:HANDLE hSerial;};int mai// 创建SerialPort对象,指定串口名称(根据实际情况修改)SerialPort serialPort("COM1");//读取串口数据char buffer[256];int bytesRead = serialPort.readData(buffer, sizeof(buffer)); if (bytesRead == -1)cerr << "Error: 读取串口数据失败" << endl;} elsecout << "读取到的数据: " << buffer << endl;}//发送串口数据const char* data = "Hello, Serial Port!";if (!serialPort.writeData(data, strlen(data)))cerr << "Error: 发送串口数据失败" << endl;} elsecout << "成功发送串口数据" << endl;}//关闭串口serialPort.closePort(;return 0;```上述代码实现了一个简单的串口通信项目,包括串口初始化、读取串口数据、发送串口数据和关闭串口的功能。
用VC_实现ABB工业控制系统与上位机的通信

命令消息: 〈115201RD 3 17 18 返回消息: 〉115201OK # 001 9. 85196E + 02 # 001 9. 20957E+ 02 2. 2 批号数据 M asterP iece200 /1 主机定 时从 DSCA 114 通信 板卡 的 CH0 信道发出一批字符流信 号, 这个 信号原来 是送 到打印机去打印的。本数据采集系统为了使从现场获 取的生产数据能 够与 位于 ERP 中 的线 材质 量指 标数 据对应起来, 需要从中获取线材的批号数据。 字符流信号的一部分如下所示: # 459111 2205 930 1212 2007 0 0 & 上面的字符 流信号中, # 4后的 59111 表示这 是第 591批的第 11 根钢, 为了与 ERP中的质量指标 数据中 批 号 相 一 致, 还 要 加 上 日 期, 最 终 的 批 号 数 据 为 5102559111, 这表示 2005年 10月 25 日的第 591 批的 第 11 根钢。
EXCOM 允许外部计 算机 采用异 步串 行通信 连接 M asterP iece200 / 1主机 后 通 过 命 令 读写 主 机 数 据 库。 EXCOM 采用一种基于 7位 ASCII代 码通信协议, 协议 元素为命 令 和答 复。外 部计 算机 和 M asterP iece200 /1 主机之间命令和数 据的交换 为异 步全双 工传输 处理, 标准 V. 24 ( R S232C) 信 号接口 和 XON /OFF 流量 控制 协议, 7 位或 8位的数据, 1、1. 5或 2位停止 位, 传输速 度为 110 ~ 19 200 bp s。
上位机串口通信编程

上位机串⼝通信编程摘要本⽂主要描述了利⽤PC机与AT89C51单⽚机之间的通信程序设计实现温度显⽰。
并详述了在VC6.0环境下,上位机利⽤MSCOMM通信控件与单⽚机之间串⼝通信实现温度显⽰。
由单⽚机采集⼀个温度信号,将采集到的温度信号传送给PC机显⽰,PC机⽤VC6.0编写程序,单⽚机程序⽤C语⾔编写,最后⽤PROTUES软件进⾏仿真实现温度显⽰。
关键词:单⽚机MSCOMM控件VC6.0 AT89C51 温度显⽰⽬录摘要1 引⾔ (1)2 结构设计与⽅案选择 (2)2.1设计任务 (2)2.1.1单⽚机的选择 (2)2.1.2电平转换 (2)2.1.1单⽚机的选择 (2)2.1.3单⽚机与pc机通信原理 (2)2.2软件⽅案选择 (2)2.2.1 上位机编程⽅案选择 (3)2.2.2 单⽚机编程⽅案选择 (3)2.3 总体⽅案选择 (2)3 硬件设计 (8)3.1单⽚机主要特性 (5)3.2 MAX232电平芯⽚介绍10 (10)3.3 硬件电路设计图 (11)3.3.1 PC机与单⽚机通信接⼝电路设计框图 (11)3.3.2整体设计原理图 (11)4软件设计 (12)4.1上位机程序设计 (12)4.2下位机程序设计 (13)5 软硬件调试部分 (21)5.1 PROTEUS软件仿真 (21)5.1.1 Protues简介 (21)5.1.2 Protues仿真电路图 (22)5.2 VC软件仿真 (21)结束语 (27)致谢 (28)参考⽂献 (29)1引⾔随着⼈们⽣活⽔平的不断提⾼,单⽚机控制⽆疑是⼈们追求的⽬标之⼀,它所给⼈带来的⽅便也是不可否定的,要为现代⼈⼯作、科研、⽣活、提供更好的更⽅便的设施就需要从单⽚机技术⼊⼿,⼀切向着数字化控制,智能化控制⽅向发展。
现代化集中管理需要对现场数据进⾏统计、分析、制表、打印、绘图、报警等,同时,⼜要求对现场装置进⾏实时控制,完成各种规定操作,达到集中管理的⽬的。
串口调试助手VC源程序及编程详细过程

串口调试助手VC源程序及编程详细过程作者:龚建伟可以任意转载,注明作者和说明来自◆龚建伟技术主页◆目次:1.建立项目2.在项目中插入MSComm控件3.利用ClassWizard定义CMSComm类控制变量4.在对话框中添加控件5.添加串口事件消息处理函数OnComm()6.打开和设置串口参数7.发送数据如果你还没有下载源程序,又对本文有兴趣,请立即下载在众多网友的支持下,串口调试助手从2001年5月21日发布至今,短短一个月,在全国各地累计下载量近5000人次,在近200多个电子邮件中,20多人提供了使用测试意见,更有50多位朋友提出要串口调试助手的源代码,为了答谢谢朋友们的支持,公开推出我最初用VC控件MSComm编写串口通信程序的源代码,并写出详细的编程过程,姑且叫串口调试助手源程序V1.0或VC串口通讯源程序吧,我相信,如果你用VC编程,那么有了这个代码,就可以轻而易举地完成串口编程任务了。
(也许本文过于详细,高手就不用看)开始吧:1.建立项目:打开VC++6.0,建立一个基于对话框的MFC应用程序SCommTest(与我源代码一致,等会你会方便一点);2.在项目中插入MSComm控件选择Project菜单下Add To Project子菜单中的 Components and Controls…选项,在弹出的对话框中双击Registered ActiveX Controls项(稍等一会,这个过程较慢),则所有注册过的ActiveX控件出现在列表框中。
选择Microsoft Communications Control, version 6.0,,单击Insert按钮将它插入到我们的Project中来,接受缺省的选项。
(如果你在控件列表中看不到Microsoft Communications Control, version 6.0,那可能是你在安装VC6时没有把ActiveX一项选上,重新安装VC6,选上ActiveX就可以了),这时在ClassView视窗中就可以看到CMSComm类了,(注意:此类在ClassWizard中看不到,重构clw文件也一样),并且在控件工具栏Controls中出现了电话图标(如图1所示),现在要做的是用鼠标将此图标拖到对话框中,程序运行后,这个图标是看不到的。
VC实现串口通信项目源码

VC实现串口通信项目源码以下是一个简单的串口通信项目的VC实现源码,包括了串口初始化、发送数据、接收数据等基本功能。
```#include <Windows.h>#include <stdio.h>#define BUFFER_SIZE 1024HANDLE hSerial;//初始化串口参数BOOL InitSerialPort//打开串口hSerial = CreateFile("\\\\.\\COM1", GENERIC_READ ,GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);if (hSerial == INVALID_HANDLE_VALUE)printf("Failed to open serial port\n");return FALSE;}//配置串口参数DCB dcbSerialParams = { 0 };dcbSerialParams.DCBlength = sizeof(dcbSerialParams); printf("Failed to get serial port state\n"); CloseHandle(hSerial);return FALSE;}dcbSerialParams.BaudRate = CBR_9600; // 波特率为9600 dcbSerialParams.ByteSize = 8; // 8位数据位dcbSerialParams.Parity = NOPARITY; // 无奇偶校验dcbSerialParams.StopBits = ONESTOPBIT;// 1位停止位printf("Failed to set serial port state\n"); CloseHandle(hSerial);return FALSE;}//设置超时操作CloseHandle(hSerial);return FALSE;}return TRUE;//发送数据BOOL SendData(const char* data)DWORD bytesWritten;if (!WriteFile(hSerial, data, strlen(data), &bytesWritten, NULL))printf("Failed to send data\n");CloseHandle(hSerial);return FALSE;}return TRUE;//接收数据BOOL ReceiveData(char* buffer, DWORD size)DWORD bytesRead;if (!ReadFile(hSerial, buffer, size, &bytesRead, NULL))printf("Failed to receive data\n");CloseHandle(hSerial);return FALSE;}return TRUE;if (!InitSerialPort()return 1;}char sendBuffer[BUFFER_SIZE];char receiveBuffer[BUFFER_SIZE];//发送数据printf("Enter data to send: ");gets_s(sendBuffer, BUFFER_SIZE);if (!SendData(sendBuffer))return 1;}//接收数据printf("Receiving data...\n");if (!ReceiveData(receiveBuffer, BUFFER_SIZE)) return 1;}printf("Received data: %s\n", receiveBuffer); CloseHandle(hSerial);```这个项目使用了Windows的串口通信API函数来实现串口的初始化、发送数据和接收数据操作。
VC实现串口通信项目源码

VC实现串口通信项目源码以下是一个基于VC++实现串口通信的简单项目源码:```#include <windows.h>#include <iostream>using namespace std;//串口通信类class SerialPortprivate:HANDLE hSerial; // 串口句柄public:SerialPorhSerial = NULL;}bool openPort(const char* portName)//打开串口hSerial = CreateFileA(portName,GENERIC_READ,GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if (hSerial == INVALID_HANDLE_VALUE)cerr << "Failed to open serial port!" << endl;return false;}//配置串口参数DCB dcbSerialParams = { 0 };dcbSerialParams.DCBlength = sizeof(dcbSerialParams);cerr << "Failed to get serial parameters!" << endl; CloseHandle(hSerial);return false;}dcbSerialParams.BaudRate = CBR_9600; // 波特率设置为9600 dcbSerialParams.ByteSize = 8; // 数据位设置为8 dcbSerialParams.StopBits = ONESTOPBIT; // 停止位设置为1 dcbSerialParams.Parity = NOPARITY; // 校验位设置为无cerr << "Failed to set serial parameters!" << endl; CloseHandle(hSerial);return false;}//设置读写超时时间CloseHandle(hSerial);return false;}return true;}bool closePor//关闭串口if (hSerial != NULL && hSerial != INVALID_HANDLE_VALUE) CloseHandle(hSerial);hSerial = NULL;return true;}return false;}bool writeData(const char* data, int dataSize)//向串口写数据DWORD bytesWritten;if (!WriteFile(hSerial, data, dataSize, &bytesWritten, NULL)) cerr << "Failed to write data!" << endl;return false;}if (bytesWritten != dataSize)cerr << "Failed to write all data!" << endl;return false;}return true;}bool readData(char* buffer, int bufferSize)//从串口读数据DWORD bytesRead;if (!ReadFile(hSerial, buffer, bufferSize, &bytesRead, NULL)) cerr << "Failed to read data!" << endl;return false;return true;}};int maiSerialPort serialPort;//打开串口if (!serialPort.openPort("COM1"))return 1;}//从用户输入获取数据char sendBuffer[256];cout << "Enter data to send: ";cin.getline(sendBuffer, sizeof(sendBuffer));//发送数据至串口if (!serialPort.writeData(sendBuffer, strlen(sendBuffer) + 1))serialPort.closePort(;return 1;//从串口接收数据char recvBuffer[256];if (!serialPort.readData(recvBuffer, sizeof(recvBuffer)))serialPort.closePort(;return 1;}//输出接收到的数据cout << "Received data: " << recvBuffer << endl;//关闭串口serialPort.closePort(;return 0;```这个项目实现了一个简单的串口通信程序,通过命令行交互,用户可以输入要发送的数据,程序将数据发送到串口,然后从串口接收并打印接收到的数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC++串口上位机简单例程(源码及详细步骤)(4.33MB)VC++编写简单串口上位机程序2010年4月13日10:23:40串口通信,MCU跟PC通信经常用到的一种通信方式,做界面、写上位机程序的编程语言、编译环境等不少,VB、C#、LABVIEW等等,我会的语言很少,C语言用得比较多,但是还没有找到如何用C语言来写串口通信上位机程序的资料,在图书管理找到了用VC++编写串口上位机的资料,参考书籍,用自己相当蹩脚的C++写出了一个简单的串口上位机程序,分享一下,体验一下单片机和PC通信的乐趣。
编译环境:VC++6.0操作系统:VMWare虚拟出来的Windows XP程序实现功能:1、PC初始化COM1口,使用n81方式,波特率57600与单片机通信。
PC的COM口编号可以通过如下方式修改:当然也可以通过上位机软件编写,通过按钮来选择COM端口号,但是此次仅仅是简单的例程,就没有弄那么复杂了。
COM1口可用的话,会提示串口初始化完毕。
否则会提示串口已经打开Port already open,表示串口已经打开,被占用了。
2、点击开始转换,串口会向单片机发送0xaa,单片机串口中断接收到0xaa后启动ADC转换一次,并把转换结果ADCL、ADCH共两个字节的结果发送至PC,PC进行数值转换后在窗口里显示。
(见文章末尾图)3、为防止串口被一只占用,点击关闭串口可以关闭COM1,供其它程序使用,点击后按钮变为打开串口,点击可重新打开COM1。
程序的编写:1、打开VC++6.0建立基于对话框的MFC应用程序Test,2、在项目中插入MSComm控件:工程->增加到工程->Components and Controls->双击Registered ActiveX Controls->选择Microsoft Communications Control,version6.0->Insert,按默认值添加,你会发现多了个电话图标,这是增加后串口通信控件。
3、删除确认、取消和提示框,添加“电话”、进程、静态文本、按钮、编辑框,拖动添加的控件,根据喜好布局。
4、右击编辑框Edit选择属性,在样式里设置,勾选多行、垂直滚动,其它可按默认值。
右击静态文本Text选择属性,在常规设置里,修改标题。
右击按钮PushButton选择属性,在在常规设置里,修改标题。
修改后界面如下,程序写出来运行时“电话”标志会自动消失。
5、查看->建立类向导MFC ClassWizard->Member Viariable,选择ClassName为CTestDlg 的类,Control ID为MSCOMM1,双击它,为它添加控制变量m_comm1。
类似的,选择IDC_BUTTON2添加控制变量m_serial。
(建立类向导也可以右击然后在弹出的快捷菜单里选择建立类向导)至此,基本框架已经出来了,编译后运行可以看到如下所示的界面。
(组建->全部组件,然后组建->执行)6、点击左侧的视图窗口,可以在三种模式下切换,第三个是打开我们的源代码窗口,第一个是类,第二个是窗体的资源视图。
选择File View,展开test files->Header Files,打开testDlg.h,在全局变量下添加如下代码,然后保存:int gllen;//定义整型标量gllen,用于记录接收数据的个数CProgressCtrl*pbar;//指向进度条的指针,用于操作进度条CString strRXDdata;//编辑框显示的文本,记录历次转换值7、点击Recourse View,展开test recourses->Dialog,双击IDD_TEST_DIALOG,编辑我们的主界面对话框。
双击击“电话”,弹出如下对话框,按确认键:VC会进入源码编辑窗口,这个函数是用来处理串口事件的,当PC串口接收到数据时,会产生一个数据缓冲区有数据的消息事件,然后调用执行这个函数。
添加如下代码,进行数据处理,窗口更新等操作:VARIANT variant1;//定义VARIANT型变量,用于存放接收到的数据COleSafeArray safearray;//定义safearray型变量LONG len,k;//定义长整型变量len,kBYTE rxdata[2048];//定义BYTE型数组CString stremp1,stremp2;//定义两个字符串if(m_comm1.GetCommEvent()==2)//判断引起OnComm时间的原因{//如果是接收到特定个字节数,则读取接收到的数据variant1=m_comm1.GetInput();//把接收到的数据存放到VARIANT型变量里safearray=variant1;//VARIANT型变量转换为ColeSafeArray型变量len=safearray.GetOneDimSize();for(k=0;k<len;k++){safearray.GetElement(&k,rxdata+k);//得到接接收到的数据放到BYTE型数组rxdata里}for(k=0;k<len;k++){BYTE bt=(*(unsigned char*)(rxdata+k));//读取AD转换的高字节if((k%2)==0)if((k+1)<len){gllen++;//全局的变量,对接收到的转换结果的个数进行计算stremp2.Format("第%d次转换结果:",gllen);//显示第几次转换int temp=bt*4+((*(unsigned char*)(rxdata+k+1))>>6);//高低字节合并成实际的转换结果,注意转换结果是左对齐stremp1.Format("%2.2f",(2.56*temp/1024));//计算成实际电压值SetDlgItemText(IDC_STA TIC,("当前电压值为:"+stremp1+"V"));//更新静态文本控件pbar->SetPos(temp);//更新进度条的当前位置strRXDdata+=stremp2;//把新的数据放到全局的字符串里strRXDdata+=stremp1;strRXDdata+="V\r\n";//字符串加单位V后换行}}}SetDlgItemText(IDC_EDIT1,strRXDdata);//更新文本控件的显示这时重新编译一下,看会不会有什么错误,出现下面提示,可以选择全部组建来清除。
LINK:LNK4073:cannot create map for.ILK file;linking nonincrementally出现下面错误,请关闭运行的test.exe后重试。
LINK:fatal error LNK1104:cannot open file"Debug/test.exe"出现下面错误两种错误,是由于空间编号问题引起的,当我们添加了编辑框或者“电话”后再添加,其编号自动加一,就会出现控件没定义。
Z:\vc++串口上位机\test\testDlg.cpp(32):error C2065:'IDC_MSCOMM1':undeclared identifier Z:\vc++串口上位机\test\testDlg.cpp(139):error C2065:'IDC_EDIT1':undeclared identifier解决方法是,在RecourseView里,打开窗体IDD_TEST_DIALOG,右击“电话”或者编辑框等其它出错的控件,右击选择属性,在常规里修改ID,这里的程序,除BUTTON有1、2两个之外,其它都是1全部组建编译一下,看看有没有错误,没有错误就可以运行一下,可以看到界面更原来是一样的。
有错误就修改一下,省得弄多了,错在哪里都不知道,查起来麻烦。
8、在源码编辑里,打开testDlg.cpp文件,进行窗口初始化函数的编写。
找到BOOL CTestDlg::OnInitDialog()函数,在SetIcon(m_hIcon,FALSE);//Set small icon//TODO:Add extra initialization here后面添加如下初始化代码:gllen=0;//记录转换次数全局变量清零if(!m_comm1.GetPortOpen())//判断串口是否已经打开{m_comm1.SetCommPort(1);//选择串口号1m_comm1.SetPortOpen(TRUE);//打开串口m_comm1.SetRThreshold(2);//收到两个字节引发OnComm事件m_comm1.SetInputMode(1);//输入模式选为二进制m_comm1.SetSettings("57600,n,8,1");//设置串口参数,波特率57600,无奇偶校验,1位停止位,8位数据位MessageBox("串口初始化完毕","提示");//提示串口成功初始化}else MessageBox("串口被占用","提示");//如果已经打开串口,消息框提醒pbar=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);//获得指向IDC_PROGRESS1的指针pbar->SetRange(0,1023);//设置进度条的范围0~1023pbar->SetPos(0);//当前位置为0m_serial.SetWindowText("关闭串口");//按钮显示状态改变可以看到,串口的参数等等都在在这里初始化的,可以根据自己的需要修改的,具体可以查看VC++里的详细介绍,看看有哪些参数可以给我们修改来用。
添加后再编译一下,运行后可以看到多了一个串口初始化的提示信息窗口。
至此,我们已经完成了主要的串口操作及界面,剩下的就是两个按钮的操作了。
9、回到资源视图的IDD_TEST_DIALOG窗口,双击开始转换按钮,给它添加事件,点击后PC通过串口发送0xaa出来,给单片机接收。
添加如下代码:CByteArray m_Array;//定义字节数组m_Array.RemoveAll();//字节数组清空m_Array.SetSize(1);//设定维数为1m_Array.SetAt(0,0xaa);//给m_array[0]赋值0m_comm1.SetOutput(COleVariant(m_Array));//由于SetOutput函数的参数为V ARIANT型,必须强制转换后才能发送同样地,双击另外一个按钮,给串口操作按钮添加代码,用于关闭或者打开串口。