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