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

📄 lptaccess.cpp

📁 封装并口操作的并口操作的类
💻 CPP
字号:
//LPTAccess Class Cpp
#include "StdAfx.h"
#include "LPTAccess.h"

/* ----Prototypes of Inp and Outp--- */
short _stdcall Inp32(short PortAddress);
void _stdcall Out32(short PortAddress, short data);
/*--------------------------------*/

CLPTAccess::CLPTAccess()
{
	Board = 0;
}

void CLPTAccess::SelectBoard(short iBoard)
{
	Board = iBoard;
	switch (iBoard) 
	{
	case 0:
		Out32(CLPT,BOARD0);			
		break;
	case 1:
		Out32(CLPT,BOARD1);			
		break;
	default:
		break;
	}
	Sleep(100);
}

void CLPTAccess::WriteControl(short icmd)
{
	Out32(CLPT,icmd);
	Sleep(100);
}

void CLPTAccess::WriteData(short idata)
{
	Out32(DLPT,idata);
	Sleep(100);
}

void CLPTAccess::WriteData(int iCh, int iAmp)
{
	short iData;
	switch (iCh) 
	{
	case 0:
		iData = CH0;
		break;
	case 1:
		iData = CH1;
		break;
	case 2:
		iData = CH2;
		break;
	case 3:
		iData = CH3;
		break;
	case 4: 
		iData = CH4;
		break;
	case 5:
		iData = CH5;
		break;
	case 6:
		iData = CH6;
		break;
	case 7:
		iData = CH7;
		break;
	case 8: 
		iData = CH8;
		break;
	case 9:
		iData = CH9;
		break;
	case 10:
		iData = CH10;
		break;
	case 11:
		iData = CH11;
		break;
	case 12:
		iData = CH12;
		break;
	case 13:
		iData = CH13;
		break;
	case 14:
		iData = CH14;
		break;
	case 15:
		iData = CH15;
		break;		
	default:
		break;
	}
	switch (iAmp) 
	{
	case 0:
		iData |= AMP0;
		break;
	case 1:
		iData |= AMP1;
		break;
	case 2:
		iData |= AMP2;
		break;
	case 3:
		iData |= AMP3;
		break;
	case 4:
		iData |= AMP4;
		break;
	case 5:
		iData |= AMP5;
		break;
	case 6:
		iData |= AMP6;
		break;
	case 7:
		iData |= AMP7;
		break;
	default:
		break;
	}
	Out32(DLPT,iData);
}

short CLPTAccess::ReadData()
{
	return Inp32(DLPTA);
}

short CLPTAccess::ReadStatus()
{
	return Inp32(SLPT);
}


void CLPTAccess::FinishSetting()
{
	WriteControl(0xff);
	WriteData(0x00);
}

void CLPTAccess::ActiveControl()
{
	int cmd;
	switch (Board) 
	{
	case 0:
		cmd = BOARD0 | 0x02;
		break;
	case 1:
		cmd = BOARD1 | 0x02;
		break;
	default:
		break;
	}
	WriteControl(cmd);
}

void CLPTAccess::ResetDevice()
{
	WriteControl(RESET_DEVICE);
}

void CLPTAccess::SelectCycleByte(int iByte)
{
	switch (iByte)
	{
	case 0:					//低第一字节
		WriteControl(0x03);  //0x0b
		break;
	case 1:
		WriteControl(0x01);		//0x09
		break;
	case 2:
		WriteControl(0x07);		//0x0f
		break;
	case 3:					//最高字节
		WriteControl(0x05);		//0x0d
		break;
	default:
		break;
	}
}

void CLPTAccess::WriteCycle(UINT uiTimes)
{
	UINT uiValue = uiTimes * 1000;		//uiTimes单位为毫秒,频率为2MHz
	UINT uiV = ~uiValue;
	BYTE *bByte = NULL;
	for (int i=0;i<4;i++)
	{
		bByte = (BYTE*)(&uiV)+i;
		InactiveControl(*bByte);
		SelectCycleByte(i);
		WriteData(*bByte);
	}
}

void CLPTAccess::SelectWidthByte(int iByte)
{
	switch (iByte) 
	{
	case 0:
		WriteControl(0x0B);		//0X03
		break;
	case 1:
		WriteControl(0x09);		//0X01
		break;
	/*
	case 2:
		WriteControl(0xC);
		break;
	case 3:
		WriteControl(0xE);
		break;
	*/
	default:
		break;
	}
}

void CLPTAccess::WriteWidth(UINT uiWidth)
{
	UINT uiValue = uiWidth * 2;		//uiWidth单位为微秒,频率为2MHz
	UINT uiV = ~uiValue;
	BYTE *bByte = NULL;
	for (int i=0;i<2;i++)
	{
		bByte = (BYTE*)(&uiV)+i;
		InactiveControl(*bByte);
		SelectWidthByte(i);
		WriteData(*bByte);
	}	
}

void CLPTAccess::FinishWrite()
{
	WriteControl(LOCK_DEVICE);
}

void CLPTAccess::InactiveControl(short idata)
{
	WriteControl(0x0D);
	WriteData(idata);
}

⌨️ 快捷键说明

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