⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc2005dlg.cpp

📁 基于S3C2440的3AD采集程序
💻 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 + -