MFC下对串口的操作以及定时器的调用
最近研究了一下MFC下对串口的操作,测试了一下对设备的读写。
1.打开串口
GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow(FALSE);
m_hComm = CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,
,
NULL,
OPEN_EXISTING,
,
NULL);
if (m_hComm == INVALID_HANDLE_VALUE)
{
TCHAR szBuf[];
wsprintf(szBuf,_T("打开COM1失败,代码:%d"),GetLastError());
return;
}
2.设置串口通讯参数
DCB dcb;
memset(&dcb,,sizeof(dcb));
if (!::GetCommState(m_hComm,&dcb))
{
return;
}
dcb.BaudRate = ;
dcb.fParity = ;
dcb.Parity = ;
dcb.ByteSize = ;
dcb.StopBits = ;
SetCommState(m_hComm,&dcb); if (!::SetupComm(m_hComm,,))
{
return;
}
3.设定超时
//设定读超时
m_CommTimeOuts.ReadIntervalTimeout=MAXDWORD;
m_CommTimeOuts.ReadTotalTimeoutMultiplier=;
m_CommTimeOuts.ReadTotalTimeoutConstant=;
//在读一次输入缓冲区的内容后读操作就立即返回,
//而不管是否读入了要求的字符。
//设定写超时
m_CommTimeOuts.WriteTotalTimeoutMultiplier=;
m_CommTimeOuts.WriteTotalTimeoutConstant=;
::SetCommTimeouts(m_hComm,&(m_CommTimeOuts)); //设置超时
::PurgeComm(m_hComm,PURGE_RXCLEAR | PURGE_TXABORT);
4.开一个线程
m_pScanThread = AfxBeginThread(ScanThreadProc,this);
5.设置定时器
快捷键Ctrl+W在MessageMaps添加消息响应
void CTestDAMDADlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
//AfxMessageBox("Begin");
switch (nIDEvent)
{
case TIMER_2:
{
//AfxMessageBox("Begin");
OnButton2v();
WriteComm(LENID,offlen);
KillTimer(TIMER_2);
SetTimer(TIMER_4,,NULL);
break;
}
case TIMER_4:
{
OnButton4v();
WriteComm(LENID,offlen);
KillTimer(TIMER_4);
SetTimer(TIMER_6,,NULL);
break;
}
case TIMER_6:
{
OnButton6v();
WriteComm(LENID,offlen);
KillTimer(TIMER_6);
SetTimer(TIMER_8,,NULL);
break;
} case TIMER_8:
{
OnButton8v();
WriteComm(LENID,offlen);
KillTimer(TIMER_8);
SetTimer(TIMER_10,,NULL);
break;
}
case TIMER_10:
{
OnButton10v();
WriteComm(LENID,offlen);
KillTimer(TIMER_10);
SetTimer(TIMER_2,,NULL);
break;
} default:
{
OnButton6v();
WriteComm(LENID,offlen);
KillTimer(TIMER_2);
SetTimer(TIMER_4,,NULL);
break;
}
}
CDialog::OnTimer(nIDEvent);
}
线程里开启定时器
dlg->SetTimer(TIMER_2,,NULL);
6.调用写串口操作
BOOL CTestDAMDADlg::WriteComm(BYTE *lpByte,DWORD dwBytes)
{
DWORD dwBytesWrite = ;
COMSTAT ComStat;
DWORD dwErrorFlags;
BOOL bWriteStat;
ClearCommError(m_hComm,&(dwErrorFlags),&(ComStat));
bWriteStat = WriteFile(m_hComm,lpByte,dwBytes,
&dwBytesWrite,NULL);
if (!bWriteStat)
{
return FALSE;
}
else
{
return TRUE;
}
}
读串口操作类似,这样就完成了定时对串口的读写操作,测试通过!
MFC下对串口的操作以及定时器的调用的更多相关文章
- 在c++MFC下用PCL显示操作点云文件 MFC对话框显示操作PCL点云
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/13115873.html 第一步 下载PCL库 我的版本是1.8.1的 你都要MFC下跑PCL ...
- VS2010/MFC编程入门之四十四:定时器Timer
前面一节鸡啄米讲了CTime类和CTimeSpan类的使用,本节继续讲与时间有关的定时器.定时器并不是一个类,主要考虑到,提起时间的话就不能不说定时器,所以就把它放到CTime和CTimeSpan之后 ...
- Linux下的串口编程及非阻塞模式
本篇介绍了如何在linux系统下向串口发送数据.包括read的阻塞和非阻塞.以及select方法. 打开串口 在Linux系统下,打开串口是通过使用标准的文件打开函数操作的. #include < ...
- MFC下OpenGL入门(可以用)
MFC下OpenGL入门 源文件 1, 建一工程文件,我这里命名为first,现在first工程里面我们没有添加任何东西,所有的东西都是MFC自动帮我们创建的. 2, 添加链接库.这一步很关键.打开菜 ...
- VC++6.0和VS2005在编写MFC应用程序时,操作方面的差异
VC++6.0和VS2005在编写MFC应用程序时,操作方面的差异 一直用VC++6.0,对VS2005不太了解,下面简单的熟悉一下VS2005的一下功能,总结一下VS2005在编写MFC时候的应用. ...
- MFC下DLL编程(图解)
MFC下DLL编程(图解) DLL(Dynamic Link Library,动态链接库)是微软公司为Windows和OS/2操作系统设计一种供应用程序在运行时调用的共享函数库.DLL是应用程序的一种 ...
- 详解linux下的串口通讯开发
串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调 ...
- 具体解释linux下的串口通讯开发
串行口是计算机一种经常使用的接口,具有连接线少.通讯简单,得到广泛的使用.经常使用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统. ...
- WinCE下的串口通信开发(VS2005,VB.Net,VC++)
WinCE下的串口通信开发(VS2005,VB.Net,VC++) WinCE下的串口通信开发 一.利用Visual Basic 开发很简单,因为有现成的控件可以直接调用 以VS2005为例,首先 ...
随机推荐
- 辽宁OI2016夏令营模拟T1-dis
数值距离(dis.pas/c/cpp)题目大意我们可以对一个数 x 进行两种操作:1. 选择一个质数 y,将 x 变为 x*y2. 选择一个 x 的质因数 y,将 x 变为 x/y定义两个数 a,b ...
- Spring 后置处理器 PropertyPlaceholderConfigurer 类(引用外部文件)
一.PropertyPlaceholderConfigurer类的作用 PropertyPlaceholderConfigurer 是 BeanFactory 后置处理器的实现,也是 BeanFact ...
- 手动新建MVC控制器和视图,以及数据显示的问题
一,在C#.NET的MVC项目添加一个控制器,在这个控制器有一个index方法,你可以在index方法上鼠标右键选择添加视图,这可以创建一个包含index.cshtml的View视图的文件夹 < ...
- 复习i++和++j
一,新建一个Default.aspx页面 在Default.aspx.cs
- onkeyup事件
当用户释放键盘按钮时执行Javascript代码. 上代码: <input type="text" id="frame" onkeyup="my ...
- STL学习:STL库vector、string、set、map用法
本文仅介绍了如何使用它们常用的方法. vector 1.可随机访问,可在尾部插入元素:2.内存自动管理:3.头文件#include <vector> 1.创建vector对象 一维: (1 ...
- Qt_DX
#ifndef MY_FRAME__HH__ #define MY_FRAME__HH__ #include <QtGui/QWidget> struct IDirect3D9; stru ...
- MVC5 Entity Framework学习之创建复杂的数据模型
目录(?)[-] 使用属性来自定义数据模型 DataType属性 StringLength属性 Column 属性 完成对Student实体的更改 Required 属性 Display 属性 Ful ...
- 理解php的opcode
Opcode是一种PHP脚本编译后的中间语言,就像Java的ByteCode,或者.NET的MSL,举个例子,比如你写下了如下的PHP代码: <?php echo "Hello Wor ...
- 如何用Linux外接显示器或投影仪
在Windows下使用Win+P键或者定制屏幕选项,可以让自己用多个显示器工作或者外接投影仪进行演讲.在Linux下,Gnome与KDE这样的“重量级”桌面环境同样提供了类似的功能与操作方式.但是像我 ...