最近研究了一下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下对串口的操作以及定时器的调用的更多相关文章

  1. 在c++MFC下用PCL显示操作点云文件 MFC对话框显示操作PCL点云

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/13115873.html 第一步 下载PCL库  我的版本是1.8.1的 你都要MFC下跑PCL ...

  2. VS2010/MFC编程入门之四十四:定时器Timer

    前面一节鸡啄米讲了CTime类和CTimeSpan类的使用,本节继续讲与时间有关的定时器.定时器并不是一个类,主要考虑到,提起时间的话就不能不说定时器,所以就把它放到CTime和CTimeSpan之后 ...

  3. Linux下的串口编程及非阻塞模式

    本篇介绍了如何在linux系统下向串口发送数据.包括read的阻塞和非阻塞.以及select方法. 打开串口 在Linux系统下,打开串口是通过使用标准的文件打开函数操作的. #include < ...

  4. MFC下OpenGL入门(可以用)

    MFC下OpenGL入门 源文件 1, 建一工程文件,我这里命名为first,现在first工程里面我们没有添加任何东西,所有的东西都是MFC自动帮我们创建的. 2, 添加链接库.这一步很关键.打开菜 ...

  5. VC++6.0和VS2005在编写MFC应用程序时,操作方面的差异

    VC++6.0和VS2005在编写MFC应用程序时,操作方面的差异 一直用VC++6.0,对VS2005不太了解,下面简单的熟悉一下VS2005的一下功能,总结一下VS2005在编写MFC时候的应用. ...

  6. MFC下DLL编程(图解)

    MFC下DLL编程(图解) DLL(Dynamic Link Library,动态链接库)是微软公司为Windows和OS/2操作系统设计一种供应用程序在运行时调用的共享函数库.DLL是应用程序的一种 ...

  7. 详解linux下的串口通讯开发

    串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调 ...

  8. 具体解释linux下的串口通讯开发

    串行口是计算机一种经常使用的接口,具有连接线少.通讯简单,得到广泛的使用.经常使用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统. ...

  9. WinCE下的串口通信开发(VS2005,VB.Net,VC++)

    WinCE下的串口通信开发(VS2005,VB.Net,VC++)   WinCE下的串口通信开发 一.利用Visual Basic 开发很简单,因为有现成的控件可以直接调用 以VS2005为例,首先 ...

随机推荐

  1. 辽宁OI2016夏令营模拟T1-dis

    数值距离(dis.pas/c/cpp)题目大意我们可以对一个数 x 进行两种操作:1. 选择一个质数 y,将 x 变为 x*y2. 选择一个 x 的质因数 y,将 x 变为 x/y定义两个数 a,b ...

  2. Spring 后置处理器 PropertyPlaceholderConfigurer 类(引用外部文件)

    一.PropertyPlaceholderConfigurer类的作用 PropertyPlaceholderConfigurer 是 BeanFactory 后置处理器的实现,也是 BeanFact ...

  3. 手动新建MVC控制器和视图,以及数据显示的问题

    一,在C#.NET的MVC项目添加一个控制器,在这个控制器有一个index方法,你可以在index方法上鼠标右键选择添加视图,这可以创建一个包含index.cshtml的View视图的文件夹 < ...

  4. 复习i++和++j

    一,新建一个Default.aspx页面 在Default.aspx.cs

  5. onkeyup事件

    当用户释放键盘按钮时执行Javascript代码. 上代码: <input type="text" id="frame" onkeyup="my ...

  6. STL学习:STL库vector、string、set、map用法

    本文仅介绍了如何使用它们常用的方法. vector 1.可随机访问,可在尾部插入元素:2.内存自动管理:3.头文件#include <vector> 1.创建vector对象 一维: (1 ...

  7. Qt_DX

    #ifndef MY_FRAME__HH__ #define MY_FRAME__HH__ #include <QtGui/QWidget> struct IDirect3D9; stru ...

  8. MVC5 Entity Framework学习之创建复杂的数据模型

    目录(?)[-] 使用属性来自定义数据模型 DataType属性 StringLength属性 Column 属性 完成对Student实体的更改 Required 属性 Display 属性 Ful ...

  9. 理解php的opcode

    Opcode是一种PHP脚本编译后的中间语言,就像Java的ByteCode,或者.NET的MSL,举个例子,比如你写下了如下的PHP代码: <?php echo "Hello Wor ...

  10. 如何用Linux外接显示器或投影仪

    在Windows下使用Win+P键或者定制屏幕选项,可以让自己用多个显示器工作或者外接投影仪进行演讲.在Linux下,Gnome与KDE这样的“重量级”桌面环境同样提供了类似的功能与操作方式.但是像我 ...