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

📄 ledloop.cpp

📁 有关树WDM 驱动的编程.里面包含了许多实例,学习硬件的可以参考哦
💻 CPP
字号:
// ledloop.cpp : implementation file
//

#include "stdafx.h"
#include "pctest.h"
#include "ledloop.h"
#include "adc.h"
#include "address.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern  PCHAR mDynVxDName ;
/////////////////////////////////////////////////////////////////////////////
// Cledloop dialog


Cledloop::Cledloop(CWnd* pParent /*=NULL*/)
	: CDialog(Cledloop::IDD, pParent)
{
	//{{AFX_DATA_INIT(Cledloop)
	m_way = -1;
	//}}AFX_DATA_INIT
	hDevice=hDevice2=NULL;
	if(!b[0].LoadBitmaps(IDB_BITMAP1,IDB_BITMAP2))
	{
		TRACE0("Failed to load bitmaps for buttons\n");
	}
	if(!b[1].LoadBitmaps(IDB_BITMAP1,IDB_BITMAP2))
	{
		TRACE0("Failed to load bitmaps for buttons\n");
	}
	if(!b[2].LoadBitmaps(IDB_BITMAP1,IDB_BITMAP2))
	{
		TRACE0("Failed to load bitmaps for buttons\n");
	}
	if(!b[3].LoadBitmaps(IDB_BITMAP1,IDB_BITMAP2))
	{
		TRACE0("Failed to load bitmaps for buttons\n");
	}
	if(!b[4].LoadBitmaps(IDB_BITMAP1,IDB_BITMAP2))
	{
		TRACE0("Failed to load bitmaps for buttons\n");
	}
	if(!b[5].LoadBitmaps(IDB_BITMAP1,IDB_BITMAP2))
	{
		TRACE0("Failed to load bitmaps for buttons\n");
	}
	if(!b[6].LoadBitmaps(IDB_BITMAP1,IDB_BITMAP2))
	{
		TRACE0("Failed to load bitmaps for buttons\n");
	}
	if(!b[7].LoadBitmaps(IDB_BITMAP1,IDB_BITMAP2))
	{
		TRACE0("Failed to load bitmaps for buttons\n");
	}
	m_LEDbit=0;
}


void Cledloop::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(Cledloop)
	DDX_Radio(pDX, IDC_RADIO9, m_way);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(Cledloop, CDialog)
	//{{AFX_MSG_MAP(Cledloop)
	ON_BN_CLICKED(IDC_RADIO9, OnRadio9)
	ON_BN_CLICKED(IDC_RADIO10, OnRadio10)
	ON_BN_CLICKED(IDC_RADIO11, OnRadio11)
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Cledloop message handlers
void Cledloop::OnCancel()
{CDialog::OnCancel();
}

BOOL Cledloop::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	VERIFY(b[0].SubclassDlgItem(IDC_BUTTON1, this));
	b[0].SizeToContent();
	VERIFY(b[1].SubclassDlgItem(IDC_BUTTON2, this));
	b[1].SizeToContent();
	VERIFY(b[2].SubclassDlgItem(IDC_BUTTON3, this));
	b[2].SizeToContent();
	VERIFY(b[3].SubclassDlgItem(IDC_BUTTON4, this));
	b[3].SizeToContent();
	VERIFY(b[4].SubclassDlgItem(IDC_BUTTON5, this));
	b[4].SizeToContent();
	VERIFY(b[5].SubclassDlgItem(IDC_BUTTON6, this));
	b[5].SizeToContent();
	VERIFY(b[6].SubclassDlgItem(IDC_BUTTON7, this));
	b[6].SizeToContent();
	VERIFY(b[7].SubclassDlgItem(IDC_BUTTON8, this));
	b[7].SizeToContent();
	 if(hDevice==NULL)
	{
	    hDevice = CreateFile(mDynVxDName, 
							GENERIC_READ,
							FILE_SHARE_READ,
							NULL,
							OPEN_EXISTING,
							0,
							NULL);
	if (hDevice == INVALID_HANDLE_VALUE)
	{
		AfxMessageBox("请检查板卡和驱动程序");
		CDialog::OnCancel();
		return FALSE;
	}
    W_AD=(Write_AD*)malloc(sizeof(Write_AD));

	W_AD->Data=0;
    W_AD->Address=IC_LED;
    DeviceIoControl(
					hDevice, 
					IOCTL_IOW,
					W_AD, 
					sizeof(W_AD)+1, 
					NULL, 
					0,
					&nRet, 
 					NULL);
	 }
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void Cledloop::OnRadio9() 
{
	// TODO: Add your control notification handler code here
	KillTimer(3);
	KillTimer(2);
	m_LEDbit=0;
	UpdateData(TRUE);
	SetTimer(1,500,NULL);
}

