天嵌 ARM开发社区

 找回密码
 注册
查看: 2619|回复: 1

GPIO应用程序问题

[复制链接]
roger0502 发表于 2012-8-30 14:44:34 | 显示全部楼层 |阅读模式
GPIO_TestDlg.cpp程序是这样的:

// GPIO_TestDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "GPIO_Test.h"
#include "GPIO_TestDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#define IO_CTL_GPIO_1_ON 0x01
#define IO_CTL_GPIO_2_ON 0x02
#define IO_CTL_GPIO_3_ON 0x03
#define IO_CTL_GPIO_4_ON 0x04
#define IO_CTL_GPIO_ALL_ON 0x05
#define IO_CTL_GPIO_1_OFF 0x06
#define IO_CTL_GPIO_2_OFF 0x07
#define IO_CTL_GPIO_3_OFF 0x08
#define IO_CTL_GPIO_4_OFF 0x09
#define IO_CTL_GPIO_ALL_OFF 0x0a
// CGPIO_TestDlg 对话框
CGPIO_TestDlg::CGPIO_TestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CGPIO_TestDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CGPIO_TestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CGPIO_TestDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_LED1_ON, &CGPIO_TestDlg::OnBnClickedLed1On)
ON_BN_CLICKED(IDC_LED2_ON, &CGPIO_TestDlg::OnBnClickedLed2On)
ON_BN_CLICKED(IDC_LED3_ON, &CGPIO_TestDlg::OnBnClickedLed3On)
ON_BN_CLICKED(IDC_LED4_ON, &CGPIO_TestDlg::OnBnClickedLed4On)
ON_BN_CLICKED(IDC_ALL_ON, &CGPIO_TestDlg::OnBnClickedAllOn)
ON_BN_CLICKED(IDC_LED1_OFF, &CGPIO_TestDlg::OnBnClickedLed1Off)
ON_BN_CLICKED(IDC_LED2_OFF, &CGPIO_TestDlg::OnBnClickedLed2Off)
ON_BN_CLICKED(IDC_LED3_OFF, &CGPIO_TestDlg::OnBnClickedLed3Off)
ON_BN_CLICKED(IDC_LED4_OFF, &CGPIO_TestDlg::OnBnClickedLed4Off)
ON_BN_CLICKED(IDC_ALL_OFF, &CGPIO_TestDlg::OnBnClickedAllOff)
END_MESSAGE_MAP()

// CGPIO_TestDlg 消息处理程序
BOOL CGPIO_TestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
//  执行此操作
SetIcon(m_hIcon, TRUE);   // 设置大图标
SetIcon(m_hIcon, FALSE);  // 设置小图标
// TODO: 在此添加额外的初始化代码
gpiodriver=CreateFile(L"GIO1:",GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,NULL );

if(!gpiodriver)
  MessageBox(L"打开GPIO设备失败!");
return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CGPIO_TestDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
if (AfxIsDRAEnabled())
{
  DRA::RelayoutDialog(
   AfxGetResourceHandle(),
   this->m_hWnd,
   DRA::GetDisplayMode() != DRA::Portrait ?
   MAKEINTRESOURCE(IDD_GPIO_TEST_DIALOG_WIDE) :
   MAKEINTRESOURCE(IDD_GPIO_TEST_DIALOG));
}
}
#endif

