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

📄 keyled.cpp

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

#include "stdafx.h"
#include "pctest.h"
#include "keyled.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 ;
/////////////////////////////////////////////////////////////////////////////
// Ckeyled dialog

Ckeyled::Ckeyled(CWnd* pParent /*=NULL*/)
	: CDialog(Ckeyled::IDD, pParent)
{
	//{{AFX_DATA_INIT(Ckeyled)
	m_way = -1;
	//}}AFX_DATA_INIT
//	int x;
    m_b=TRUE;
	m_d=0;
	m_one=TRUE;
	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[5].LoadBitmaps(IDB_BITMAP1,IDB_BITMAP2))
	{
		TRACE0("Failed to load bitmaps for buttons\n");
	}
		m_LEDbit=0;
}

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

BEGIN_MESSAGE_MAP(Ckeyled, CDialog)
	//{{AFX_MSG_MAP(Ckeyled)
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Ckeyled message handlers
void Ckeyled::OnCancel()
{CDialog::OnCancel();
}
BOOL Ckeyled::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[5].SubclassDlgItem(IDC_BUTTON8, this));
	b[5].SizeToContent();
	if(hDevice==NULL)
	{
	    hDevice = CreateFile(mDynVxDName ,
					  GENERIC_READ | GENERIC_WRITE,
					  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_8255_type;
    DeviceIoControl(
					hDevice, 
					IOCTL_IOW,
					W_AD, 
					sizeof(W_AD)+1, 
					NULL, 
					0,
					&nRet, 
 					NULL);
    W_AD->Data=0xff;
    W_AD->Address=IC_8255_A;
    DeviceIoControl(
					hDevice, 
					IOCTL_IOW,
					W_AD, 
					sizeof(W_AD)+1, 
					NULL, 
					0,
					&nRet, 
 					NULL);
	SetTimer(1,200,NULL);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void Ckeyled::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	 BYTE data;
		BYTE OffSet=IC_8255_B;
		BOOL status = DeviceIoControl(
									hDevice, 
									IOCTL_IOR,
									&OffSet, 
									sizeof(BYTE), 
									&data, 
									0, 
									&nRet, 
 									NULL);
	 data=data&0xc0;
	 if(data!=m_d)
	 {
	 switch(data)
	 {
	 case 0x80:
		 m_way=0;
		 m_LEDbit=0;
		 m_LEDbit+=1;
		
			 Handleloop1(m_LEDbit);
		 break;
	 case 0xc0:
		 m_way=1;
		 m_LEDbit=8;
		 Handleloop1(m_LEDbit);
		 m_LEDbit=8;
		 break;
	 case 0x40:
		 m_way=2;
           HandleLoop2(TRUE);
		 break;
	 case 0x00:
		 m_way=3;
		 m_LEDbit=1;
		 Handleloop3(m_LEDbit);
		 break;
		 
	 }
	 UpdateData(FALSE);
	 m_d=data;
	 }else{
		 if(m_one==TRUE)
		 {
			 m_one=FALSE;
			 switch(data)
	 {
	 case 0x80:
		 m_way=0;
		 m_LEDbit=0;
		 m_LEDbit+=1;
		
			 Handleloop1(m_LEDbit);
		 break;
	 case 0xc0:
		 m_way=1;
		 m_LEDbit=8;
		 Handleloop1(m_LEDbit);
		 m_LEDbit=8;
		 break;
	 case 0x40:
		 m_way=2;
           HandleLoop2(TRUE);
		 break;
	 case 0x00:
		 m_way=3;
		 m_LEDbit=1;
		 Handleloop3(m_LEDbit);
		 break;
		 
	 }
			 UpdateData(FALSE);
		 }
		 UpdateData(TRUE);
		 
		 switch(m_way)
		 {
		 case 0:
			 m_LEDbit+=1;
			 if(m_LEDbit>8)
			 {
				 m_LEDbit=1;
			 }
			 Handleloop1(m_LEDbit);
			 break;
		 case 1:
			 m_LEDbit-=1;
			 if(m_LEDbit==0)
			 {
				 m_LEDbit=8;
			 }
			 Handleloop1(m_LEDbit);
			 break;
		 case 2:
			 m_b=!m_b;
			 HandleLoop2(m_b);
			 break;
		 case 3:
			 m_LEDbit+=1;
			 if(m_LEDbit>4)
			 {
				 m_LEDbit=1;
			 }
			 Handleloop3(m_LEDbit);
			 break;
		 }
	 }
	CDialog::OnTimer(nIDEvent);
}

void Ckeyled::Handleloop1(int m_a)
{
	
	for(x=0;x>8;x++)
	{
		if(x==(m_a-1))
		{
			b[x].SetState(2);
		}else{
          b[x].SetState(0);
		}
	}
		switch(m_a)
	{
	case 1:
		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 (0);
		Writedate(0xfe);
		break;
	case 2:
		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(0);
		b[7].SetState (0);
		Writedate(0xfd);
		break;
	case 3:
		b[0].SetState(0);
		b[1].SetState (0);
		b[2].SetState(2);
		b[3].SetState (0);
		b[4].SetState(0);
		b[5].SetState (0);
		b[6].SetState(0);
		b[7].SetState (0);
		Writedate(0xfb);
		break;
	case 4:
		b[0].SetState(0);
		b[1].SetState (0);
		b[2].SetState(0);
		b[3].SetState (4);
		b[4].SetState(0);
		b[5].SetState (0);
		b[6].SetState(0);
		b[7].SetState (0);
		Writedate(0xf7);
		break;
	case 5:
		b[0].SetState(0);
		b[1].SetState (0);
		b[2].SetState(0);
		b[3].SetState (0);
		b[4].SetState(2);
		b[5].SetState (0);
		b[6].SetState(0);
		b[7].SetState (0);
		Writedate(0xef);
		break;
	case 6:
		b[0].SetState(0);
		b[1].SetState (0);
		b[2].SetState(0);
		b[3].SetState (0);
		b[4].SetState(0);
		b[5].SetState (2);
		b[6].SetState(0);
		b[7].SetState (0);
		Writedate(0xdf);
		break;
	case 7:
		b[0].SetState(0);
		b[1].SetState (0);
		b[2].SetState(0);
		b[3].SetState (0);
		b[4].SetState(0);
		b[5].SetState (0);
		b[6].SetState(2);
		b[7].SetState (0);
		Writedate(0xbf);
		break;
	case 8:
		b[0].SetState(0);
		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);
		Writedate(0x7f);
		break;
	}

}

