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

📄 readkey.cpp

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

#include "stdafx.h"
#include "pctest.h"
#include "readkey.h"
#include "adc.h"
#include "address.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// Creadkey dialog
extern  PCHAR mDynVxDName ;

Creadkey::Creadkey(CWnd* pParent /*=NULL*/)
	: CDialog(Creadkey::IDD, pParent)
{
	//{{AFX_DATA_INIT(Creadkey)
	m_char = _T("");
	//}}AFX_DATA_INIT
	nRet=NULL;
	m_display=TRUE;
	m_key_number=-1;
	m_display_bit=0;
	m_key=-1;
		hDevice=hDevice1=0;
}


void Creadkey::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(Creadkey)
	DDX_Control(pDX, IDC_BUTTON16, m_b16);
	DDX_Control(pDX, IDC_BUTTON15, m_b15);
	DDX_Control(pDX, IDC_BUTTON14, m_b14);
	DDX_Control(pDX, IDC_BUTTON13, m_b13);
	DDX_Control(pDX, IDC_BUTTON12, m_b12);
	DDX_Control(pDX, IDC_BUTTON11, m_b11);
	DDX_Control(pDX, IDC_BUTTON10, m_b10);
	DDX_Control(pDX, IDC_BUTTON9, m_b9);
	DDX_Control(pDX, IDC_BUTTON8, m_b8);
	DDX_Control(pDX, IDC_BUTTON7, m_b7);
	DDX_Control(pDX, IDC_BUTTON6, m_b6);
	DDX_Control(pDX, IDC_BUTTON5, m_b5);
	DDX_Control(pDX, IDC_BUTTON4, m_b4);
	DDX_Control(pDX, IDC_BUTTON3, m_b3);
	DDX_Control(pDX, IDC_BUTTON2, m_b2);
	DDX_Control(pDX, IDC_BUTTON1, m_b1);
	DDX_Text(pDX, IDC_EDIT1, m_char);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(Creadkey, CDialog)
	//{{AFX_MSG_MAP(Creadkey)
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_USER+0x100,Zonebutton)
	ON_MESSAGE(WM_USER+0x101,Onebutton)
	ON_MESSAGE(WM_USER+0x102,Twobutton)
	ON_MESSAGE(WM_USER+0x103,Threebutton)
	ON_MESSAGE(WM_USER+0x104,Fourbutton)
	ON_MESSAGE(WM_USER+0x105,Fivebutton)
	ON_MESSAGE(WM_USER+0x106,Sixbutton)
	ON_MESSAGE(WM_USER+0x107,Sevenbutton)
	ON_MESSAGE(WM_USER+0x108,Eightbutton)
	ON_MESSAGE(WM_USER+0x109,Ninebutton)
	ON_MESSAGE(WM_USER+0x10a,Abutton)
	ON_MESSAGE(WM_USER+0x10b,Bbutton)
	ON_MESSAGE(WM_USER+0x10c,Cbutton)
	ON_MESSAGE(WM_USER+0x10d,Dbutton)
	ON_MESSAGE(WM_USER+0x10e,Ebutton)
	ON_MESSAGE(WM_USER+0x10f,Fbutton)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Creadkey message handlers
void Creadkey::OnCancel()
{CDialog::OnCancel();
}
void Creadkey:: Zonebutton(WPARAM wparam,LPARAM lParam)
{
	m_b1.SendMessage(BM_SETSTATE,1,0);
	Sleep(50);
	m_b1.SendMessage(BM_SETSTATE,0,0);
	m_char="0";
	UpdateData(FALSE);
}
void Creadkey:: Onebutton(WPARAM wparam,LPARAM lParam)
{
	m_b2.SendMessage(BM_SETSTATE,1,0);
	Sleep(50);
	m_b2.SendMessage(BM_SETSTATE,0,0);
	m_char="1";
	UpdateData(FALSE);
}

