2010年3月22日 星期一

四個步驟在Windows CE最簡單的LED控制程式

1.利用Visual Studio建立一個Dialog-based的專案, 專案名稱是SimpleLED, 並產生原始程式
2.修改OnInitDialog()中粗體字
BOOL CSimpleLEDDlg::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

m_hled = CreateFile(TEXT("LED1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
if(m_hled == INVALID_HANDLE_VALUE )
{
::MessageBox(NULL,L"Open LED Driver error!",NULL,MB_OK);
}
m_Value = FALSE;

return TRUE; // return TRUE unless you set the focus to a control
}
3.在對話盒上增加一個按鈕, 點選按鈕並選擇Add Event Handler,並命名為OnBnClickedLED, 選擇Add & Edit 在函式內增加藍色文字的程式
void CSimpleLEDDlg::OnBnClickedLED()
{
int m_control = 0;

if(m_Value)
{
::DeviceIoControl(m_hled, LED_OFF, &m_control, NULL, NULL, NULL, NULL, NULL);
m_LED.SetWindowTextW(L"OFF");
m_Value = FALSE;
}
else
{
::DeviceIoControl(m_hled, LED_ON, &m_control, NULL, NULL, NULL, NULL, NULL);
m_LED.SetWindowTextW(L"ON");
m_Value = TRUE;
}
}
4.最後再到CSimpleLEDDlg.h增加一些常數和變數(粗體字)
// SimpleLEDDlg.h : header file
//

#pragma once
#include "afxwin.h"
#define LED_ON 0x10
#define LED_OFF 0x11


// CSimpleLEDDlg dialog
class CSimpleLEDDlg : public CDialog
{
private:
bool m_Value;
HANDLE m_hled;

// Construction
public:
CSimpleLEDDlg(CWnd* pParent = NULL); // standard constructor

// Dialog Data
enum { IDD = IDD_SIMPLELED_DIALOG };


protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

// Implementation
protected:
HICON m_hIcon;

// Generated message map functions
virtual BOOL OnInitDialog();
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
afx_msg void OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/);
#endif
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedLED();
CButton m_LED;
};

2 則留言:

  1. ::DeviceIoControl函式說明
    http://msdn.microsoft.com/en-us/library/aa363216(VS.85).aspx
    有點不解, 有實際控制LED嗎? 是不是要搭配特定的實驗平台; 另外,第三個參數&m_control必要嗎?

    回覆刪除
  2. ::DeviceIoControl是用來控制硬體設備,可以實際控制LED,目前需配合廠商的驅動程式。第三個參數也是因廠商實作驅動時必須指定所以是必要的,指第幾顆LED。

    回覆刪除