void Ckeyled::HandleLoop2(BOOL m_a)
{
	if(m_a==TRUE)
	{
		b[0].SetState(2);
		b[1].SetState (2);
		b[2].SetState(2);
		b[3].SetState (2);
		b[4].SetState(2);
		b[5].SetState (2);
		b[6].SetState(2);
		b[7].SetState (2);
		Writedate(0xff);
	}else{
		b[0].SetState(0);
		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 (0);
		Writedate(0x00);
	}

}

void Ckeyled::Handleloop3(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);
		Writedate(0xe7);
		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);
		Writedate(0xdb);
		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);
		Writedate(0xbd);
		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);
		Writedate(0x7e);
		break;
	}


}

void Ckeyled::Writedate(int m_d)
{
W_AD->Data=m_d;
    W_AD->Address=IC_8255_A;
    DeviceIoControl(
					hDevice, 
					IOCTL_IOW,
					W_AD, 
					sizeof(W_AD)+1, 
					NULL, 
					0,
					&nRet, 
 					NULL);
}



BYTE Ckeyled::GetLED_data(BYTE x)
{
	BYTE m_a=0;
	switch(x)
	{
		case 0:
		m_a=0xc0;
		break;
	case 1:
		m_a=0xf9;
		break;
	case 2:
		m_a=0xa4;
		break;
	case 3:
		m_a=0xb0;
		break;
	case 4:
		m_a=0x99;
		break;
	case 5:
		m_a=0x92;
		break;
	case 6:
		m_a=0x82;
		break;
	case 7:
		m_a=0xf8;
		break;
	case 8:
		m_a=0x80;
		break;
	case 9:
		m_a=0x98;
		break;
	case 10:
		m_a=0x88;
		break;
	case 11:
		m_a=0x83;
	  break;
	case 12:
		m_a=0xc6;
		break;
	case 13:
		m_a=0xa1;
		break;
	case 14:
		m_a=0x86;
		break;
	case 15:
		m_a=0x8e;
		break;
	}
   return m_a;
}

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

⌨️ 快捷键说明

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