📄 adc2005dlg.cpp
字号:
// ADC2005Dlg.cpp : 实现文件
//
#include "stdafx.h"
#include "ADC2005.h"
#include "ADC2005Dlg.h"
#include "adc.h"
HANDLE hFile = INVALID_HANDLE_VALUE;
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CADC2005Dlg 对话框
CADC2005Dlg::CADC2005Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CADC2005Dlg::IDD, pParent)
, m_DispAIN1(0)
, m_DispAIN2(0)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CADC2005Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_DISP_AIN1, m_DispAIN1);
DDX_Text(pDX, IDC_DISP_AIN2, m_DispAIN2);
}
BEGIN_MESSAGE_MAP(CADC2005Dlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
//}}AFX_MSG_MAP
ON_WM_TIMER()
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_CLOSE_ADC, &CADC2005Dlg::OnBnClickedCloseAdc)
ON_BN_CLICKED(IDC_OPEN_ADC, &CADC2005Dlg::OnBnClickedOpenAdc)
ON_BN_CLICKED(IDC_SAMPLE, &CADC2005Dlg::OnBnClickedSample)
END_MESSAGE_MAP()
// CADC2005Dlg 消息处理程序
BOOL CADC2005Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CADC2005Dlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
if (AfxIsDRAEnabled())
{
DRA::RelayoutDialog(
AfxGetResourceHandle(),
this->m_hWnd,
DRA::GetDisplayMode() != DRA::Portrait ?
MAKEINTRESOURCE(IDD_ADC2005_DIALOG_WIDE) :
MAKEINTRESOURCE(IDD_ADC2005_DIALOG));
}
}
#endif
void CADC2005Dlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
DWORD actlen;
BOOL ret;
BYTE channel=1;
float v1,v2;
//采样ANI1电压值
ret =:: DeviceIoControl(hFile, IOCTL_SET_ADC_CHANNEL, &channel, 1 ,NULL, 0, NULL, NULL);
if(ret != TRUE)
{
KillTimer(1);
MessageBox(_T("设置ADC通道1失败!"));
goto END;
}
ret =:: ReadFile(hFile, &m_DispAIN1,1 ,&actlen , NULL);
if(ret != TRUE)
{
KillTimer(1);
MessageBox(_T("读取ADC通道1失败!"));
goto END;
}
//采样ANI2电压值
channel = 2;
ret =:: DeviceIoControl(hFile, IOCTL_SET_ADC_CHANNEL, &channel, 1 ,NULL, 0, NULL, NULL);
if(ret != TRUE)
{
KillTimer(1);
MessageBox(_T("设置ADC通道2失败!"));
goto END;
}
ret =:: ReadFile(hFile, &m_DispAIN2, 1 ,&actlen , NULL);
if(ret != TRUE)
{
KillTimer(1);
MessageBox(_T("读取ADC通道1失败!"));
goto END;
}
v1 = (float)(m_DispAIN1)/1024; /* 转换为小数 */
v2 = (float)(m_DispAIN2)/1024; /* 转换为小数 */
m_DispAIN1 = (DWORD)(v1*3300); /* 计算出电压值 */
m_DispAIN2 = (DWORD)(v2*3300); /* 计算出电压值 */
UpdateData(FALSE); /* 更新显示 */
END:
CDialog::OnTimer(nIDEvent);
}
void CADC2005Dlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: 在此处添加消息处理程序代码
OnBnClickedCloseAdc();
}
void CADC2005Dlg::OnBnClickedCloseAdc()
{
// TODO: 在此添加控件通知处理程序代码
if(hFile!=INVALID_HANDLE_VALUE)
{
//关闭ADC驱动
CloseHandle(hFile);
hFile=INVALID_HANDLE_VALUE;
}
CButton *Key;
Key = (CButton *)GetDlgItem(IDC_SAMPLE);
if(Key->GetState() & 0x0003 == 1)
{
Key->SetCheck(0);
Key->SetWindowText(_T("开始采样")); //按标题复原
KillTimer(1); //取消定时
}
CButton *pOpenButton = (CButton *)GetDlgItem(IDC_OPEN_ADC); //取得指针控件
CButton *pCloseButton = (CButton *)GetDlgItem(IDC_CLOSE_ADC);
pOpenButton->EnableWindow( TRUE );
pCloseButton->EnableWindow( FALSE );
}
void CADC2005Dlg::OnBnClickedOpenAdc()
{
// TODO: 在此添加控件通知处理程序代码
//打开驱动
hFile = CreateFile(TEXT("ADC1:"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);
if(hFile ==INVALID_HANDLE_VALUE)
{
MessageBox(_T("打开ADC驱动失败!"));
return;
}
else
MessageBox(_T("打开ADC驱动成功!"));
CButton *pOpenButton = (CButton *) GetDlgItem(IDC_OPEN_ADC); /*取得控件指针*/
CButton *pCloseButton = (CButton *) GetDlgItem(IDC_CLOSE_ADC);
pOpenButton->EnableWindow( FALSE);
pCloseButton->EnableWindow( TRUE );
}
void CADC2005Dlg::OnBnClickedSample()
{
// TODO: 在此添加控件通知处理程序代码
CButton *Key;
Key = (CButton *)GetDlgItem( IDC_SAMPLE );
if(Key == INVALID_HANDLE_VALUE )
{
MessageBox(_T("ADC驱动未打开"));
Key->SetWindowText(_T("开始采样")); /* 按钮标题保持不变*/
Key->SetCheck(0); /* 按钮保持未按下 */
return;
}
UINT state = Key->GetState();
if((state&0x0003)==1)
{
Key->SetWindowText(_T("停止采样"));
SetTimer(1 , 20 , NULL); /* 启动定时器,进行采样 */
}
else /* 按钮弹起*/
{
Key->SetWindowText(_T("开始采样"));
KillTimer(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -