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

📄 8255_j.cpp

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

#include "stdafx.h"
#include "pctest.h"
#include "8255_J.h"
#include "address.h"
#include "adc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern HANDLE	hDevice;
extern HANDLE	hDevice1;
extern  PCHAR DynVxDName;
extern  PCHAR IoVxDName;
/////////////////////////////////////////////////////////////////////////////
// C8255_J dialog


C8255_J::C8255_J(CWnd* pParent /*=NULL*/)
	: CDialog(C8255_J::IDD, pParent)
{
	//{{AFX_DATA_INIT(C8255_J)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	hDevice=hDevice1=NULL;
	m_n=0;
}


void C8255_J::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(C8255_J)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(C8255_J, CDialog)
	//{{AFX_MSG_MAP(C8255_J)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
	ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
	ON_BN_CLICKED(IDC_RADIO3, OnRadio3)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// C8255_J message handlers

BOOL C8255_J::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	if(hDevice1==NULL)
	{
	hDevice1 = CreateFile(DynVxDName, 0,0,0,
                        CREATE_NEW, 
                        FILE_FLAG_DELETE_ON_CLOSE,
                        0);
	if (hDevice1 == INVALID_HANDLE_VALUE)
	{
		AfxMessageBox("请检查板卡和驱动程序");
		CDialog::OnCancel();
		return FALSE;
	}
	 m_p=(pci_cfg*)malloc(sizeof(pci_cfg));
	BOOL status =  DeviceIoControl(
					hDevice1, 
			    	DIOC_PCICFG, 
					m_p, 
					0,
					NULL, 
					0, 
					NULL, 
 					NULL);
	 
	hDevice = CreateFile(IoVxDName, 0,0,0,
                        CREATE_NEW, 
                        FILE_FLAG_DELETE_ON_CLOSE,
                        0);
	if (hDevice == INVALID_HANDLE_VALUE)
	{
		AfxMessageBox("请检查板卡和驱动程序");
			CDialog::OnCancel();
		return FALSE;
	}
	}
	  BYTE data=0x80;
      BOOL status =  DeviceIoControl(
					hDevice, 
					DIOC_IO_WRITE,
					m_p, 
					IC_8255_type, 
					NULL, 
					data,
					NULL, 
 					NULL);


	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void C8255_J::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	BYTE data;
	BOOL status;
	switch(nIDEvent)
	{
	case 1:
     Handle_A_B();
   break;
   case 2:
	   Handle_AB();
	   break;
   case 3:
	   Handle_AB_BC();
	   break;
	}
	CDialog::OnTimer(nIDEvent);
}

void C8255_J::OnRadio1() 
{
	// TODO: Add your control notification handler code here
	  m_n=1;
	   SetTimer(1,100,NULL);
	   KillTimer(2);
	   KillTimer(3);
}

void C8255_J::OnRadio2() 
{
	// TODO: Add your control notification handler code here
	m_n=1;
	KillTimer(1);
	KillTimer(3);
	   SetTimer(2,100,NULL);
}

void C8255_J::OnRadio3() 
{
	// TODO: Add your control notification handler code here
	m_n=1;
	KillTimer(1);
	KillTimer(2);
	  SetTimer(3,100,NULL);
}

void C8255_J::Handle_A_B()
{	BYTE data;
	BOOL status;
	switch(m_n)
	{
	 case 1:
	   
		   m_n+=1;
	   data=0x01;
       status =  DeviceIoControl(
					hDevice, 
					DIOC_IO_WRITE,
					m_p, 
					IC_8255_A, 
					NULL, 
					data,
					NULL, 
 					NULL);
	   break;
   case 2:
	   m_n+=1;
	   data=0x02;
       status =  DeviceIoControl(
					hDevice, 
					DIOC_IO_WRITE,
					m_p, 
					IC_8255_A, 
					NULL, 
					data,
					NULL, 
 					NULL);
	   
	   break;
   case 3:
	   m_n+=1;
	   data=0x04;
       status =  DeviceIoControl(
					hDevice, 
					DIOC_IO_WRITE,
					m_p, 
					IC_8255_A, 
					NULL, 
					data,
					NULL, 
 					NULL);
	   
      break;
   case 4:
	   m_n=1;
	    data=0x08;
       status =  DeviceIoControl(
					hDevice, 
					DIOC_IO_WRITE,
					m_p, 
					IC_8255_A, 
					NULL, 
					data,
					NULL, 
 					NULL);
	   }
}

void C8255_J::Handle_AB()
{	BYTE data;
	BOOL status;
       switch(m_n)
	   {
		   case 1:
			   data=0x03;
       status =  DeviceIoControl(
					hDevice, 
					DIOC_IO_WRITE,
					m_p, 
					IC_8255_A, 
					NULL, 
					data,
					NULL, 
 					NULL);
	   m_n+=1;
			   break;
		   case 2:
			   data=0x06;
       status =  DeviceIoControl(
					hDevice, 
					DIOC_IO_WRITE,
					m_p, 
					IC_8255_A, 
					NULL, 
					data,
					NULL, 
 					NULL);
	   m_n+=1;
			   break;
		   case 3:
			   data=0x0c;
       status =  DeviceIoControl(
					hDevice, 
					DIOC_IO_WRITE,
					m_p, 
					IC_8255_A, 
					NULL, 
					data,
					NULL, 
 					NULL);
	   m_n+=1;
			   break;
		   case 4:
			   	   data=0x09;
       status =  DeviceIoControl(
					hDevice, 
					DIOC_IO_WRITE,
					m_p, 
					IC_8255_A, 
					NULL, 
					data,
					NULL, 
 					NULL);
	   m_n=1;
			   break;

	   }
}

void C8255_J::Handle_AB_BC()
{
	BYTE data;
	BOOL status;
   switch(m_n)
		   {
		   case 1:
			   m_n+=1;
			   data=0x01;
       status =  DeviceIoControl(
					hDevice, 
					DIOC_IO_WRITE,
					m_p, 
					IC_8255_A, 
					NULL, 
					data,
					NULL, 
 					NULL);
			   break;
		   case 2:
			   m_n+=1;
			   data=0x03;
       status =  DeviceIoControl(
					hDevice, 
					DIOC_IO_WRITE,
					m_p, 
					IC_8255_A, 
					NULL, 
					data,
					NULL, 
 					NULL);
			   break;
		   case 3:
			   m_n+=1;
			   data=0x02;
       status =  DeviceIoControl(
					hDevice, 
					DIOC_IO_WRITE,
					m_p, 
					IC_8255_A, 
					NULL, 
					data,
					NULL, 
 					NULL);
			   break;
		   case 4:
			   m_n+=1;
			   data=0x05;
       status =  DeviceIoControl(
					hDevice, 
					DIOC_IO_WRITE,
					m_p, 
					IC_8255_A, 
					NULL, 
					data,
					NULL, 
 					NULL);
			   break;
		   case 5:
			   m_n+=1;
			   data=0x04;
       status =  DeviceIoControl(
					hDevice, 
					DIOC_IO_WRITE,
					m_p, 
					IC_8255_A, 
					NULL, 
					data,
					NULL, 
 					NULL);
			   break;
		   case 6:
			   m_n+=1;
			   data=0x0c;
       status =  DeviceIoControl(
					hDevice, 
					DIOC_IO_WRITE,
					m_p, 
					IC_8255_A, 
					NULL, 
					data,
					NULL, 
 					NULL);
			   break;
		   case 7:
			   m_n+=1;
			   data=0x08;
       status =  DeviceIoControl(
					hDevice, 
					DIOC_IO_WRITE,
					m_p, 
					IC_8255_A, 
					NULL, 
					data,
					NULL, 
 					NULL);
	   break;
		   case 8:
			   m_n=1;
			   data=9;
           status =  DeviceIoControl(
					hDevice, 
					DIOC_IO_WRITE,
					m_p, 
					IC_8255_A, 
					NULL, 
					data,
					NULL, 
 					NULL);
			   break;
;   }
}

⌨️ 快捷键说明

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