void Creadkey:: Twobutton(WPARAM wparam,LPARAM lParam)
{
	m_b3.SendMessage(BM_SETSTATE,1,0);
	Sleep(50);
	m_b3.SendMessage(BM_SETSTATE,0,0);
	m_char="2";
	UpdateData(FALSE);
}
void Creadkey::Fourbutton(WPARAM wparam,LPARAM lParam)
{
	m_b5.SendMessage(BM_SETSTATE,1,0);
	Sleep(50);
	m_b5.SendMessage(BM_SETSTATE,0,0);
	m_char="4";
	UpdateData(FALSE);
}
void Creadkey:: Fivebutton(WPARAM wparam,LPARAM lParam)
{
	m_b6.SendMessage(BM_SETSTATE,1,0);
	Sleep(50);
	m_b6.SendMessage(BM_SETSTATE,0,0);
	m_char="5";
	UpdateData(FALSE);
}
void Creadkey:: Sixbutton(WPARAM wparam,LPARAM lParam)
{
	m_b7.SendMessage(BM_SETSTATE,1,0);
	Sleep(50);
	m_b7.SendMessage(BM_SETSTATE,0,0);
	m_char="6";
	UpdateData(FALSE);
}
void Creadkey:: Sevenbutton(WPARAM wparam,LPARAM lParam)
{
	m_b8.SendMessage(BM_SETSTATE,1,0);
	Sleep(50);
	m_b8.SendMessage(BM_SETSTATE,0,0);
	m_char="7";
	UpdateData(FALSE);
}
void Creadkey:: Eightbutton(WPARAM wparam,LPARAM lParam)
{
	m_b9.SendMessage(BM_SETSTATE,1,0);
	Sleep(50);
	m_b9.SendMessage(BM_SETSTATE,0,0);
	m_char="8";
	UpdateData(FALSE);
}
void Creadkey:: Threebutton(WPARAM wparam,LPARAM lParam)
{
	m_b4.SendMessage(BM_SETSTATE,1,0);
	Sleep(50);
	m_b4.SendMessage(BM_SETSTATE,0,0);
	m_char="3";
	UpdateData(FALSE);
}
void Creadkey:: Ninebutton(WPARAM wparam,LPARAM lParam)
{
	m_b10.SendMessage(BM_SETSTATE,1,0);
	Sleep(50);
	m_b10.SendMessage(BM_SETSTATE,0,0);
	m_char="9";
	UpdateData(FALSE);
}
void Creadkey:: Abutton(WPARAM wparam,LPARAM lParam)
{
	m_b11.SendMessage(BM_SETSTATE,1,0);
	Sleep(50);
	m_b11.SendMessage(BM_SETSTATE,0,0);
	m_char="A";
	UpdateData(FALSE);
}
void Creadkey:: Bbutton(WPARAM wparam,LPARAM lParam)
{
	m_b12.SendMessage(BM_SETSTATE,1,0);
	Sleep(50);
	m_b12.SendMessage(BM_SETSTATE,0,0);
	m_char="B";
	UpdateData(FALSE);
}
void Creadkey:: Cbutton(WPARAM wparam,LPARAM lParam)
{
	m_b13.SendMessage(BM_SETSTATE,1,0);
	Sleep(50);
	m_b13.SendMessage(BM_SETSTATE,0,0);
	m_char="C";
	UpdateData(FALSE);
}
void Creadkey:: Dbutton(WPARAM wparam,LPARAM lParam)
{
	m_b14.SendMessage(BM_SETSTATE,1,0);
	Sleep(50);
	m_b14.SendMessage(BM_SETSTATE,0,0);
	m_char="D";
	UpdateData(FALSE);
}
void Creadkey:: Ebutton(WPARAM wparam,LPARAM lParam)
{
	m_b15.SendMessage(BM_SETSTATE,1,0);
	Sleep(50);
	m_b15.SendMessage(BM_SETSTATE,0,0);
	m_char="E";
	UpdateData(FALSE);
}
void Creadkey:: Fbutton(WPARAM wparam,LPARAM lParam)
{
	m_b16.SendMessage(BM_SETSTATE,1,0);
	Sleep(50);
	m_b16.SendMessage(BM_SETSTATE,0,0);
	m_char="F";
	UpdateData(FALSE);
}

