#做了一个串口读取数据的程序,对数据进行分类处理,一个建立windows窗口的程序,该怎么让这两个程序合并到一块,windows窗口显示串口变化的数据,
串口读取程序:
//#define _CRT_SECURE_NO_WARNINGS
//#include <stdio.h>
//#include <windows.h>
//#include <string.h>
//#include <conio.h>
//#include "tchar.h"
//int main()
//{
// HANDLE hCom1;
// hCom1 = CreateFile(_T("COM3"),//COM1口
// GENERIC_READ | GENERIC_WRITE,//允许读和写
// 0,//独占方式
// NULL,
// OPEN_EXISTING,//打开而不是创建
// 0,//同步方式
// NULL);
// if (hCom1 == (HANDLE)-1)
// {
// printf("打开COM失败!\n");
// return FALSE;
// }
// else
// {
// printf("COM打开成功!\n");
// }
// SetupComm(hCom1, 20480, 20480);//输入缓冲区和输出缓冲区的大小都是1024
// COMMTIMEOUTS TimeOuts;
// //设定读超时
// TimeOuts.ReadIntervalTimeout = 1000;
// TimeOuts.ReadTotalTimeoutMultiplier = 500;
// TimeOuts.ReadTotalTimeoutConstant = 5000;
// //设定写超时
// TimeOuts.WriteTotalTimeoutMultiplier = 500;
// TimeOuts.WriteTotalTimeoutConstant = 2000;
// SetCommTimeouts(hCom1, &TimeOuts);//设置超时
// DCB dcb1;
// GetCommState(hCom1, &dcb1);
// dcb1.BaudRate = 19200;//波特率为19200
// dcb1.ByteSize = 8;//每个字节有8位
// dcb1.Parity = NOPARITY;//无奇偶校验位
// dcb1.StopBits = TWOSTOPBITS;//两个停止位
// dcb1.fParity = FALSE;
// dcb1.fNull = FALSE;
// SetCommState(hCom1, &dcb1);
// DWORD wCount=27;//读取的字节数
// PurgeComm(hCom1, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓冲区
// /*TAOFENG_01:*/
// unsigned char str[1204]={0}/*=0x100F*/;
//
// unsigned int i = 0;
// float a = 100.0;
// float b = 10.0;
// long int mbweizhi;
// float mbweizhi1;
// float dianliu;
// short int sudu ;
// float dianya;
// long int dqweizhi;
// float dqweizhi1;
// short int zuli ;
// float ADceliang;
// short int yxzhuangtai ;
// short int guzhang;
// short int tiaoshizhi;
//
//
// while (1)
// {
//
// if (!ReadFile(hCom1, str, wCount, &wCount, NULL))
// {
// printf("读串口失败!");
// return FALSE;
// }
// else
// {
// if(str[0] == 0x5a && str[1] == 0xa5)
// {
// printf("读串口成功!\n读取数据为:\n");
// printf("第一第二个字节为:%02X% 02X\n ",str[0],str[1]);
// for(i=0;i<wCount;i++)
// {
// printf("%02X ",str[i]);
// }
// printf("\n");
// //目标位置
// mbweizhi=(str[4]*16777216+str[5]*65536+str[6]*256+str[7]);
// mbweizhi1=mbweizhi/b;
// //当前位置
// dqweizhi=(str[12]*16777216+str[13]*65536+str[14]*256+str[15]);
// dqweizhi1=dqweizhi/b;
// sudu=(str[16]*256+str[17]);//速度
// dianya=(str[18]*256+str[19])/a;//电压
// dianliu=(str[10]*256+str[11])/a;//电流
// zuli=(str[20]*256+str[21]);//阻力
// yxzhuangtai=(str[2]*256+str[3]);//运行状态
// ADceliang=(str[22]*256+str[23]);//AD
// guzhang=(str[8]*256+str[9]);//故障代码
// tiaoshizhi=(str[24]*256+str[25]);//调试值
// //if()
// //{
// printf("电机运行状态:%d \n",yxzhuangtai);//printf("电机运行状态:%02X %02X\n",str[2],str[3]);
// //}
// //if()
// //{
// printf("电机目标位置:%.2f 度\n",mbweizhi1);//printf("电机目标位置:%02X %02X \n",str[4],str[5],str[6],str[7]);
// //}
// //if()
// //{
// printf("电机故障:%d \n",yxzhuangtai);//printf("电机故障代码:%02X %02X\n",str[8],str[9]);
// //}
// printf("电机当前供电电流:%.2f A\n",dianliu+0.1);//printf("电机电流:%02X %02X\n",str[10],str[11]);
// printf("电机当前位置:%.2f 度\n",dqweizhi1);//printf("电机当前位置:%02X %02X %02X %02X\n",str[12],str[13],str[14],str[15]);
// printf("电机当前速度:%dr/min\n",sudu);//printf("电机当前速度:%02X %02X \n",str[16],str[17]);
// printf("电机当前供电电压:%.2f V\n",dianya+1);//printf("电机当前速度:%02X %02X \n",str[16],str[17]);
// printf("电机当前阻力:%d \n",zuli);//printf("电机当前遇到的阻力:%02X %02X\n",str[20],str[21]);
// printf("电机AD测量值:%.3f V\n",ADceliang);//printf("电机AD测量值:%02X %02X\n",str[22],str[23]);
// printf("电机调试值:%d \n",tiaoshizhi);//printf("电机调试值:%02X %02X\n",str[24],str[25]);
//
// }
//
// }
// }
//PurgeComm(hCom1, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓冲区
//
//}
建设窗口程序:
#define _CRT_SECURE_NO_WARNINGS 1
#include <windows.h>
#include <tchar.h>
#define IDB_ONE 3301//按键1
#define IDB_TWO 3302//2
#define IDB_THREE 3303//3
#define IDB_FOUR 3303//4
LRESULT _stdcall WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
HINSTANCE hg_app;//全局实例句柄
int _stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HWND hwnd;
WNDCLASS wndcls;//设置这个结构的不同字段
MSG msg;
/*注册窗口*/
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)COLOR_WINDOW;
wndcls.hCursor=LoadCursor(NULL,IDC_ARROW);//图标
wndcls.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WndProc;//过程函数
wndcls.lpszClassName=_T("ClassName");//ASCIIZ形式的窗口类名称的地址,每一个应用程序必须有一个窗口类,类名
wndcls.lpszMenuName=_T("MenuName");//ASCIIZ形式的窗口名称的地址。该名称会显示在标题条上
wndcls.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls);//注册这个窗口类型,wndcls
/**/
/*创建、显示窗口*/
hwnd=CreateWindow(_T("ClassName"),//窗口类名,
_T("采集窗口"),//窗口标题
WS_OVERLAPPEDWINDOW,//窗口样式
0,//距离屏幕左上角横坐标
0,//距离屏幕左上角横坐标
600,//窗口宽度
400,//窗口高度
NULL,//副窗口句柄
NULL,//菜单句柄
hInstance,//当前实例句柄
NULL);//指向一个值的指针,传递给窗口消息,一般为NULL
ShowWindow(hwnd,SW_SHOWNORMAL);//显示窗口
UpdateWindow(hwnd);//更新窗口
/*CreateWindow创建一个模板*/
/*消息循环,退出循环表示程序结束*/
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);//翻译消息
DispatchMessage(&msg);//分发消息给过程函数
}
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/
return (int)msg.wParam;
}
//*窗口过程函数*/
LRESULT _stdcall WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)//循环
{
/*case WM_COMMAND:
return DefWindowProc(hwnd, uMsg, wParam, lParam);*/
break;
case WM_CREATE:
{
//创建三个按钮
CreateWindow(L"Button", L"开始", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
35, 10, 160, 60, hwnd, (HMENU)IDB_ONE, hg_app, NULL);
CreateWindow(L"Button", L"按钮二", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
35, 80, 160, 60, hwnd, (HMENU)IDB_TWO, hg_app, NULL);
CreateWindow(L"Button", L"按钮三", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
35, 150, 160, 60, hwnd, (HMENU)IDB_THREE, hg_app, NULL);
}
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDB_ONE:
//MessageBox(hwnd, L"您点击了第一个按钮。", L"提示", MB_OK | MB_ICONINFORMATION);
SendMessage((HWND)lParam, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"正在进行");
break;
case IDB_TWO:
//MessageBox(hwnd, L"您点击了第二个按钮。", L"提示", MB_OK | MB_ICONINFORMATION);
SendMessage((HWND)lParam, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"已点击");
break;
case IDB_THREE:
//MessageBox(hwnd, L"您点击了第三个按钮。", L"提示", MB_OK | MB_ICONINFORMATION);
SendMessage((HWND)lParam, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"已点击");
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
break;
case WM_PAINT:
{
PAINTSTRUCT ps;//绘图
BeginPaint(hwnd, &ps);
SetTextColor(ps.hdc, RGB(20, 50, 255));//颜色
DrawText(ps.hdc,//输入环境的句柄
L"c",//输入的字符串
7,//统计字符串的长度
&(ps.rcPaint),//指向矩形结构RECT的指针
DT_CENTER);//指定文本水平居中显示。
EndPaint(hwnd, &ps);
}
break;
case WM_DESTROY:
PostQuitMessage(0);//关闭窗口,如果被拦截就关不了
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);//调用默认过程函数,刷新窗口
}
return 0;
}
}