ImageVerifierCode 换一换
格式:DOCX , 页数:5 ,大小:16.62KB ,
资源ID:19727994      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19727994.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VSMFC 入门编程七基于MSCOMM32OCX控件的串口编程Word文档下载推荐.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

VSMFC 入门编程七基于MSCOMM32OCX控件的串口编程Word文档下载推荐.docx

1、发送编辑框 和 接受编辑框添加通信串口控件,在对话框上右键在对话框右下角电话样子的就是串口通信控件给控件添加变量在电话图标上右击:命名如图示,点击完成 在工程中会自动生成mscomm.h 和mscomm.cpp两个文件;给两个编辑框添加成员变量添加三个按钮的事件直接双击 三个按钮 会在程序中自动添加如下函数cpp view plaincopyprint?void CCommTestDlg:OnBnClickedButtonSend() / TODO: 在此添加控件通知处理程序代码 OnBnClickedButtonOpen() / TODO:OnBnClickedButtonClose() /

2、 TODO:添加控件事件处理函数:点击添加编辑即可,在CommTestDlg.cpp中会生成函数:OnCommMscomm1() / TODO: 在此处添加消息处理程序代码 数据接收都是从这个函数处理打开串口函数实现: 在此添加控件通知处理程序代码 if(m_mscomm.get_PortOpen() m_mscomm.put_PortOpen(FALSE); m_mscomm.put_CommPort(3); /选择COM3 m_mscomm.put_InBufferSize(1024); /接收缓冲区 m_mscomm.put_OutBufferSize(1024);/发送缓冲区 m_ms

3、comm.put_InputLen(0);/设置当前接收区数据长度为0,表示全部读取 m_mscomm.put_InputMode(1);/以二进制方式读写数据 m_mscomm.put_RThreshold(1);/接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm m_mscomm.put_Settings(_T(9600,n,8,1);/波特率9600无检验位,8个数据位,1个停止位 if(!m_mscomm.get_PortOpen()/如果串口没有打开则打开 m_mscomm.put_PortOpen(TRUE);/打开串口 AfxMessageBox(_T(串口3打开成

4、功 else m_mscomm.put_OutBufferCount(0); AfxMessageBox(_T(串口3打开失败 关闭按钮实现: 在此添加控件通知处理程序代码 m_mscomm.put_PortOpen(FALSE);/关闭串口 AfxMessageBox(_T(串口 3 已关闭 发送代码实现: 在此添加控件通知处理程序代码 UpdateData(true); /读取编辑框内容 m_mscomm.put_Output(COleVariant(m_EditSend);/发送数据 m_EditSend.Empty(); /发送后清空输入框 UpdateData(false); /更新

5、编辑框内容 接受数据实现: 在此处添加消息处理程序代码 static unsigned int cnt=0; VARIANT variant_inp; COleSafeArray safearray_inp; long len,k; unsigned int data1024=0; byte rxdata1024; /设置 BYTE 数组 CString strtemp; if(m_mscomm.get_CommEvent()=2) /值为 2 表示接收缓冲区内有字符 cnt+; variant_inp=m_mscomm.get_Input(); /读缓冲区消息 safearray_inp=v

6、ariant_inp; /变量转换 len=safearray_inp.GetOneDimSize(); /得到有效的数据长度 for(k=0;k<len;k+) safearray_inp.GetElement(&k,rxdata+k); for(k=0;k+) /将数组转换为 CString 型变量 strtemp.Format(_T(%c),*(rxdata+k); m_EditReceive+=strtemp; CString temp=_T(rn); /换行 m_EditReceive+=temp; UpdateData(FALSE); /更新编辑框内容 /接收到的数据

7、存放在/byte 型数组 rxdata1024中,再进行进一步处理,此处只是/以 16 进制显示出来/说明(自己的理解):上面是基于事件驱动型的串口通信方式,感觉事件驱动与中断类似,但/绝对不是中断,每一次响应事件的时候接收缓冲区的数据的长度不是固定的。例如:我的下/位机发送了 10 个 BYTE 的数据,第一次上位机响应的时候只接收到 8 个,第二次响应时接收/到另外两个。并不是每收到一个数据就响应一次。下图是测试结果 收到的是a,b.显示的是数字码;特被注意的是这样编程并不是所有的电脑都会兼容MSCOMM32.OCX,这时候就需要我们手动的在代码里面动态的注册MSCOMM32.OCX控件,

8、函数的实现都是成APP函数开始 ,我们在APP函数的初始化函数中注册这个控件实现代码:BOOL CProgrammerApp:InitInstance() HINSTANCE h; h = :LoadLibrary(_T(MSCOMM32.OCX FARPROC pFunc = :GetProcAddress(HMODULE)h,DllRegisterServer if (pFunc=NULL) :MessageBox(NULL,_T(OCX控件加载失败!),_T(错误),MB_ICONERROR); return FALSE; pFunc(); . 略 解决不能发送oXoo 的问题 上面不能

9、实现0x00发送的原因是因为字符串本身就是以0x00默认作为结束符,所以在数据发送到0x00时候就会默认的发错 而且 大于127是负数 ,系统并不知道你是带符号还是不带符号 上面的方法系统会默认带符号 所以发送0x00或则大于127的数据就会发送错误。下面是实现的方法实现的方法是 将需要发送的内容通过二进制发送void CProgrammerDlg:TranSmitt(void) int i; unsigned short sum = 0; /计算校验和 CByteArray array; for(i=0; i& m_sendlength; i+) /计算校验和 sum += Txbuferi; sum =sum0xFFFF; Txbuferm_sendlength+ = (unsigned char)(sum&0x00FF); Txbuferm_sendlength+ = (unsigned char)(sum&0xFF00) >& 8); /存储校验和 array.RemoveAll(); /清空数组 array.SetSize(m_sendlength); /设置数组大小为帧长度 for(i=0; i+) /把待发送数据存入数组 array.SetAt(i,Txbuferi); m_mscomm.put_Output(COleVariant(array);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1