void CGPIO_TestDlg::OnBnClickedLed1On()
{
// TODO: 在此添加控件通知处理程序代码
CDC *pDC = new CClientDC(this);
CBrush brush;
DeviceIoControl(gpiodriver,IO_CTL_GPIO_1_ON, NULL,0,NULL,0,NULL,NULL);
//下面绘制一个圆来表示灯亮和灭。
brush.CreateSolidBrush(RGB(255,0,0));
CBrush *pOldBrush = pDC->SelectObject(&brush);
pDC->Ellipse(105,10,117,22);
pDC->SelectObject(pOldBrush);
delete pDC;
}
void CGPIO_TestDlg::OnBnClickedLed2On()
{
// TODO: 在此添加控件通知处理程序代码
CDC *pDC = new CClientDC(this);
CBrush brush;
DeviceIoControl(gpiodriver,IO_CTL_GPIO_2_ON,NULL,0,NULL,0,NULL,NULL);
//下面绘制一个圆来表示灯亮和灭。
brush.CreateSolidBrush(RGB(255,0,0));
CBrush *pOldBrush = pDC->SelectObject(&brush);
pDC->Ellipse(105,37,117,49);
pDC->SelectObject(pOldBrush);
delete pDC;
}
void CGPIO_TestDlg::OnBnClickedLed3On()
{
// TODO: 在此添加控件通知处理程序代码
CDC *pDC = new CClientDC(this);
CBrush brush;
DeviceIoControl(gpiodriver,IO_CTL_GPIO_3_ON,NULL,0,NULL,0,NULL,NULL);
//下面绘制一个圆来表示灯亮和灭。
brush.CreateSolidBrush(RGB(255,0,0));
CBrush *pOldBrush = pDC->SelectObject(&brush);
pDC->Ellipse(105,64,117,76);
pDC->SelectObject(pOldBrush);
delete pDC;
}
void CGPIO_TestDlg::OnBnClickedLed4On()
{
// TODO: 在此添加控件通知处理程序代码
CDC *pDC = new CClientDC(this);
CBrush brush;
DeviceIoControl(gpiodriver,IO_CTL_GPIO_4_ON,NULL,0,NULL,0,NULL,NULL);
//下面绘制一个圆来表示灯亮和灭。
brush.CreateSolidBrush(RGB(255,0,0));
CBrush *pOldBrush = pDC->SelectObject(&brush);
pDC->Ellipse(105,91,117,103);
pDC->SelectObject(pOldBrush);
delete pDC;
}
void CGPIO_TestDlg::OnBnClickedAllOn()
{
// TODO: 在此添加控件通知处理程序代码
CDC *pDC = new CClientDC(this);
CBrush brush;
DeviceIoControl(gpiodriver,IO_CTL_GPIO_ALL_ON,NULL,0,NULL,0,NULL,NULL);
//下面绘制一个圆来表示灯亮和灭。
brush.CreateSolidBrush(RGB(255,0,0));
CBrush *pOldBrush = pDC->SelectObject(&brush);
pDC->Ellipse(105,10,117,22);
pDC->Ellipse(105,37,117,49);
pDC->Ellipse(105,64,117,76);
pDC->Ellipse(105,91,117,103);
pDC->SelectObject(pOldBrush);
delete pDC;
}
void CGPIO_TestDlg::OnBnClickedLed1Off()
{
// TODO: 在此添加控件通知处理程序代码
CDC *pDC = new CClientDC(this);
CBrush brush;
DeviceIoControl(gpiodriver,IO_CTL_GPIO_1_OFF,NULL,0,NULL,0,NULL,NULL);
//下面绘制一个圆来表示灯亮和灭。
brush.CreateSolidBrush(RGB(0,0,0));
CBrush *pOldBrush = pDC->SelectObject(&brush);
pDC->Ellipse(105,10,117,22);
pDC->SelectObject(pOldBrush);
delete pDC;
}
void CGPIO_TestDlg::OnBnClickedLed2Off()
{
// TODO: 在此添加控件通知处理程序代码
CDC *pDC = new CClientDC(this);
CBrush brush;
DeviceIoControl(gpiodriver,IO_CTL_GPIO_2_OFF,NULL,0,NULL,0,NULL,NULL);
//下面绘制一个圆来表示灯亮和灭。
brush.CreateSolidBrush(RGB(0,0,0));
CBrush *pOldBrush = pDC->SelectObject(&brush);
pDC->Ellipse(105,37,117,49);
pDC->SelectObject(pOldBrush);
delete pDC;
}
void CGPIO_TestDlg::OnBnClickedLed3Off()
{
// TODO: 在此添加控件通知处理程序代码
CDC *pDC = new CClientDC(this);
CBrush brush;
DeviceIoControl(gpiodriver,IO_CTL_GPIO_3_OFF,NULL,0,NULL,0,NULL,NULL);
//下面绘制一个圆来表示灯亮和灭。
brush.CreateSolidBrush(RGB(0,0,0));
CBrush *pOldBrush = pDC->SelectObject(&brush);
pDC->Ellipse(105,64,117,76);
pDC->SelectObject(pOldBrush);
delete pDC;
}
void CGPIO_TestDlg::OnBnClickedLed4Off()
{
// TODO: 在此添加控件通知处理程序代码
CDC *pDC = new CClientDC(this);
CBrush brush;
DeviceIoControl(gpiodriver,IO_CTL_GPIO_4_OFF,NULL,0,NULL,0,NULL,NULL);
//下面绘制一个圆来表示灯亮和灭。
brush.CreateSolidBrush(RGB(0,0,0));
CBrush *pOldBrush = pDC->SelectObject(&brush);
pDC->Ellipse(105,97,117,103);
pDC->SelectObject(pOldBrush);
delete pDC;
}
void CGPIO_TestDlg::OnBnClickedAllOff()
{
// TODO: 在此添加控件通知处理程序代码
CDC *pDC = new CClientDC(this);
CBrush brush;
DeviceIoControl(gpiodriver,IO_CTL_GPIO_ALL_OFF,NULL,0,NULL,0,NULL,NULL);
//下面绘制一个圆来表示灯亮和灭。
brush.CreateSolidBrush(RGB(0,0,0));
CBrush *pOldBrush = pDC->SelectObject(&brush);
pDC->Ellipse(105,10,117,22);
pDC->Ellipse(105,37,117,49);
pDC->Ellipse(105,64,117,76);
pDC->Ellipse(105,91,117,103);
pDC->SelectObject(pOldBrush);
delete pDC;
}

生产解决方案,调试后的 效果图 是这样的:

没有LED1 on,LED1 off,LED2 on,LED2 off,LED3 on,LED3 off,LED4 on,LED4 off,All on,All off 按钮界面。。。
忘解决啊



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
TQ-lkp 发表于 2012-8-31 09:19:56 | 显示全部楼层
:LMFC如果不懂的话,建议用C#来开发,我们提供了开发例程
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-4-26 01:20 , Processed in 1.046875 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表