MFC上位机软件设计
周立功USBCAN-II上位机开发(MFC)
周⽴功USBCAN-II上位机开发(MFC)使⽤的USB转CAN的设备是周⽴功的USBCAN-II,在购买的时候,会有上位机⼆次开发的库⽂件、例程和API⽂档等材料,可以参考。
1、库函数的调⽤⾸先,把库函数⽂件都放在⼯作⽬录下。
库函数⽂件总共有三个⽂件:ControlCAN.h、ControlCAN.lib、ControlCAN.dll和⼀个⽂件夹kerneldlls。
VC调⽤动态库的⽅法(1) 在扩展名为.CPP的⽂件中包含ControlCAN.h头⽂件。
如:#include “ControlCAN.h”(2) 在⼯程的连接器设置中连接到ControlCAN.lib⽂件。
如:在VC7环境下,在项⽬属性页⾥的配置属性→连接器→输⼊→附加依赖项中添加ControlCAN.lib中间换了⼀台电脑,出现电脑丢失ControlCAN.dll的问题,将ControlCAN.dll拷到了可执⾏⽂件的⽂件夹中即可2、基本操作2.1 连接设备我这⾥每次连接都会重新开启接收数据的线程,创建⼀次接收数据的txt⽂档void CTest_OilDlg::OnBnClickedButtonConnect(){//⾸先判断CAN是否打开,,如果已经打开,则先复位及重启CAN--1.8//关闭程序前必须点击断开连接按钮,否则报错if(m_connect == 1){m_connect = 0;//isShow = 0;Sleep(500);GetDlgItem(IDC_BUTTON_CONNECT)->SetWindowTextW(_T("连接"));VCI_CloseDevice(m_deviceType,m_deviceIndex);showListInfo(_T("断开设备成功"));//结束⾃发⾃收测试的定时器KillTimer(0);//结束当前线程if(m_pThread != NULL){//::WaitForSingleObject(m_pThread->m_hThread,INFINITE);//该函数会造成死锁//https:///silvervi/article/details/5874212 将上⾯函数修改成如下,以避免上⾯函数阻塞对话框主线程的消息队列DWORD dwRet = 0;MSG msg;while(true){//等待处理数据线程结束,和等待消息队列中的任何消息dwRet = MsgWaitForMultipleObjects(1,&m_pThread->m_hThread,false,INFINITE,QS_ALLINPUT);//dwRet = WaitForSingleObject(m_pThread->m_hThread,50);switch (dwRet){case WAIT_OBJECT_0:break;case WAIT_OBJECT_0 + 1://get the message from Queue and dispatch it to specific windowPeekMessage(&msg,NULL,0,0,PM_REMOVE);DispatchMessage(&msg);continue;default:break;}break;}//CloseHandle(m_pThread->m_hThread);delete m_pThread;m_pThread = NULL;//不太懂}//关闭存储数据的⽂件for(int i = 0;i < 4;i++){//判断⽂件是否打开,若打开了关闭if(m_waveDataFile[i].m_hFile != CFile::hFileNull){m_waveDataFile[i].Close();}}GetDlgItem(IDC_BUTTON_START)->SetWindowTextW(_T("开始⼯作"));return;}//------------打开设置---------------------////设备类型m_deviceType = VCI_USBCAN2;//设备索引号,只有⼀个设备,索引号为0m_deviceIndex = 0;//第0路CAN--只有⼀路,⽤户选择CString canNum;m_selectCANNum.GetWindowTextW(canNum);m_canNumA = _ttoi(canNum);if(VCI_OpenDevice(m_deviceType,m_deviceIndex,0) != STATUS_OK)//m_deviceType:设备类型号;m_deviceIndex:设备索引号;最后⼀个是保留参数,⼀般为0 {MessageBox(_T("打开设备失败!",_T("警告"),MB_OK|MB_ICONQUESTION));showListInfo(_T("打开设备失败"));SetHScroll();return ;}else{showListInfo(_T("打开设备成功"));SetHScroll();}///-------------对CAN进⾏初始化------------------////对CAN进⾏初始化VCI_INIT_CONFIG init_config;init_config.AccCode = 0x00000000;init_config.AccMask = 0xffffffff;//表⽰全部接收,(全部接收,AccMask:0xffffffff;AccCode:0x00000000---这块可以通过测试软件中的滤波设置功能中计算)init_config.Mode = 0;//正常模式;1:表⽰只听模式(只接收,不影响总线)init_config.Timing0 = 0x00;init_config.Timing1 = 0x14;//相当于波特率1000kbpsif(VCI_InitCAN(m_deviceType,m_deviceIndex,m_canNumA,&init_config) != STATUS_OK){MessageBox(_T("初始化CAN失败!"),_T("警告"),MB_OK|MB_ICONQUESTION);VCI_CloseDevice(m_deviceType,m_deviceIndex);showListInfo(_T("初始化CAN失败"));SetHScroll();return ;}else{showListInfo(_T("初始化CAN成功"));SetHScroll();}m_connect = 1;GetDlgItem(IDC_BUTTON_CONNECT)->SetWindowTextW(_T("断开"));//创建存储数据的⽂件CTime time0 = CTime::GetCurrentTime();CString fileName = _T("WaveData");if(!PathIsDirectory(fileName)){::CreateDirectory(fileName,NULL);}fileName.Format(_T("WaveData/%d-%d %dh%dm%ds"),time0.GetMonth(),time0.GetDay(),time0.GetHour(),time0.GetMinute(),time0.GetSecond());if(!PathIsDirectory(fileName)){::CreateDirectory(fileName,NULL);}CString fileName0 = fileName;for(int i = 0;i < 4;i++){CString i0;i0.Format(_T("/%dth"),i+1);fileName = fileName0 + i0;fileName += _T(".txt");m_waveDataFile[i].Open(fileName,CFile::modeWrite|CFile::modeCreate|CFile::modeNoTruncate);//若⽂件存在,则清空}//开启接收数据的线程m_pThread = AfxBeginThread(ReceiveThread,this,0,CREATE_SUSPENDED,NULL);m_pThread->m_bAutoDelete = false;}2.2 接收数据UINT CTest_OilDlg::ReceiveThread(void *param){CTest_OilDlg *dlg = (CTest_OilDlg*)param;VCI_CAN_OBJ frameInfo[5000];//⼀次性从缓冲区获取50个帧VCI_ERR_INFO errInfo;int len = 1;//获取到的CAN帧的个数int i = 0;CString str,tmpstr;while(1){Sleep(1);if(dlg->m_connect == 0){break;}//获取缓冲区的长度int lenBuf = VCI_GetReceiveNum(dlg->m_deviceType,dlg->m_deviceIndex,dlg->m_canNumA);//获取到的数据的个数,如果缓冲区⼤于5000,则取出5000,否则将缓冲区全部取出len = VCI_Receive(dlg->m_deviceType,dlg->m_deviceIndex,dlg->m_canNumA,frameInfo,5000,400);//每次从缓冲区获取50帧,等待200ms⽆响应后结束if(len <= 0){//注意:如果没有读到数据则必须调⽤此函数来读取出当前的错误码//千万不能省略这⼀步(即使你可能不想知道错误码是什么)DWORD error = VCI_ReadErrInfo(dlg->m_deviceType,dlg->m_deviceIndex,dlg->m_canNumA,&errInfo);//返回值为1 表⽰操作成功if((errInfo.ErrCode & 0x0000) == 0x0000){//表⽰错误码是0x0000}}else{for(i = 0;i < len;i++){str = _T("数据:\n");if(frameInfo[i].DataLen > 8)frameInfo[i].DataLen = 8;//原始数据----但是这⾥没有保存for(int j = 0; j < frameInfo[i].DataLen;j++){tmpstr.Format(_T("%04x \n"),frameInfo[i].Data[j]);str += tmpstr;}::SendMessage(dlg->GetSafeHwnd(),WM_WAVEFORM,WPARAM(&frameInfo[i]),NULL);//TRACE(_T("receive\n"));}}}return0;}这⾥的数据处理是通过发送⾃定义消息的⽅法实现的,因为这些数据同时也要画成曲线显⽰在界⾯上,需要对界⾯进⾏更新操作,这时候需要给界⾯的主线程发消息去实现界⾯更新2.3 发送数据void CTest_OilDlg::OnBnClickedButtonSend(){//-----------------发送井下仪器⼯作模式命令-------------------//if(m_connect == 0)return ;VCI_CAN_OBJ frameInfo;//设置发送重发超时时间,建议不⼩于1500ms,默认4000msVCI_SetReference(m_deviceType,m_deviceIndex,m_canNumA,4,&m_sendTimeout);frameInfo.ID = 0x84444444;//需要再确定frameInfo.SendType = 0;//正常发送frameInfo.RemoteFlag = 0;//数据帧frameInfo.ExternFlag = 1;//扩展帧frameInfo.DataLen = 3;//⼀个字节frameInfo.Data[0] = 0x04;frameInfo.Data[1] = 0xff;//01仪器待机;02:仪器⾃检;03:仪器定时开关机;04:仪器测试;05:仪器连续⼯作frameInfo.Data[2] = m_selectMode.GetCurSel() + 1;int ret = VCI_Transmit(m_deviceType,m_deviceIndex,m_canNumA,&frameInfo,1);if(ret == 1){showListInfo(_T("命令发送成功"));SetHScroll();}else{showListInfo(_T("命令发送失败"));SetHScroll();}}View Code3、问题做到现在,程序⾃发⾃收可以,接收下位机数据能接受5个左右的循环就接不到了,后来把数据的操作都屏蔽掉,只接收,发现也接不到,缓冲区内的数据个数为0.这个问题还没解决。
VC上位机MFC利用串口控件发送接收数据程序代码
VC上位机MFC利用串口控件发送接收数据程序代码打开vc++6.0,建立一个基于对话框的mfc应用程序。
添加控件后会弹出一个确认框
点击“确定”
单击\,控件将被成功添加
然后在控件的属性里进行一些必要的配置:
Inputmode设置为1-binary,这意味着以二进制模式检查数据
其它的用默认值。
您还可以使用oninitdialog()函数中的代码进行设置,如下所示:
设置好以后,要在程序的开始打开串口,不然是没发使用的。
在oninitdialog中加入以下代码:
睡眠(100);方差数据;intdata_len;charcdata[1024];
cdata[data_len]=0;
//CDATA是指向所接收字符串的指针
m_list.addstring(cdata);//在listbox控件中显示接收到的数据}。
MFC程序设计范文
MFC程序设计范文MFC(Microsoft Foundation Class)是微软公司开发的一套用于Windows系统的应用程序框架,它提供了一系列的C++类,用于简化Windows程序的开发过程。
MFC基于面向对象的编程思想,提供了许多封装好的类和函数,使得开发者可以更加方便地进行界面设计、事件处理、数据管理等操作。
1. 创建MFC应用程序项目:在Visual Studio中选择新建项目,选择MFC应用程序向导,按照向导的指引完成项目的创建。
2.设计界面:MFC提供了可视化界面设计工具,开发者可以通过拖拽控件、设置属性等方式设计应用程序的界面布局。
控件包括按钮、文本框、列表框、菜单等等。
3.处理事件:事件是用户操作界面时发生的动作,如按钮被按下、列表框的选项被选中等。
在MFC中,可以通过重载响应函数的方式来处理事件。
每个控件都有一系列的事件处理函数,开发者可以根据需要选择合适的函数进行重载,然后在函数中编写事件处理的代码。
4.数据管理:MFC提供了一些数据管理的类,用于处理数据的读取、存储、处理等操作。
开发者可以使用这些类来操作数据库、读取文件、保存设置等。
除了上述基本流程,MFC还提供了一些其他的功能,如线程管理、消息处理、打印输出等。
开发者可以根据实际需求选择适合的功能进行使用。
然而,MFC程序设计也存在一些缺点。
首先,MFC只能在Windows系统上运行,不具备跨平台的能力。
其次,由于MFC是一套较为庞大的类库,如果没有掌握好MFC的使用方法,可能会导致开发效率低下,代码冗长。
另外,MFC的界面设计工具相对较为简陋,对于一些复杂的界面效果可能无法满足需求。
总体来说,MFC是一套适用于Windows系统的程序框架,可以帮助开发者快速搭建Windows程序的框架。
它提供了丰富的类库和工具,使得开发者能够更加轻松地进行界面设计、事件处理、数据管理等操作。
然而,MFC也有一些缺点,如只能在Windows系统上运行、界面设计工具相对简陋等。
MFC上位机软件设计
MFC上位机软件设计MFC(Microsoft Foundation Class)是微软公司开发的一套用于Windows操作系统的应用程序框架。
它提供了一系列用于快速开发Windows应用程序的类和函数库。
在开发MFC上位机软件时,需要考虑软件的设计,以确保软件的可靠性和易用性。
首先,需要进行软件需求分析。
这是软件开发过程中的首要步骤,可以通过与客户、用户的沟通和交流来收集和明确软件的需求。
需求分析包括对软件功能、性能、界面、用户角色等方面的明确。
其次,在设计阶段,需要确定软件的架构和模块划分。
MFC提供了一套基于窗口的界面设计,开发者可以根据软件的需求来设计主窗口和各个子窗口。
在设计上位机软件时,通常会包含与下位机通信的功能,如串口通信、网络通信等。
这就需要设计相应的通信模块。
在MFC上位机软件设计中,还需要考虑软件的界面设计。
界面设计应该具有良好的用户体验,界面布局合理,操作简单直观,符合用户的操作习惯。
可以通过使用MFC提供的控件和对话框进行界面设计,包括按钮、文本框、列表框、滚动条等。
另外,需要考虑软件的数据管理和数据处理。
上位机软件通常需要对从下位机接收到的数据进行处理和分析,可以使用MFC提供的数据库操作和数据结构来管理和处理数据。
同时,也需要设计相应的业务逻辑和算法来满足软件的功能需求。
在软件设计中,还需要进行系统测试和调试。
测试是确保软件质量的重要环节,可以通过单元测试、集成测试、系统测试等多种方式来进行测试。
调试是解决软件问题和bug的过程,可以利用MFC提供的调试工具和技术来进行调试。
此外,需要注意软件的安全性和稳定性。
对于上位机软件来说,安全性是重要的考虑因素之一、可以通过加密通信、用户权限管理等手段来增加软件的安全性。
稳定性是软件的基础要求,需要在设计和开发过程中尽量避免内存泄漏、空指针引用等问题,以确保软件的稳定性。
最后,在MFC上位机软件设计中,需要考虑软件的扩展性和可维护性。
基于MFC的单片机上下位机通信控制系统设计
Visual C++是一种由微软公司开发的包含协助开发环境的事件驱动编程语言,VC 拥有图形用户界面 (GUI)和快速应用程序开发(RAD)系统,程序员可以轻松的使用 VC 提供的组件快速建立一个应用程
________________________________ 作者简介:江维(1983-),男,讲师,博士,研究方向:智能控制与嵌入式系统. 基金项目:2018 年武汉纺织大学教学研究项目(2018JY019).
第 32 卷 第 2 期 2019 年 04 月
武汉纺织大学学报
JOURNAL OF WUHAN TEXTILE UNIVERSITY
Vol.32 No.2 Apr. 2019
江 维,吴雨川,李红军
TP273
MFC程序设计范文
MFC程序设计范文MFC(Microsoft Foundation Classes)是一种用于Windows操作系统的C++类库,它是Microsoft Visual C++应用程序开发的重要组成部分。
MFC提供了一种基于对象的编程模型,可以大大简化Windows GUI(图形用户界面)应用程序的开发过程。
通过MFC库,开发人员可以利用现有的类和功能来创建强大、可靠且可扩展的Windows应用程序。
在MFC程序设计中,通常需要遵循以下步骤:1. 创建一个MFC应用程序项目:首先,在Visual Studio中创建一个新的MFC应用程序项目。
在项目配置向导中,选择应用程序类型(对话框型、SDI型或MDI型)、支持的功能(ActiveX控制和OLE支持)、使用的界面风格等。
2. 编写应用程序代码:在MFC应用程序项目中,主要的代码文件是CWinApp类的派生类和CWnd类的派生类。
- CWinApp类的派生类通常包含应用程序的初始化和结束代码,包括应用程序的全局设置、消息处理程序的注册和初始化等。
- CWnd类的派生类通常用于创建主窗口或对话框,处理消息、事件和用户交互。
3. 设计用户界面:通过Visual Studio的可视化设计器,可以方便地设计应用程序的用户界面。
可以通过拖放控件、调整属性和布局来创建界面元素,如按钮、文本框、列表框等。
4.实现功能代码:在MFC应用程序中,可以使用MFC库提供的丰富功能和类来实现各种功能,如文件操作、数据库访问、多线程处理等。
5. 编译和调试程序:完成代码编写后,可以通过Visual Studio的编译器和调试器来编译和调试应用程序。
可以通过断点、单步执行等功能来查看程序的执行过程和变量的值。
6.发布应用程序:完成调试后,可以将应用程序打包成可执行文件,然后发布给用户使用。
可以将可执行文件、相关的库文件和资源文件打包成安装程序,通过安装程序来安装和部署应用程序。
MFC上位机软件设计
MFC上位机软件设计VC++串口上位机简单例程(源码及详细步骤)VC++串口上位机简单例程(源码及详细步骤) VC++串口上位机简单例程.rar (4.33 MB)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,表示串口已经打开,被占用了。
(a) to further cultivate and practice the socialist core value concept. Human civilization is the core and soul of the city. Created in deepening the urban civilization, to seize cultivation and practice the socialist core value concept of the fundamental task, to everyone talk about civilization, everywhere to see the civilization "as the goal, to promote the creation tasks implemented. First, we must deepen the Delhi City, good deeds sunshine" is the theme of moral practice, to build the brand of "Da Yi Ju, Houde good deeds" moral. Carefully create activity carrier, highlighting to create a theme, to carry out a wide range of "good side" recommended review activities, carry out moral modelitinerant preachers and most beautiful people, the series of model characters selection Activities, aggressively push the tree to a groupof people around to learn and amiable, respectable moral typical. To focus on the real refinement "good deeds for the four virtues list built, tubes, each link work; let the moral has become an important force for regulating the behavior of the citizens. A hand grasping the education, focusing on governance, the violation of public order, destruction of public facilities and other acts resolutely exposure. Second, we must deepen the activities to create a civilized. Actively carry outcivilized units, township of civilization, civilized window created, andfurther optimize the environment for government service. With the deep development of civilized community and family civilization, civilized community infrastructure to create activities, guide2、点击开始转换,串口会向单片机发送0xaa,单片机串口中断接收到0xaa后启动ADC转换一次,并把转换结果ADCL、ADCH共两个字节的结果发送至PC,PC 进行数值转换后在窗口里显示。
上位机软件开发工程师职位描述与岗位职责
上位机软件开发工程师职位描述与岗位职责上位机软件开发工程师是一种高级计算机软件工程师,主要负责设计和开发电脑应用程序,使其能够向下层设备(例如传感器或执行器)发送数据或命令,从而控制与监视系统的运行。
他们需要深入理解计算机系统的底层架构,熟练掌握不同的开发工具,并具备高度的创意和创新意识,以便开发出可靠高效的软件解决方案,以满足客户的需求。
下面是上位机软件开发工程师的职位描述与岗位职责:职位描述:1. 设计、开发和测试上位机应用程序,以实现系统的实时数据监视、远程控制和自动化计算;2. 使用C/C++、JAVA、Python等编程语言编写代码,应用MFC、QT、.NET等框架和库进行开发,保证软件的高可靠性和高稳定性;3. 与硬件工程师密切合作,协助其设计和开发传感器和控制器固件的通信协议,以保证上下层设备间的数据传输的正确性和及时性;4. 对上位机软件进行持续性改进,以增加其性能和功能,降低其系统错误率,并提高其易维护性;5. 支持产品的现场测试、部署和维护工作,并注重用户反馈,及时解决技术问题,为客户提供有效的技术支持和指导;岗位职责:1. 设计上位机软件的系统架构和数据流程,生成详细的项目计划和开发日程表;2. 与客户或其他工程师进行沟通和协调,共同解决技术问题和设计需求,确保软件方案的成功实施和客户满意度;3. 协助团队成员获得必要的技术培训和支持,提高他们的技术水平和应对复杂客户需求的能力;4. 执行代码版本控制和集成测试,协助团队确保软件产品的质量和适应性,研究新技术和新方案,为团队提供技术创新思路;5. 主动参与项目管理,并且不断改进工作流程和开发方法,为客户提供更快、更好和更经济的软件解决方案。
BLDC控制器上位机配置软件设计与实现
BLDC控制器上位机配置软件设计与实现
吴梦芸;郭晶
【期刊名称】《电脑与信息技术》
【年(卷),期】2024(32)3
【摘要】文章为无刷直流电机控制器设计了上位机配置软件,针对控制器配置参数和应用特点,设计了配置参数管理和产品类型管理方法,能够适配多种控制器产品,通过参数文件复用配置参数,实现生产设参功能,提高生产和调试效率。
软件基于MFC 开发平台,使用C++语言实现,界面简洁、操作简便,具有较高的易用性和实用性。
【总页数】4页(P90-93)
【作者】吴梦芸;郭晶
【作者单位】中科芯集成电路有限公司
【正文语种】中文
【中图分类】TP311.5
【相关文献】
1.基于Qt的电子提花机控制器上位机控制系统软件设计
2.超声检测多轴运动控制器及其上位机软件设计
3.大攻角侧向力控制器的上位机软件设计
4.基于Delphi的称重控制器上位机软件设计与实现
5.永磁同步电机控制器串口通信上位机软件设计
因版权原因,仅展示原文概要,查看原文内容请购买。
MFC典型应用程序设计
MFC典型应用程序设计
MFC可以用于开发各种类型的Windows应用程序,包括桌面应用程序、图形用户界面(GUI)应用程序和多媒体应用程序等。
在这些应用程序中,MFC的典型应用有以下几个方面。
其次,MFC可以用于处理用户输入。
MFC提供了一套用于处理鼠标、
键盘和其他输入设备的类和函数。
开发人员可以轻松地获取用户的输入,
并根据需要进行相应的处理。
例如,可以通过MFC捕获鼠标点击事件或键
盘按键事件,并执行相应的操作。
此外,MFC还可以用于操作文件和目录。
MFC提供了一系列的文件和
目录类,可以方便地读取、写入和管理文件系统中的文件。
开发人员可以
使用这些类来创建、复制、删除和重命名文件,或者打开文件并读取其中
的数据。
通过MFC还可以获取文件和目录的属性信息,并进行相应的操作。
最后,MFC可以用于实现数据存储和数据库连接。
MFC提供了一套用
于操作数据库的类和函数,可以方便地连接到各种类型的数据库,并执行SQL查询和更新操作。
开发人员可以使用MFC提供的类来连接到数据库服
务器,并执行数据库操作,如插入、更新、删除和查询等。
通过MFC还可
以处理数据库事务,确保数据的一致性和完整性。
综上所述,MFC典型应用程序设计涉及图形用户界面的创建、用户输
入的处理、文件和目录的操作以及数据库的连接和操作等方面。
开发人员
可以通过MFC提供的丰富功能和易于使用的界面,快速开发出各种类型的Windows应用程序,并满足用户的需求。
基于MFC的某雷达测试显控软件设计
基于 MFC的某雷达测试显控软件设计摘要:本论文基于MFC技术、ARINC 453和ARINC 429通信原理,利用可视化编程VC++,从工业控制上位机软件的特点出发,按照功能分为不同的模块,设计完成一款适用于某雷达测试时使用的显控软件。
关键词:MFC;ARINC 453;ARINC 429;显示和控制;1.引言现代飞机上使用统一处理器对飞机各种航电设备信息进行统一处理,并将功能相同或相近的设备组合在一起,在显示器上综合显示相关参数及雷达回波画面,称之为综合航电系统,故对于雷达研发及生产厂家,研制适用于其研发及生产雷达的航电显控仪器显得十分必要。
对于航电显控仪器需开发一款用于雷达控制与雷达回波画面显示的上位机软件,为快速实现该上位机软件的开发,必须选用一种适合该仪器且高效的开发平台,由于Visual C++与Windows操作系统结合简单且最为紧密,并且因其提供的MFC类库具有功能强大、易操作、开发效率高的优点。
MFC(Microsoft Foundation Class 微软基础类库)是由一组相互关联相互支持的类构建的应用程序模型,它采用面向对象的思想用C++语言封装了Windows平台的API函数,使得应用程序开发可以在继承前人工作的基础开发各自所需的应用软件,加快了开发进度,增加了应用程序的可靠性和可维护性。
2. 测试显控软件的实现方法2.1雷达回波画面显示设计该雷达回波画面包括以黑色、绿色、黄色和红色为主的彩带,并包含量程及扫描角度等信息,通过接收到的ARINC 453及ARINC 429数据,经过对数据的解析,完成雷达画面的显示,其实现过程如下:在软件打开时,进行初始化,对PCI板卡驱动初始化设置,并获取画面显示区域句柄,创建与显示区域兼容的内存设备:CWnd * pWnd = GetDlgItem(IDC_STATIC_ReceiveDisplay1);pDC=pWnd->GetDC();pWnd->GetClientRect(&static_rect);MemDC.CreateCompatibleDC(pDC);MemBitmap.CreateCompatibleBitmap(pDC,static_rect.Width(),static_re ct.Height());pOldBit = MemDC.SelectObject(&MemBitmap);首先通过底层PCI总线驱动程序读取并解析外部ARINC453及ARINC 429数据:Pci_ReadWxData(&Device,stepdata_flag,0xf0,1);ReadFile(hcom,recvdata1,4,&wCount,NULL);for(int j=0;j<256;j++){recvdata2[j]=recvdata1[j];str1.Format ("%02X ",recvdata1[j]);if((j+1)%16==0 ){str=str+str1+"\r\n";}elsestr+=str1;}其次,使用以下函数绘出雷达显示区域弧形及等方位径向线条,用于雷达量程及方位角度的标校:MemDC.Arc(200-42, 260-42, 200+42, 260+42,382,155,18,155);MemDC.MoveTo(200,260);MemDC.LineTo(200,49)。
基于MFC的飞思卡尔智能车上位机设计
基于MFC的飞思卡尔智能车上位机设计众所周知,上位机在智能车调试中起着重要作用,尤其是通过无线串口,实现数据实时发送接收,极大方便了智能车调试。
作者以VC6.0为平台使用微软MFC,简单介绍串口上位机设计,抛砖引玉。
STEP1.新建MFC工程STEP2.加入串口类VC6.0进行串口开发主要有两种方式,一种是利用微软控件MScomm,一种是利用开源类CSerialPort。
但是前者编译生成的程序在其他电脑上运行还要注册控件,略显麻烦。
而后者属于对windows API封装,使用方便,兼容性强。
本文重点介绍CSerialPort的使用。
在/serialport.html下载最新CSerialPort类,工程中添加.h 和.cpp文件,如下图。
在serialDlg.cpp和serialDlg.h中包含Cserialport头文件同时在serialDlg.h中定义对象CSerialPort m_SerialPort; //CSerailPort类对象STEP3. Cserialport必备函数STEP4.窗口布局设置成员变量(Ctrl+W ),四个编辑框对应四个UNIT成员变量STEP5.串口初始化OK,所有前期工作准备完成,开始串口操作按钮“打开串口”,双击,创建消息函数void CSerialDlg::OnOpenserial() 实现串口初始化,代码如下按钮“关闭串口”,双击,创建消息函数void CSerialDlg::OnCloseserial() 函数功能为进行串口初始化,代码如下STEP6.串口数据发送按钮“发送”,双击,创建消息函数,代码如下STEP7.串口数据接收手工建立WM_COMM_RXCHAR的消息映射处理函数OnComm() 首先在serialDlg.h中添加响应函数声明在serialDlg.cpp中添加消息响应At last,VC串口通讯程序基本功能,打开串口,关闭串口,接收数据,发送数据均以完成。
上位机软件设计范文
上位机软件设计范文1.需求分析:首先需明确用户对软件的需求和期望,了解所需的功能需求、系统架构需求、用户界面需求等,并记录下来。
2.系统设计:根据需求分析得出的结果,将其转化为系统设计。
这包括确定软件的总体架构、应用场景、模块划分、通信协议、数据结构等。
3.软件开发:在系统设计的基础上,进行软件开发。
这包括编写代码、测试、调试等过程。
高效的编码和清晰的代码结构是保证软件质量的重要因素。
4.数据库设计:对于需要存储和管理大量数据的上位机软件,数据库的设计尤为重要。
数据库需要能够存储用户输入的数据、设备状态数据等,并能进行高效的查询和更新。
5.用户界面设计:用户界面设计需要考虑用户的使用习惯和操作习惯,保证用户界面清晰易懂、交互友好。
根据需求分析,设计一个直观、功能全面的用户界面。
6.通信协议设计:上位机软件通常需要与下位设备或控制器进行通信。
通信协议设计要考虑通信的可靠性、实时性和扩展性。
协议设计需要明确通信方式、通信周期、数据格式等。
7.测试与验证:软件开发完毕后,需要进行系统测试和验证。
测试包括单元测试、集成测试、系统测试等。
确保软件符合用户需求并能够稳定可靠地运行。
8. 部署和维护:软件开发完毕后,需要将软件部署到实际使用环境中。
同时,需要进行软件的维护和升级,及时修复软件中的bug,并添加新的功能或改进用户界面。
总结而言,上位机软件设计需要具备系统性思考、全面的功能设计、高效的编码、可靠的通信和数据管理以及良好的用户界面设计。
通过上述步骤,可以有效地设计出一个满足用户需求并具备良好扩展性的上位机软件。
mfc程序设计实例的步骤
mfc程序设计实例的步骤MFC程序设计是Windows平台下的一种经典的程序开发框架,它提供了一系列的软件工具和技术,可以帮助我们快速地开发高效、稳定、易于维护的Windows应用程序。
如果你想学习MFC程序设计,那么下面是一些基本的步骤,可以帮助你入门。
1. 准备工作:安装Visual Studio和MFC库首先,你需要安装Visual Studio开发环境,因为MFC是由微软开发的,所以它的最佳开发环境就是Visual Studio。
然后,你需要安装MFC库,这个库包含了许多用来开发Windows桌面应用程序的类、函数和工具。
2. 创建MFC应用程序项目在Visual Studio中创建一个新的MFC应用程序项目,你需要选择一个MFC应用程序的模板,然后配置一些基本信息,如项目名称、位置等。
一旦创建好了项目,你就可以开始编写代码了。
3. 设计用户界面设计好用户界面是一个重要的步骤,因为它是用户与你的应用程序交互的主要方式。
在MFC中,你可以使用类似于Visual Basic的可视化设计工具来创建Windows窗体、对话框和控件,然后使用代码来处理它们的事件和行为。
4. 编写程序代码在MFC中,你可以使用C++编程语言来编写程序代码。
你需要了解MFC库中提供的类、函数和工具,这些都是你开发应用程序的基础。
你可以使用MFC中的类来创建窗口、菜单和工具栏等控件,处理消息、事件和命令等操作。
5. 调试和测试调试和测试是开发过程中不可或缺的步骤。
你可以使用Visual Studio的调试工具来发现和解决程序中的错误和问题,确保你的程序能够正确地运行和达到预期的功能。
6. 发布和部署最后,你需要将你的应用程序发布和部署到用户的计算机上。
你可以使用Visual Studio的部署工具来创建安装程序或者自己手动进行部署。
确保你的应用程序能够在用户的计算机上正常运行和使用。
以上就是MFC程序设计的基本步骤。
当然,这只是一个大概的概述,如果你想成为一个MFC程序员,你需要不断学习和实践,才能掌握更多的技能和经验。
(mfc)课程设计报告
(mfc)课程设计报告一、教学目标本课程的教学目标是让学生掌握(mfc)的基本概念和应用技能。
具体来说,知识目标包括了解(mfc)的定义、特点和应用场景;技能目标包括能够使用(mfc)进行基本的数据操作和分析;情感态度价值观目标包括培养学生对(mfc)的兴趣和好奇心,以及认识到(mfc)在实际生活中的重要性。
二、教学内容根据课程目标,本课程的教学内容主要包括(mfc)的基本概念、数据操作和应用案例。
具体来说,教学大纲安排如下:1.第一章:(mfc)概述介绍(mfc)的定义、特点和应用场景2.第二章:(mfc)基本操作讲解(mfc)的基本数据操作,如增删改查等3.第三章:(mfc)应用案例通过实际案例,让学生学会如何使用(mfc)解决实际问题三、教学方法为了达到课程目标,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法和实验法等。
具体来说:1.讲授法:用于讲解(mfc)的基本概念和基本操作2.讨论法:通过小组讨论,让学生深入理解(mfc)的应用案例3.案例分析法:分析实际案例,让学生学会如何将(mfc)应用于实际问题4.实验法:让学生动手实践,加深对(mfc)的理解和掌握四、教学资源为了支持教学内容和教学方法的实施,本课程将选择和准备以下教学资源:1.教材:选用权威、实用的(mfc)教材,作为学生学习的主要参考资料2.参考书:推荐一些与(mfc)相关的参考书,供学生拓展阅读3.多媒体资料:制作精美的PPT课件,以及相关的视频、动画等多媒体资料,丰富学生的学习体验4.实验设备:准备充足的实验设备,确保每个学生都能动手实践五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分。
平时表现主要评估学生的课堂参与度和讨论表现,作业则主要评估学生的基本技能掌握情况,考试则评估学生对(mfc)知识的综合运用能力。
评估方式应客观、公正,能够全面反映学生的学习成果。
六、教学安排本课程的教学安排将共计30课时,每周安排2课时,共计15周完成。
程序设计课程设计mfc
程序设计课程设计mfc一、教学目标本课程旨在通过MFC(Microsoft Foundation Class)程序设计教学,让学生掌握C++面向对象编程的基本概念,熟悉MFC类库的使用,能够独立完成Windows应用程序的设计与开发。
1.理解C++面向对象编程的基本原理和方法。
2.掌握MFC类库的主要组件和功能。
3.熟悉Windows应用程序的界面设计和事件处理机制。
4.能够运用C++面向对象编程的思维解决实际问题。
5.熟练使用MFC类库进行Windows应用程序的开发。
6.具备独立分析和解决Windows应用程序设计中遇到的问题的能力。
情感态度价值观目标:1.培养学生对计算机科学和程序设计的兴趣和热情。
2.培养学生团队合作精神和自主学习能力。
3.培养学生良好的编码习惯和职业道德素养。
二、教学内容本课程的教学内容主要包括C++面向对象编程基础、MFC类库的使用和Windows应用程序的设计与开发。
1.C++面向对象编程基础:类与对象、继承与多态、封装与接口等。
2.MFC类库的使用:窗口类、控件类、文档类、视图类等,以及MFC应用程序的创建和调试。
3.Windows应用程序的设计与开发:界面设计、事件处理、菜单设计、对话框编程等。
三、教学方法本课程采用讲授法、案例分析法、实验法等多种教学方法,以激发学生的学习兴趣和主动性。
1.讲授法:通过讲解C++面向对象编程的基本原理和MFC类库的使用方法,使学生掌握相关知识。
2.案例分析法:通过分析实际案例,使学生更好地理解Windows应用程序的设计与开发过程。
3.实验法:通过动手实践,使学生熟练掌握C++编程和MFC类库的使用,提高实际操作能力。
四、教学资源本课程的教学资源包括教材、多媒体资料、实验设备和网络资源。
1.教材:选用权威、实用的教材,为学生提供系统的学习资料。
2.多媒体资料:制作精美的PPT课件,为学生提供直观的学习体验。
3.实验设备:提供充足的计算机设备,确保学生能够进行实验和实践。
ACR控制器上位机程序开发(MFC)
ACR控制器上位机程序开发(MFC)Parker为ACR系列控制器提供了ComACRSrvr.dll动态链接库供我们开发其上位机程序。
下面对使用MFC开发上位机程序做一个简要说明。
首先,将ACR-View软件安装到PC机上。
这里我们使用的ACR-View软件版本号为5.5.5。
MFC开发工具为VC++6.0英文版。
一、新建工程下面我们新建一个MFC工程,我们为工程起名为“ACR9000”。
如图1-1所示:图1-1单击“OK”按钮,我们这里建立一个基于对话框的工程。
根据向导完成工程创建。
二、添加动态链接库我们先要找到ComACRSrvr动态链接库文件。
我们在安装ACR-View时,软件会自动在“C:\WINDOWS\system32”文件夹下安装“ComACRsrvr.dll”及“ComACRsrvr.tlb”文件,我们将这两个文件复制到刚才新建的MFC工程所在的文件夹中。
这里我们将这两个文件复制到“E:\VC\ECET”(工程所在路径见图1-1)文件夹中。
如图2-1示:图2-1下面添加动态链接库:在MFC开发环境中,选择“View”菜单下的“ClassWizard”,弹出“MFC ClassWizard”对话框,单击该对话框右上角的“Add Class”按钮,从中选择“From a type library”。
如图2-2所示:图2-2在弹出的“Import from Type Library”对话框中,选择刚才添加的“ComACRSrvr.dll”或“ComACRSrvr.tlb”文件,单击“打开”按钮,如图2-3示:图2-3弹出“Confirm Classes”对话框。
如图2-4示:图2-4该对话框列出了ComACRSrvr动态链接库为我们开放的接口,我们从中选择需要用到的接口。
注:ComACRSrvr为我们开放了四个接口1.IStatus:用于控制器中数据的读取2.IUtility:用于程序的上传、下载3.ITerminal:用于发送、接收字符串数据4.IControl:用于对控制器中的数据赋值,发送控制指令详细的接口说明请参考ComACRSrvr.pdf手册这里我们添加IStatus及IControl接口,这两个接口也是最常用的。
基于MFC的纯方位定位系统串口通讯软件设计
胡科 强 , : 于 MF 等 基 C的纯 方位 定位 系统 串口通讯软 件设 计
每帧声学数据最多 为 B× × M N=245 bs 7 p 。选 用 的 G 2 0 D 3 电 台数据 , 其传 输 码 速率 在960~1 0 p , 0 92 0b s 发射 功 率 为 0 1 误码率小 于 1 . ~8W, 0一, 在通信 码速率 、 信距离 、 耗 通 功
、
DF S
王
号 : bt浮标位置数据 : 2 i ; 经度 3 i+纬度 3 i=6 i 浮 2b t 2bt 4● +
标状态数据 : btG S定位状态 ) 目标 I l i P ( ; D号 : b ( 3 i 目标最 t 大跟踪数 : ) 目标方 位数 据 :6 i 测 试状 态数 据 : i 8个 ; 1b ; t 4 bt ( 表明浮标基元对 目标的检测能力) 。 这样 , 以上数据均 考虑 了系统进 一步扩 展 的要求 , 以最
过程 的模拟要求 。 关键词 : 下定 位 ; 水 多线程 ; 口通信 ; 串 数据传输
中 图 分 类 号 :P9 T31 文献标识码 : A 文 章 编 号 :06—00 (02 0 00 0 10 7 7 2 1 ) 8— 12— 3
串 口通讯是计算 机和外设进行 通讯 , 取外设采集 到的 获 监测数据的重要手段。基于 G S和矢量水 听器技术的基阵式 P 水下定位系统来实现对水下 目标定位…。其独特性在于以较
第3 3卷
第 8期
四 川 兵 工 学 报
21 0 2年 8月
【 信息科学与控, -程】  ̄ l r
基 于 MF C的 纯 方位 定 系 串 口通 讯 软 件 设计 位 统
胡科 强 , 小 宁 王
MFCWindows应用程序设计课程设计 (2)
MFC Windows应用程序设计课程设计1. 课程设计说明本次课程设计主要是针对进入MFC框架学习的学生,通过设计一个Windows应用程序来深入地了解MFC及Windows UI编程。
2. 课程设计要求设计一个简单的Windows应用程序,并包含以下功能:•界面中包含一个单行文本框,用户输入内容后可以保存到本地文本文件;•界面中包含一个多行文本框,显示文本文件中的内容;•界面中包含一个菜单选项,可以打开和保存文本文件;•界面中包含一个退出按钮,点击后可以退出程序。
3. 课程设计步骤3.1 创建MFC应用程序首先,我们需要使用Visual Studio来创建一个MFC应用程序。
在创建时,可以选择新建空项目并选择MFC应用程序,或者在已有项目中添加MFC应用程序。
3.2 创建界面在MFC应用程序中,我们可以使用Resource View来创建并设计界面。
在Resource View中选择Dialog,并添加需要的控件和菜单选项。
3.2.1 添加单行文本框和多行文本框在Dialog中添加Edit控件,并设置ID,可以分别设置为IDC_EDIT和IDC_LIST。
3.2.2 添加菜单选项在菜单栏中添加需要的菜单,例如File菜单中可以添加Open和Save选项。
在CMnFrame类中添加消息处理函数,对应菜单选项的点击事件。
3.2.3 添加退出按钮在Dialog中添加Button控件,设置ID为IDCANCEL。
3.3 实现文件操作在程序中需要实现文件的打开、保存和读取操作。
可以在CMnFrame类中添加对应的消息处理函数,在点击菜单选项时打开对应的文件对话框,选择需要打开或保存的文件。
在CChildView类中处理对应的文本框中的内容读取和保存操作。
4. 课程设计总结通过本次课程设计,我们深入了解了MFC框架的应用,了解了Windows UI编程的基本概念和实现方法。
同时,我们学习了如何设计和实现一个Windows应用程序,并掌握了文件操作的基本知识。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MFC上位机软件设计VC++串口上位机简单例程(源码及详细步骤)VC++串口上位机简单例程(源码及详细步骤) VC++串口上位机简单例程.rar (4.33 MB)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 andControls->双击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_STATIC,("当前电压值为: "+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' : undeclaredidentifierZ:\vc++串口上位机\test\testDlg.cpp(139) : error C2065: 'IDC_EDIT1' : undeclaredidentifier解决方法是,在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出来,给单片机接收。