VC++MSComm串口接收程序 and VC上位机For51.docx
- 文档编号:2883953
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:26
- 大小:520.18KB
VC++MSComm串口接收程序 and VC上位机For51.docx
《VC++MSComm串口接收程序 and VC上位机For51.docx》由会员分享,可在线阅读,更多相关《VC++MSComm串口接收程序 and VC上位机For51.docx(26页珍藏版)》请在冰豆网上搜索。
VC++MSComm串口接收程序andVC上位机For51
VC++MSComm串口接收程序制做(原创)
2010-6-2111:
09:
25制作者济南职业学院电子工程系电气二班朱志强
参考程序:
龚建伟技术之串口调试助手源程序。
原地址:
本程序是一个简单的基于windows的程序。
学习了VC就是为了整出来个上位机软件,现在总算是有点收获了……
抄别人的程序,把接收部分的程序作出来了。
。
。
。
和大家分享一下吧,菜鸟们自己摸索着学真的是好辛苦啊…………
这个程序可以接收4×4键盘的按键号,在电脑上显示出16进制的数据。
下面是做的具体步骤:
1.新建工程
启动VC6,创建一个基于对话框的可执行工程,名为串口接收。
如图1。
图1新建工程
2.进入了窗口界面后,直接删除TODO:
那行的控件。
如图2。
图2删除控件
3.加入MSComm控件
工程添加到工程ComponentsandControls…(我用的是中文版,新手嘛,用中文版的有利于初学啊……)。
弹出如图3对话框。
图3添加MSComm控件
按照图上所选的,打开寻找MSComm控件即可。
如图4所示。
(注意:
安装的软件要是小于100MB的绿色版软件是没有这两个文件夹的,估计需要手动添加,具体的步骤我不知道,大家要是找不到的话,可以去网上找找。
或者和我一样,下载一个破解安装版的。
)
图4MSComm控件(小电话)
图5确定添加MSComm控件?
图6点击OK
添加完之后就可以在控件里找到了。
如图7:
图7MSComm控件添加完成
4.给对话框添加控件
添加的控件为一个编辑框和一个MSComm控件。
添加MSComm控件的方法是直接把它拖进编辑框里既可以了。
运行后不会显示那个小电话的图标。
添加后就如图8所示。
图8添加控件
5.设置控件的属性和添加变量。
首先是设置编辑框的属性,为多行,垂直滚动。
如图9所示。
图9设置编辑框的属性
图10编辑框效果
下面更改一下控件的名字,把编辑框的ID改为IDC_EDIT_RXDATA,如图11所示。
改动的方法是右击编辑框,选择属性。
图11更改编辑框ID
随后是添加变量,打开类向导(Ctrl+W),为编辑框添加CString变量m_strRXData,为MSComm控件(IDC_MSCOMM1)添加控制变量:
m_ctrlComm。
添加如图12所示。
图12添加变量
6.下面是我们添加函数代码的时候了。
。
。
首先是添加串口响应函数。
方法:
双击MSComm控件,弹出如图13所示的对话框。
图13添加COMM响应函数
在调出的函数编辑框中添加如下代码:
VARIANTvariant_inp;
COleSafeArraysafearray_inp;
LONGlen,k;
BYTErxdata[2048];//设置BYTE数组An8-bitintegerthatisnotsigned.
CStringstrtemp;
if(m_ctrlComm.GetCommEvent()==2)//事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_ctrlComm.GetInput();//读缓冲区
safearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize();//得到有效数据长度
for(k=0;k safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组 for(k=0;k { BYTEbt=*(char*)(rxdata+k);//字符型 strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放 m_strRXData+=strtemp;//加入接收编辑框对应字符串 } } UpdateData(FALSE);//更新编辑框内容 //**********************************注: 本代码直接转自龚建伟技术网站(代码未改动) 代码中有一行是 strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放 其中的%C是一个字符型变量,我们要的是显示16进制的数据,所以改为 strtemp.Format("02X",bt);//将字符送入临时变量strtemp存放 其他的就不用改动了。 最后的代码如图14所示。 图14串口响应函数代码 下面编译一下,应该不会有编译错误了。 但是点击 ,出现了错误。 如图15 图15编译中出现的错误1 图16定位错误 双击错误,对错误定位,结果如上图所示。 网上有人说把工程所在的文件夹里的debug文件夹下的文件都删除就可以了。 我不知道是不是我弄错了还是怎么的,就是不管用。 不过,这个错误不用管它。 直接在点击 就可以解除错误了…………呵呵,我也不大明白。 7.初始化串口 上面的没有了错误了,下面就是要初始化串口了。 。 。 现在我们在主对话框的CMyDlg: : OnInitDialog()打开串口,加入如下代码: //TODO: Addextrainitializationhere if(m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(FALSE); m_ctrlComm.SetCommPort (1);//选择com1 if(! m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(TRUE);//打开串口 else AfxMessageBox("cannotopenserialport"); m_ctrlComm.SetSettings("9600,n,8,1");//波特率9600,无校验,8个数据位,1个停止位 m_ctrlComm.SetInputModel (1);//1: 表示以二进制方式检取数据 m_ctrlComm.SetRThreshold (1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 m_ctrlComm.SetInputLen(0);//设置当前接收区数据长度为0 m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据 //*****************************代码来源同上(未作修改) 这个代码使用了几次,发现不大适合我安装的VC6,因为这个代码来自的文章是2001年发表的,现在都是2010年了。 。 。 。 呵呵,不过也可能你的不会出现这种情况。 在直接进行编译的时候,系统会提示有一个错误。 错误如图17. 图17编译中出现的错误2 出现这种错的原因是我的vc6的版本中没有使用程序设置MODE的选项。 。 。 所以只有注销掉这句话,手动设置。 方法是打开MSComm控件的属性。 如图18、19所示。 图18COMM属性1 图19COMM属性2 从图19可以看出,没有MODE项! ! ! ! ! 只能在全部里面设置了……如图20。 图20COMM属性3 这样设置完之后,那句话注销了就可以了……如图21所示。 图21修改二进制方式后编译结果 好了,现在在编译一下,没有错误了……这个小程序也可以用了。 打开之后,它自动占用COMM1口,用单片机连接comm1口,发送数据,程序运行结果如图22所示。 图22接收效果 如果函数中的%02x改为大写%02X,如图23,则效果如图24所示。 图23修改函数 图24接收效果(大写) 8.下面我就附上源程序(单片机方面)。 至于VC的,打包后会发在我的EDN博客上。 //单片机为STC89C52RC。 。 //该程序实现了,按一次按键将其对应的数值以9600波特率发送到串口上,注意用的是4X4键盘 //将JP8跳线帽联接到P1。 0 #include #include #defineucharunsignedchar #defineuintunsignedint #defineshujuP0 #definebusP1 sbitbeep=P3^4; voiddelayms(inti) { intj; for(j=0;j } voidchushi()//初始化串口 {//***晶振: 11.0592MHZ,波特率: 9600*** TMOD=0x20; SCON=0x50; TH1=0xfA; TL1=0xfA; PCON=0x80; TR1=1; EA=1; ES=0; RI=0; TI=0; } voiddisplay(uchari) { SBUF=i; while(! TI); TI=0; } voidjianpan()//键盘检测 { uchara; uchark; bus=0xff;//清P1口 bus=0xef; delayms(6000); a=bus; a=a&0x0f; if(a! =0x0f) { delayms(2000); if(a! =0x0f) { switch(a) { case0x0e: k=0x01; break; case0x0d: k=0x02; break; case0x0b: k=0x03; break; case0x07: k=0x04; break; } display(k); while(a! =0x0f) {beep=0; bus=0x0f; delayms(2000); a=bus; } } } beep=1; bus=0xdf; delayms(6000); a=bus; a=a&0x0f; if(a! =0x0f) { delayms(2000); if(a! =0x0f) { switch(a) { case0x0e: k=0x05; break; case0x0d: k=0x06; break; case0x0b: k=0x07; shuju=0x07; break; case0x07: k=0x08; break; } display(k); while(a! =0x0f) {beep=0; bus=0x0f; delayms(2000);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC+MSComm串口接收程序 and VC上位机For51 VC MSComm 串口 接收 程序 上位 For51