VC++高级程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

目录一.实验要求............................................................................................1二.软硬件平台简介...............................................................................1三.总体设计思想...................................................................................1四.具体设计界面图(含详细操作步骤)..............................................24.1建立应用工程.............................................................................24.2添加界面控件.............................................................................24.3映射控件通用消息.....................................................................34.4为对应控件添加代码.................................................................34.5生成可执行的EXE文件..............................................................7五.软件流程图........................................................................................8六.测试结果截图.................................................................................9七.总结..................................................................................................10-1-一、实验要求把一台计算机和单片机(12C5A60S2)的串口通过串口线连在一起,通过串口实现通讯。利用VC++高级语言、C语言编程实现,要求程序界面友好,有发送和接收功能,其接收和发送内容可在屏幕上显示。二、软硬件平台简介CPU:P42G及以上兼容于80x86架构的中央处理器内存:1G及以上硬盘:80G及以上网卡:100M及以上操作系统:WindowsXP及以上软件:VisualC++6.0KeiluVision3-4STC_ISP_V488硬件:51开发板搭载STC12C5A60S2单片机1602液晶显示屏三、总体设计思想串口通讯把数据的字节分解成单个的二进制比特流依次传输,其结构简单,连接线少,应用非常广泛。实现串口通信的方法很多。如:利用标准通信函数实现串口通信、利用API实现串口通信和利用ActiveX控件实现。本文主要采用ActiveX控件MicrosoftCommunicationsControl(MSComm)编程,Windows平台先进的ActiveX技术使得对串口编程不再需要处理烦琐的细节。利用已有的AxtiveX控件,只需要编写少量的代码,就可以轻松高效地完成任务。以下对ActiveX控件属性进行简单介绍,在ClassWizard中为新创-2-建的通信控件定义成员对象(CMSCommm_comm),通过该对象便可以对串口属性进行设置,MSComm控件共有27个属性,这里只介绍其中几个常用属性:CommPort:设置并回通讯端口号,缺省为COM4。Settings:以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。PortOpen:设置并返回通讯端口的状态,也可以打开和关闭端口。Input:从接收缓冲区返回和删除字符。Output:向发送缓冲区写一个字符串。InputLen:设置每次Input读入的字符个数,缺省值为0,表明读取接收缓冲区中的全部内容。InBufferCount:返回接收缓冲区中已接收到的字符数,将其置0可以清除接收缓冲区。InputMode:定义Input属性获取数据的方式(为0:文本方式;为1:二进制方式)。RThreshold和SThreshold:表示在OnComm事件发生之前,接收缓冲区或发送缓冲区中可以接收的字符数。四、具体设计截面图1、建立应用工程启动VC++6.0,创建一个基于对话框的MFC应用程序项目,选择Project菜单下AddtoProject子菜单中的ComponentsandControls选项,在弹出的对话框中双击RegisteredActiveXControls项,则所有注册过的ActiveX控件出现在列表框中。选择MicrosoftCommunicationsControlversion6.0,单击insert按钮即可将通信控件插入该工程。添加该控件到对话框中,设置控件ID号为IDC_MSCOMM.2、添加界面控件将对话框中的按钮“取消”删除,将“确定”按钮改为“退出”。在对话框中添加适当的界面控件。本实验中需添加的标注用的静态控件、用于选择串口和设置波特率的组合框分别设置控件ID号为-3-IDC_COMBO_SELECT和IDC_COMBO_BTLSET、添加控制开始发送/接收按钮控件并设置控件ID号为IDC_BUTTON_START,添加用于输入发送数据和输出接收数据的编辑框并设置控件ID号为IDC_EDIT_SEND和IDC_EDIT_RECEVE,同时为其设置各种属性。添加完后如下图3、映射控件通用消息(1)打开MFCClassWizard对话框,单击MemberValuable为相应控件添加变量。添加变量名和类型如下表:控件ID号变量名变量类似IDC_EDIT_RECEVECStringm_strReceiveIDC_EDIT_SENDCStringm_strSendIDC_MSCOMMCMSCommm_MScommIDC_PORTintm_nPort如下图:-4-4、为对应控件添加代码(1)为按钮IDC_BUTTON_OPEN添加单击响应函数voidCMyDlg::OnButtonOpen();函数代码如下:voidCMyDlg::OnButtonOpen(){//TODO:Addyourcontrolnotificationhandlercodehereif(m_MSComm.GetPortOpen()){AfxMessageBox(_T(亲,请先关闭串口!));return;}UpdateData(TRUE);if(m_nPort==-1){AfxMessageBox(_T(亲,请选择串口!));return;}m_MSComm.SetCommPort(m_nPort);//选择comm_MSComm.SetInBufferSize(1024);//设置输入缓冲区的大小m_MSComm.SetOutBufferSize(1024);//设置输出缓冲区的大小m_MSComm.SetInputLen(0);//设置当前接收区数据长度为0m_MSComm.SetInputMode(1);//1:表示以二进制方式检取数据m_MSComm.SetRThreshold(1);/*接收缓冲区有1个及1个以上字符时,将引发接收数据的Oncomm事件*/-5-m_MSComm.SetPortOpen(TRUE);//打开串口if(m_MSComm.GetPortOpen()){GetDlgItem(IDC_BUTTON_OPEN)-EnableWindow(FALSE);GetDlgItem(IDC_BUTTON_CLOSE)-EnableWindow(TRUE);}else{m_MSComm.SetOutBufferCount(0);CStringstrInfo=_T();strInfo.Format(_T(啊哦!打开串口COM%d失败!),m_nPort);AfxMessageBox(strInfo);GetDlgItem(IDC_BUTTON_OPEN)-EnableWindow(TRUE);GetDlgItem(IDC_BUTTON_CLOSE)-EnableWindow(FALSE);}}(2)为按钮IDC_BUTTON_SEND添加单击响应函数voidCMyDlg::OnButtonSend();函数代码如下:voidCMyDlg::OnButtonSend(){//TODO:Addyourcontrolnotificationhandlercodehereif(!m_MSComm.GetPortOpen()){AfxMessageBox(_T(亲,请先打开串口!));return;}UpdateData(TRUE);//读取编辑框内容intnSendLength=m_strSend.GetLength();//要发送的字符串送字符数组CByteArrayByteArray;ByteArray.RemoveAll();ByteArray.SetSize(nSendLength);for(inti=0;inSendLength;i++)ByteArray.SetAt(i,m_strSend[i]);//将字符数组型m_MSComm.SetOutput(COleVariant(ByteArray));//发送数据}(3)为按钮IDC_BUTTON_CLOSE添加单击响应函voidCMyDlg::OnButtonClose();函数代码如下:voidCMyDlg::OnButtonClose(){//TODO:Addyourcontrolnotificationhandlercodehereif(!m_MSComm.GetPortOpen()){AfxMessageBox(_T(亲,请先打开串口!));return;-6-}m_MSComm.SetPortOpen(FALSE);GetDlgItem(IDC_BUTTON_OPEN)-EnableWindow(TRUE);GetDlgItem(IDC_BUTTON_CLOSE)-EnableWindow(FALSE);}(4)为组合框添加初始化函数voidCMyDlg::OnSelchangeBps();编辑加入代码如下:voidCMyDlg::OnSelchangeBps(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(true);intnlndex=m_bps.GetCurSel();a=nlndex;switch(nlndex){case0:m_MSComm.SetSettings(19200,n,8,1);break;case1:m_MSComm.SetSettings(14400,n,8,1);break;case2:m_MSComm.SetSettings(9600,n,8,1);break;case3:m_MSComm.SetSettings(4800,n,8,1);break;default:break;}/*参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件*/UpdateData(false);}(5)为IDC_MSCOMM添加消息映射函数voidCMyDlg::OnOnCommMscomm()以便当接收缓冲区有数据时做相应处理。添加代码如下:voidCMyDlg::OnOnCo

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功