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

📄 adt700.cpp

📁 ADT700的小程序
💻 CPP
字号:
// ADT700.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "ADT700_Impl.h"
#include "ADT700_Interface.h"

static unsigned char IOValue[3];
static CADT700_Impl *pObj;

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    return TRUE;
}


VOID CALLBACK StartDAConversion(
                        HWND hWnd, // handle of window for timer messages
                        UINT uMsg,    // WM_TIMER message
                        UINT idEvent, // timer identifier
                        DWORD dwTime  // current system time
                        )
{
	if(pObj==0)
		return;
	if(idEvent==pObj->m_nTimerID)
	{
		if(pObj->m_bBusy ==false)
			pObj->ADT700_StartConversion();
		static int nIndex;
		if(nIndex%5==0)
		{
			nIndex=0;
			if(pObj)
				pObj->ADT700_CalAllTimerFrequency ();
		}
		nIndex++;
	}
}

__declspec(dllexport) BOOL ADT700_InitCard(char *strInitValue)
{
	if(pObj==0)
		pObj=new CADT700_Impl;
	if(pObj==0)
		return FALSE;
	//装载
	HANDLE hVxD=pObj->ADT700_DevLoad();
	if(hVxD==INVALID_HANDLE_VALUE)
		return FALSE;

	return TRUE;
}

__declspec(dllexport) BOOL ADT700_ReadADData(short nLow,short nHigh,float fData[])
{
	if(pObj==0)
		return FALSE;
	if(nLow<0||nLow>nHigh||pObj==0)
		return FALSE;

	for(int i=nLow;i<nHigh+1;i++)
	{
		pObj->AverageOneData(i,fData[i-nLow]);
	}
	return TRUE;
}

__declspec(dllexport) BOOL ADT700_WriteDAData(short nChannel,int nDigitValue)
{
//	int nDigitValue=int (nVolt*4096/10);
	if(pObj==0)
		return FALSE;
	pObj->ADT700_WriteDataDA(nChannel,nDigitValue);
	return TRUE;
}

//timer generator
//ID: 0-5 counter
__declspec(dllexport) BOOL ADT700_WriteTimerData(short nID, long lDivisor)
{
//	ADT700_ClockMode(nChip,nClock,2);
	if(pObj==0)
		return FALSE;
	if(nID<0||nID>5)
		return FALSE;
	short nChip=nID/3;//+1;
	short nClock=nID%3;
    pObj->ADT700_ClockDivisor(nChip,nClock,lDivisor);
	return TRUE;
}

/*
void WriteMsg(int i,float nValue)
{
	FILE *fp;
	fp=fopen("\\test1.htm","ab+");
	if(fp==0)
		return;
	char strMsg[20];
	sprintf(strMsg,"%d:%f\r\n",i,nValue);
	fputs(strMsg,fp);
	fclose(fp);
}
*/

//counter
//ID: 0-5 counter
//reading data is frequency
__declspec(dllexport) BOOL ADT700_ReadCounterData(short nLow,short nHigh,float fData[])
{
	if(pObj==0)
		return FALSE;
	if(nLow<0||nLow>nHigh||nHigh>5)
		return FALSE;
	for(int i=nLow;i<nHigh+1;i++)
	{
		fData[i-nLow]=pObj->m_arrFrequency [i].fFrequency;
//		WriteMsg1(i,(float)pObj->m_arrFrequency [i].fFrequency );
	}
	return TRUE;
}

//prot0:0-7
//port1:8-15
//port2L:16-19
//port2H:20-23
__declspec(dllexport) BOOL ADT700_WriteIOValue(short nID,unsigned char cOn)
{
	if(pObj==0)
		return FALSE;
	if(nID<0||nID>=24)
		return FALSE;
	unsigned char nPort=nID/8;
	unsigned char nPow=nID%8;
	unsigned char Volt=IOValue[nPort];

	Volt=Volt&((int)pow(2,nPow))?1:0;
	Volt=IOValue[nPort]+pow(-1,cOn+1)*(cOn^Volt)*pow(2,nPow);

	pObj->ADT700_WriteDigitIO(nPort,Volt);
	IOValue[nPort]=Volt;
	return TRUE;
}

__declspec(dllexport) BOOL ADT700_DeInitCard()
{
	if(pObj==0)
		return FALSE;
	if(pObj->ADT700_DevClose()==FALSE)
		return FALSE;
	delete pObj;
	pObj=0;
	return TRUE;
}

__declspec(dllexport) BOOL ADT700_StartWork()
{
	if(pObj==0)
		return FALSE;
	//init board
	if(pObj->ADT700_InitBoard()==FALSE)
		return FALSE;
	//init ADCard Part
	//ADT700_ADSettings
	pObj->ADT700_ADSettings(10,UNIPOLAR);
	//ADT700_ADDAConfig
	pObj->ADT700_ADDAConfig(0,0,0,0,0);
	//select a/d conversion done as interrupt
	pObj->ADT700_SelIRQSource(0);
	//ADT700_SetChannel
	pObj->ADT700_SetChannel(0,15);
	//enable interrupt
	pObj->ADT700_EnableIRQ();
	
	//init DACard Part
//	pObj->ADT700_WriteDataDA(0,4095);
	//init Timer/Counter Part
	pObj->ADT700_ClockMode(0,0,1);
	pObj->ADT700_ClockMode(0,1,1);
	pObj->ADT700_ClockMode(0,2,1);
	pObj->ADT700_ClockMode(1,0,1);
	pObj->ADT700_ClockMode(1,1,1);
	pObj->ADT700_ClockMode(1,2,1);

	pObj->ADT700_ClockDivisor(0,0, 65535);	
    pObj->ADT700_ClockDivisor(0,1, 65535);
	pObj->ADT700_ClockDivisor(1,2, 65535);
    pObj->ADT700_ClockDivisor(1,0, 65535);
    pObj->ADT700_ClockDivisor(1,1, 65535);
    pObj->ADT700_ClockDivisor(1,2, 65535);

	//init DIO Part
	memset(IOValue,0,3*sizeof(unsigned char));
	pObj->ADT700_ConfigIOPorts(0,0,0,0);
	//all DO zero
	for(int i=0;i<24;i++)
	{
		ADT700_WriteIOValue(i,0);
	}
	for(i=0;i<4;i++)
	{
		ADT700_WriteDAData(i,0);
	}
	//setTimer
	pObj->m_nTimerID =SetTimer(0,200,1000,(TIMERPROC)StartDAConversion);
	return TRUE;
}

__declspec(dllexport) BOOL ADT700_StopWork()
{
	pObj->ADT700_ClockDivisor(0,0, 65535);	
    pObj->ADT700_ClockDivisor(0,1, 65535);
	pObj->ADT700_ClockDivisor(1,2, 65535);
    pObj->ADT700_ClockDivisor(1,0, 65535);
    pObj->ADT700_ClockDivisor(1,1, 65535);
    pObj->ADT700_ClockDivisor(1,2, 65535);

	//init DIO Part
	memset(IOValue,0,3*sizeof(unsigned char));
	pObj->ADT700_ConfigIOPorts(0,0,0,0);
	//all DO zero
	for(int i=0;i<24;i++)
	{
		ADT700_WriteIOValue(i,0);
	}
	for(i=0;i<4;i++)
	{
		ADT700_WriteDAData(i,0);
	}
	KillTimer(0,pObj->m_nTimerID);
	return TRUE;
}

⌨️ 快捷键说明

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