📄 keyled.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 + -