void Cledloop::OnRadio10() 
{
	// TODO: Add your control notification handler code here
	KillTimer(1);
	KillTimer(3);
	m_LEDbit=0;
	UpdateData(TRUE);
	SetTimer(2,500,NULL);
}

void Cledloop::OnRadio11() 
{
	// TODO: Add your control notification handler code here
	KillTimer(2);
	KillTimer(1);
	m_LEDbit=0;
	UpdateData(TRUE);
	SetTimer(3,500,NULL);
}

void Cledloop::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	int m_a=0;
	switch(nIDEvent)
	{
	case 1:
		m_LEDbit+=1;
		if(m_LEDbit>8)
		{
			m_LEDbit=1;
		}
		Handleloop1(m_LEDbit);
		break;
	case 2:
		m_LEDbit+=1;
		if(m_LEDbit>8)
		{
			m_LEDbit=1;
		}
	   m_a=9-m_LEDbit;	

		Handleloop1(m_a);
		break;
	case 3:
		m_LEDbit+=1;
		if(m_LEDbit>4)
		{
			m_LEDbit=1;
		}
		Handleloop2(m_LEDbit);
		break;
	}
	CDialog::OnTimer(nIDEvent);
}

void Cledloop::Handleloop1(int m_a)
{

   BYTE data=0x01;
   data=data<<(m_a-1);
   W_AD->Data=data;
    W_AD->Address=IC_LED;
    DeviceIoControl(
					hDevice, 
					IOCTL_IOW,
					W_AD, 
					sizeof(W_AD)+1, 
					NULL, 
					0,
					&nRet, 
 					NULL);
   for(int x=0;x<8;x++)
   {
	   
	   if(x==m_a-1)
	 {
		 b[x].SetState(2);
	   }else{
     b[x].SetState(0);
	   }
	 
   }
}

void Cledloop::Handleloop2(int m_a)
{
	
	switch(m_a)
	{
	case 1:
		b[0].SetState(0);
		b[1].SetState (0);
		b[2].SetState(0);
		b[3].SetState (2);
		b[4].SetState(2);
		b[5].SetState (0);
		b[6].SetState(0);
		b[7].SetState (0);
		data=0x18;
	 	break;
	case 2:
		b[0].SetState(0);
		b[1].SetState (0);
		b[2].SetState(2);
		b[3].SetState (0);
		b[4].SetState(0);
		b[5].SetState (2);
		b[6].SetState(0);
		b[7].SetState (0);
		data=0x24;
	 	break;
	case 3:
		b[0].SetState(0);
		b[1].SetState (2);
		b[2].SetState(0);
		b[3].SetState (0);
		b[4].SetState(0);
		b[5].SetState (0);
		b[6].SetState(2);
		b[7].SetState (0);
		data=0x42;
 		break;
	case 4:
		b[0].SetState(2);
		b[1].SetState (0);
		b[2].SetState(0);
		b[3].SetState (0);
		b[4].SetState(0);
		b[5].SetState (0);
		b[6].SetState(0);
		b[7].SetState (2);
		data=0x81;
		break;
	}
W_AD->Data=data;
    W_AD->Address=IC_LED;
    DeviceIoControl(
					hDevice, 
					IOCTL_IOW,
					W_AD, 
					sizeof(W_AD)+1, 
					NULL, 
					0,
					&nRet, 
 					NULL);

}

void Cledloop::OnOK() 
{
	// TODO: Add extra validation here
W_AD->Data=0x00;
    W_AD->Address=IC_LED;
    DeviceIoControl(
					hDevice, 
					IOCTL_IOW,
					W_AD, 
					sizeof(W_AD)+1, 
					NULL, 
					0,
					&nRet, 
 					NULL);
	 KillTimer(3);
	KillTimer(2);
	KillTimer(1);
	if(hDevice!=NULL)
	{
	CloseHandle( hDevice);
	hDevice=NULL;
	}
	if(hDevice2!=NULL)
	{
	CloseHandle( hDevice2);
	hDevice2=NULL;
	}
	CDialog::OnOK();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -