dlg_ad.c
来自「minigui PDA系统 可实现手机功能」· C语言 代码 · 共 243 行
C
243 行
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>
#include "ad/ad.h"
static HWND hwnd_ad; //AD转换窗口句柄
static BOOL STOP; //线程停止标志
static BOOL PAUSE; //线程暂停标志
//AD对话框结构体
static DLGTEMPLATE DlgAD =
{
WS_BORDER | WS_CAPTION,
WS_EX_NONE,
25, 45, 270, 150,
"数据采集",
0,
0,
8, NULL,
0
};
//AD对话框控件数组
static CTRLDATA CtrlAD [] =
{
{
"static",
WS_VISIBLE | SS_SIMPLE,
10, 50, 30, 16,
IDC_AD_WINFO,
"土壤:",
0
},
{
"static",
WS_VISIBLE | SS_SIMPLE,
40, 50, 50, 16,
IDC_AD_WATER,
"0.0",
0
},
{
"static",
WS_VISIBLE | SS_SIMPLE,
100, 50, 30, 16,
IDC_AD_AINFO,
"温度:",
0
},
{
"static",
WS_VISIBLE | SS_SIMPLE,
130, 50, 50, 16,
IDC_AD_AIR,
"0.0",
0
},
{
"static",
WS_VISIBLE | SS_SIMPLE,
190, 50, 30, 16,
IDC_AD_SINFO,
"湿度:",
0
},
{
"static",
WS_VISIBLE | SS_SIMPLE,
220, 50, 50, 16,
IDC_AD_SOIL,
"0.0",
0
},
{
"button",
WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON,
50, 80, 60, 25,
IDC_AD_SAVE,
"保存数据",
0
},
{
"button",
WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON,
150, 80, 60, 25,
IDC_AD_CANCEL,
"取消",
0
}
/* ,
{
"static",
WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON,
10, 20, 30, 16,
IDC_AD_XYINFO,
"坐标:",
0
},
{
"static",
WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON,
40, 20, 200, 16,
IDC_AD_XY,
"N 40 35' 45\" : E 60 21' 32\"",
0
}*/
};
static void* GetADData (void * arg)
{
int i;
float ad_data[3]={0.0, 0.0, 0.0};
char ptr[3][7];
usleep(1);
while(STOP == FALSE)
if(PAUSE == FALSE)
{
//三路AD数据采集,并将采集到的数据转换成字符串
for (i=0;i<3;i++)
{
ad_data[i] = ((float)GetADresult(i) * 3.3) / 1024.0;
gcvt(ad_data[i], 5, ptr[i]);
ptr[i][6] = '\0';
}
//在窗口上显示由数据转换来的字符串
SetWindowText (GetDlgItem(hwnd_ad, IDC_AD_WATER), ptr[0]);
SetWindowText (GetDlgItem(hwnd_ad, IDC_AD_AIR), ptr[1]);
SetWindowText (GetDlgItem(hwnd_ad, IDC_AD_SOIL), ptr[2]);
sleep(1);
}
}
static int SaveData(HWND hWnd, struct DATA data)
{
FILE *fp;
fp = fopen("data/ad.dat","a+");
if(!fp)
{
return (-1);
}
fwrite(&data,sizeof(struct DATA),1,fp);
fclose(fp);
return 1;
}
static int DlgADProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam)
{
struct DATA data;
char buf[7] = {'\0'};
time_t timep;
struct tm *gmt;
hwnd_ad = hDlg;
switch (message)
{
case MSG_COMMAND:
switch (wParam)
{
case IDC_AD_SAVE: //点击保存按钮时
PAUSE = TRUE;
timep = time(NULL);
gmt = gmtime(&timep);
if (MessageBox (hDlg, "是否保存采集到的数据", "确认保存", MB_YESNO | MB_ICONQUESTION) == IDYES)
{
//点击YES后,将时间和采集到的数据保存在ad.dat文件中
strcpy(data.time, asctime(gmt));
GetDlgItemText (hDlg, IDC_AD_AIR, buf, 6);
data.air = (float)atof(buf);
GetDlgItemText (hDlg, IDC_AD_WATER, buf, 6);
data.water = (float)atof(buf);
GetDlgItemText (hDlg, IDC_AD_SOIL, buf, 6);
data.soid = (float)atof(buf);
if(SaveData (hDlg, data) == -1)
{
//data.txt文件打开失败时
MessageBox (hDlg, "保存失败!!!", "错误",
MB_OK | MB_ICONEXCLAMATION);
}
else
{
//保存成功时
MessageBox (hDlg, "保存完毕", "信息",
MB_OK | MB_ICONINFORMATION);
}
}
PAUSE = FALSE;
break;
case IDC_AD_CANCEL:
STOP = TRUE;
EndDialog (hDlg, wParam);
break;
}
break;
case MSG_CLOSE:
STOP = TRUE;
EndDialog (hDlg,wParam);
break;
}
return DefaultDialogProc (hDlg, message, wParam, lParam);
}
int OpenAD (HWND hWnd)
{
pthread_t th_ad;
STOP = FALSE;
if(init_ADdevice() == -1)
{
//AD设备打开失败时,通知用户,然后返回 -1
MessageBox (hWnd, "A/D设备打开失败","错误",MB_OK | MB_ICONEXCLAMATION);
return -1;
}
DlgAD.controls = CtrlAD;
//建立数据采集线程
pthread_create (&th_ad, NULL, GetADData, 0);
//建立AD对话框
DialogBoxIndirectParam (&DlgAD, hWnd, DlgADProc, 0L);
//关闭数据采集线程
pthread_join (th_ad, NULL);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?