BOOL Creadkey::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_edit.SubclassDlgItem(IDC_EDIT1, this );
	COLORREF bk = RGB(0, 0, 0);
	 m_edit.bkColor( bk );                                           
	 m_edit.textColor( RGB(255,0,0) );
	  m_edit.setFont( 80 );
	if(hDevice==NULL)
	{
	hDevice = CreateFile(mDynVxDName, 0,0,0,
                        CREATE_NEW, 
                        FILE_FLAG_DELETE_ON_CLOSE,
                        0);
	if (hDevice == INVALID_HANDLE_VALUE)
	{
		AfxMessageBox("请检查板卡和驱动程序");
		CDialog::OnCancel();
		return FALSE;
	}
		W_AD=(Write_AD*)malloc(sizeof(Write_AD));
	W_AD->Address=IC_8255_type;
	W_AD->Data=0x81;
           //C 端口 上部out ,last in,A in
	BOOL status =  DeviceIoControl(
					hDevice, 
					IOCTL_IOW,
					W_AD, 
					sizeof(W_AD)+1, 
					NULL, 
					0,
					&nRet, 
 					NULL);
		W_AD->Data=0x0ff;
		W_AD->Address=IC_8255_A;
DeviceIoControl(
					hDevice, 
					IOCTL_IOW,
					W_AD, 
					sizeof(W_AD)+1, 
					NULL, 
					0,
					&nRet, 
 					NULL);
	SetTimer(1,50,NULL);
	}
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL Creadkey::Readkey_number()
{
BYTE	    m_a=0x10;
		         m_a=WRIO(&m_a);
		        BYTE m_b=m_a;
			m_b=m_b&0x0f;
			if(m_b!=0)
			{
				for(int x=0;x<10;x++)
				{
					m_b=m_b>>1;
					if(m_b==0)
					{
                     m_key_number=x;
					 x=11;
					}
				}
			 Setdiaplay_time();	
		   return TRUE;
			}
		m_a=0x20;
		m_a=WRIO(&m_a);
			 m_b=m_a;
			 		m_b=m_b&0x0f;
			if(m_b!=0)
			{
				for(int x=0;x<10;x++)
				{
					m_b=m_b>>1;
					if(m_b==0)
					{
                     m_key_number=x+4;
					 x=11;
					}
				}
			 Setdiaplay_time();	
		   return TRUE;
			}
	
            m_a=0x40;
		m_a=WRIO(&m_a);
			 m_b=m_a;
			m_b=m_b&0x0f;
			if(m_b!=0)
			{
				for(int x=0;x<10;x++)
				{
					m_b=m_b>>1;
					if(m_b==0)
					{
                     m_key_number=x+8;
					 x=11;
					}
				}
			 Setdiaplay_time();	
		   return TRUE;
			}
            m_a=0x80;
		    m_a=WRIO(&m_a);
			m_b=m_a;
			m_b=m_b&0x0f;
			if(m_b!=0)
			{
				for(int x=0;x<10;x++)
				{
					m_b=m_b>>1;
					if(m_b==0)
					{
                     m_key_number=x+12;
					 x=11;
					}
				}
			 Setdiaplay_time();	
		   return TRUE;
			}
      return FALSE;
}

BYTE Creadkey::WRIO(PBYTE x)
{
BYTE  m_byte;
	W_AD->Address =IC_8255_C;
	W_AD->Data=*x;
	DeviceIoControl(
					hDevice, 
					IOCTL_IOW,
					W_AD, 
					sizeof(W_AD)+1, 
					NULL, 
					0,
					&nRet, 
 					NULL);
	ULONG	OffSet=IC_8255_C; //地址
	BOOL status =  DeviceIoControl(
					hDevice, 
					IOCTL_IOR,
					&OffSet, 
					sizeof(ULONG), 
					&m_byte, 
					0, 
					&nRet, 
 					NULL);
	return m_byte;

}

void Creadkey::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	switch(nIDEvent)
	{
	case 1:
		{
	if(Readkey_number()==TRUE)
	{
		Handle_key();
	}
		}break;
	case 2:
		m_display_bit+=1;
		if(m_display_bit>4)
		{
			m_display_bit=1;
		}
		DisplayLED_bit(m_display_bit);
		break;
	}
	CDialog::OnTimer(nIDEvent);
}

void Creadkey::Handle_key()
{
  SendMessage(WM_USER+0x100+m_key_number,0,0);

}

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





void Creadkey::Setdiaplay_time()
{
     m_display=FALSE;
	 SetTimer(2,10,NULL);
}

void Creadkey::DisplayLED_bit(int x)
{
	BYTE m_a=0x08;
     m_a<<=x;
	W_AD->Address =IC_8255_B;
	W_AD->Data=m_a;
	DeviceIoControl(
					hDevice, 
					IOCTL_IOW,
					W_AD, 
					sizeof(W_AD)+1, 
					NULL, 
					0,
					&nRet, 
 					NULL);
}


⌨️ 快捷键说明

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