VC菜菜鸟-创建一个即时串口通信程序
//编者注:串口接收基于多线程任务。
#include <windows.h>
#include <windowsx.h>
#include "main.h"
#include "dialogs.h"
#include "resource.h"
#include "stdio.h"
HANDLE hCom;
DWORD dwError;
DCB LpdcbCom;
OVERLAPPED m_ov;
//Compile error using LPDCB
char ScomBuf[256];
DWORD WINAPI PTRead(LPVOID pParam)
{
DWORD EV_COMM;
char str[256];
char ByteRead[256];
DWORD BytesSent;
COMSTAT ComSta;
DWORD Counter;
DWORD ErrorNum;
while(1)
{
( WaitCommEvent(hCom,&EV_COMM,&m_ov));
if( EV_COMM == EV_RXCHAR )
{
// MessageBox(NULL,"RX Event Happened...","",MB_OK);
EV_COMM = 0;
// sprintf(ByteRead,"\0");
for(int tmp=0; tmp<256; tmp++)
ByteRead[tmp]= '\0';
ClearCommError(hCom,&ErrorNum,&ComSta);
ReadFile(hCom, // Handle to COMM port
&ByteRead, // RX Buffer Pointer
ComSta.cbInQue, // Read one byte
&BytesSent, // Stores number of bytes read
&m_ov); // pointer to the m_ov structure
sprintf(ByteRead,"%s\0",ByteRead);
SetDlgItemText((HWND )(pParam),IDC_TEXT,ByteRead);//Note: HWND is a Pointer...
//MessageBox(NULL,ByteRead,"",MB_OK);
/*
sprintf(str,"%c",ByteRead);
if( ByteRead == '\0' )
{
MessageBox(NULL,str,NULL,MB_OK);
break;
}
*/
}
// MessageBox(NULL,"Sub-thread","",MB_OK);
// Sleep(1);
}
/*
while(1)
{
ReadFile(hCom, // Handle to COMM port
&ByteRead, // RX Buffer Pointer
1, // Read one byte
&BytesSent, // Stores number of bytes read
&m_ov); // pointer to the m_ov structure
sprintf(str,"%c",ByteRead);
MessageBox(hwnd,str,NULL,MB_OK);
if( ByteRead == '\0' ) break;
}
*/
}
void OpenScom()
{
DWORD Error=0;
CloseHandle(hCom); //Avoid Open Scomm too much time in the same thread.
hCom = CreateFile( "COM7",\
GENERIC_READ | GENERIC_WRITE,\
0,\
NULL,\
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,\
NULL
);
if( hCom == INVALID_HANDLE_VALUE)
{
if( 5 == GetLastError() )
{
sprintf(ScomBuf,"%s","串口已被占用");
MessageBox(NULL,ScomBuf,NULL,MB_OK);
}
ClearCommError(hCom,&Error,NULL);
// sprintf(ScomBuf,"%u",dwError);
}
GetCommState(hCom,&LpdcbCom);
BuildCommDCB("baud=9600 parity=N data=8 stop=1",&LpdcbCom);
SetCommState(hCom,&LpdcbCom);
}
void InitScom()
{
}
BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
//BEGIN MESSAGE CRACK
HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
//END MESSAGE CRACK
}
return FALSE;
}
// Main_OnInitDialog
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
// Set app icons
HICON hIcon = LoadIcon((HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE) ,MAKEINTRESOURCE(IDI_ICONAPP));
SendMessage(hwnd, WM_SETICON, TRUE, (LPARAM)hIcon);
SendMessage(hwnd, WM_SETICON, FALSE, (LPARAM)hIcon);
// SetDlgItemText(hwnd,IDC_TEXT,"jr");
CreateThread(NULL,0,PTRead,hwnd,0,NULL);
//
// Add initializing code here
//
return TRUE;
}
// Main_OnCommand
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
DWORD BytesSent = 0;
char ByteRead;
char str[255];
switch(id)
{
case IDC_SEND:
// MessageBox(hwnd,"TEST","TEST",MB_OK);
// TransmitCommChar(hCom,'J');
WriteFile(hCom, // Handle to COMM Port
"Hello,world.", // Pointer to message buffer in calling finction
12, // Length of message to send
&BytesSent, // Where to store the number of bytes sent
&m_ov ); // Overlapped structure
break;
case IDC_OK:
// MessageBox(hwnd,TEXT("You clicked OK!"),TEXT("SCOM"),MB_OK);
OpenScom();
SetCommMask(hCom,EV_RXCHAR);
// EndDialog(hwnd, id);
break;
case IDC_CANCEL:
// MessageBox(hwnd,TEXT("You clicked Cancel!"),TEXT("SCOM"),MB_OK);
CloseHandle(hCom);
// EndDialog(hwnd, id);
break;
default:break;
}
}
// Main_OnClose
void Main_OnClose(HWND hwnd)
{
EndDialog(hwnd, 0);
}
转载于:https://www.cnblogs.com/techstone/archive/2012/07/10/2661216.html
VC菜菜鸟-创建一个即时串口通信程序相关推荐
- VC菜菜鸟-创建一个简单的多线程任务
在学习编程的过程中,经典的"HelloWorld"给我最大的启示就是,一切从简,简而明理. 写一个连"白痴"都看得懂的代码,是编程的最高境界. 想要学一个知识点 ...
- VC菜菜鸟:基于CFree的HelloWorld程序
//原文链接:http://blog.csdn.net/it1988888 故事发生在很久很多久以前,有一只菜菜鸟,领略到Windows系统及其应用软件的强大,令其折服,遂生自行编写软件的念头. 网上 ...
- VC控件MSComm编写串口通信程序
转载:http://blog.csdn.net/liangzhao_jay/article/details/45647229 在众多网友的支持下,串口调试助手从2001年5月21日发布至今,短短一个月 ...
- java调用c 串口_基于C语言的java串口通信程序
目录 1.前言 2.windows 串口通信API 3.C/C++封装 动态运行库 4.JAVA-JNI java程序调用C++程序 一.前言 &ensp ;写这个博客主要是因为自己想用 ...
- qt linux 串口eventdriven,详解 Qt 串口通信程序全程图文 (1)
Qt 串口通信程序全程图文 是本文介绍的内容,在Qt中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类.我们可以去 http://sourc ...
- 创建一个Windows Service应用程序
创建一个Windows Service应用程序 下载本文代码 见资源 正是由于.NET Framework的出现,才使你能够构建出在系统重新启动时自动运行的.无人参与的(unattended)应用程序 ...
- 详解 Qt 串口通信程序全程图文 (5)
Qt 串口通信程序全程图文是本文介绍的内容,本节也是最后一节,本节主要讲述的是解决一下重要问题的说明: (下面所说的第一个程序是指第一节中写的那个程序,第二个程序是指第三节更改完后的程序,第三个程序是 ...
- 详解 Qt 串口通信程序全程图文 (4)
Qt 串口通信程序全程图文是本文介绍的内容,本文一开始先讲解对程序的改进,在文章最后将要讲解一些重要问题. 1.在窗口中加入一些组合框Combo Box,它们的名称及条目如下: 串口:portName ...
- 详解 Qt 串口通信程序全程图文 (3)
Qt 串口通信程序全程图文是本文要介绍的内容,下面的程序在第一部分中所写的程序上进行了一些改进.加入打开和关闭串口,发送数据等功能. 1.加入了"打开串口","关闭串口& ...
最新文章
- iOS 9应用开发教程之iOS 9新特性
- qt creator报错处理积累
- 文件夹目录结构导出工具及下载
- docker网络原理
- [Java基础] Java中List.remove报错UnsupportedOperationException
- voting设计模式
- JavaSE学习之IO流使用技巧
- java实现输出字符串中的数字字符
- 2000年考研英语阅读理解文章四
- Algs4-2.3.25切换到插入排序的试验
- Ubuntu服务器宕机排查记录
- 自制导纳信号发生器 [原创cnblogs.com/helesheng]
- 计算机如何做材料的应力应变曲线,常用材料应力应变曲线.xlsx
- 大数据处理与开发课程设计——纽约出租车大数据分析
- Sql面试50题 详解 持续更新
- 接入阿里云OSS--公有云分布式存储
- 于娟的忠告----生命只有一次,活着才是王道啊!!!
- 笃行杂记之Zookeeper SessionTimeOut分析
- 微信发朋友圈测试用例
- 大数据模型交易平台案例:消费贷款客户营销分析解决方案
热门文章
- 导致SEO优化排名不理想的三大因素,你踩雷了没?
- 数据通信技术_华为数据通信创新峰会在长春圆满举行
- Flutter retrofit:only “package“ and “asset“ schemes supported
- pyspark minHash LSH 查找相似度
- HBase单机环境搭建
- webvr动画函数requestAnimationFrame
- 西里尔字 - 俄罗斯
- Altium Designer 使用小结
- Oracle之数据操作__分组统计查询
- 百度前端技术学院Task20 笔记