📄 gpiobeepdlg.cpp
字号:
// GPIOBeepDlg.cpp : implementation file
//
#include "stdafx.h"
#include "GPIOBeep.h"
#include "GPIOBeepDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CGPIOBeepDlg dialog
CGPIOBeepDlg::CGPIOBeepDlg(CWnd* pParent /*=NULL*/)
: CDialog(CGPIOBeepDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CGPIOBeepDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CGPIOBeepDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGPIOBeepDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CGPIOBeepDlg, CDialog)
//{{AFX_MSG_MAP(CGPIOBeepDlg)
ON_BN_CLICKED(IDC_OPEN_PIO1, OnOpenPio1)
ON_BN_CLICKED(IDC_CLOSE_PIO1, OnClosePio1)
ON_BN_CLICKED(IDC_BEEP_ON, OnBeepOn)
ON_BN_CLICKED(IDC_BEEP_OFF, OnBeepOff)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGPIOBeepDlg message handlers
BOOL CGPIOBeepDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CenterWindow(GetDesktopWindow()); // center to the hpc screen
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
/***************************************
实 验 代 码
****************************************/
// 包含命令码头文件
#include "gpio.h"
// 文件句柄
HANDLE hFile = INVALID_HANDLE_VALUE;
// "打开GPIO驱动" 按键单击事件代码
void CGPIOBeepDlg::OnOpenPio1()
{
BOOL ret;
BYTE pinnum = 10;
// 打开 GPIO 驱动
hFile = CreateFile(TEXT("PIO1:"), GENERIC_READ | GENERIC_WRITE, 0,
NULL, OPEN_EXISTING, 0, 0);
if (hFile == INVALID_HANDLE_VALUE)
{
MessageBox(_T("打开 GPIO 驱动失败!"));
return;
}
else
MessageBox(_T("打开 GPIO 驱动成功!"));
// 设置 GPH10 为输出口
ret = ::DeviceIoControl(hFile, IOCTL_GPH_SET_PIN_OUT, &pinnum, 1, NULL, 0, NULL, NULL);
if (ret != TRUE)
{
OnClosePio1();
MessageBox(_T("设置 GPH10 引脚输出失败!"));
return;
}
CButton *pOpenButton = (CButton*)GetDlgItem(IDC_OPEN_PIO1); /* 取得控件指针 */
CButton *pCloseButton = (CButton*)GetDlgItem(IDC_CLOSE_PIO1);
pOpenButton->EnableWindow(FALSE); /* 禁止按键 */
pCloseButton->EnableWindow(TRUE); /* 使能按键 */
}
// "关闭GPIO驱动" 按键单击事件代码
void CGPIOBeepDlg::OnClosePio1()
{
if (hFile != INVALID_HANDLE_VALUE)
{
CloseHandle(hFile);
hFile = INVALID_HANDLE_VALUE;
}
CButton *pOpenButton = (CButton*)GetDlgItem(IDC_OPEN_PIO1); /* 取得控件指针 */
CButton *pCloseButton = (CButton*)GetDlgItem(IDC_CLOSE_PIO1);
pOpenButton->EnableWindow(TRUE); /* 使能按键 */
pCloseButton->EnableWindow(FALSE); /* 禁止按键 */
}
// "蜂鸣器蜂鸣" 按键单击事件代码
void CGPIOBeepDlg::OnBeepOn()
{
BOOL ret;
BYTE pinnum = 10;
// 置 GPH10 为低电平, 蜂鸣器蜂鸣
ret = ::DeviceIoControl(hFile, IOCTL_GPH_CLR_PIN, &pinnum, 1, NULL, 0, NULL, NULL);
if (ret != TRUE)
MessageBox(_T("设置 GPH10 低电平失败!"));
}
// "禁止蜂鸣器蜂鸣" 按键单击事件代码
void CGPIOBeepDlg::OnBeepOff()
{
BOOL ret;
BYTE pinnum = 10;
// 置 GPH10 为高电平, 禁止蜂鸣器蜂鸣
ret = ::DeviceIoControl(hFile, IOCTL_GPH_SET_PIN, &pinnum, 1, NULL, 0, NULL, NULL);
if (ret != TRUE)
MessageBox(_T("设置 GPH10 高电平失败!"));
}
// 对话框关闭退出处理函数
void CGPIOBeepDlg::OnDestroy()
{
CDialog::OnDestroy();
OnClosePio1(); /* 关闭 GPIO 驱动 */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -