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

📄 spi.cpp

📁 NI公司的PCI-6120四通道电压测量卡控制程序。该程序主要用VC实现对PCI-6120测量卡控制
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	}
	//CString msg2; msg2.Format("segDW= 0x%x",segDW);	MessageBox(msg2);

	SPI_Write32_New(segDW);	//Sleep(1);
	//local update
	SPI_Write32_New(0x80400000);
}

DLL_EXPORT void UpdateICArrayn_New(char* pStr) 
{
	CString tmpStr(pStr);
	tmpStr.TrimLeft();tmpStr.TrimRight();	//trim blank 
	CString tmp2;
	if(tmpStr.IsEmpty())	{AfxMessageBox("Input segs(like: 1,2,3,5)"); return;}

	int beforePos=0, currentPos=beforePos;
	CByteArray	byteArray;
	while(currentPos!=-1 && currentPos!= tmpStr.GetLength())
	{
		currentPos= tmpStr.Find(TCHAR(','),beforePos+1);
		if(currentPos==-1 )	currentPos= tmpStr.GetLength();
		if(currentPos>beforePos)	
		{
			tmp2= tmpStr.Mid(beforePos, currentPos);
			tmp2.TrimLeft(TCHAR(','));	tmp2.TrimRight(',');
			if(!tmp2.IsEmpty())	byteArray.Add((BYTE)atoi(tmp2));
		}
		beforePos=currentPos;
	}
	
	if(byteArray.GetSize()==0)	{AfxMessageBox("Input Invailable");	return;}
	DWORD	segDW=0x0;
	for(int x=0; x<byteArray.GetSize(); x++)
	{
		segDW |= GET_SEG_REG(byteArray.GetAt(x));
		//CString msg; msg.Format("byteArray[%d]= %d",x, byteArray.GetAt(x));	MessageBox(msg);
	}
	//CString msg2; msg2.Format("segDW= 0x%x",segDW);	MessageBox(msg2);

	SPI_Write32_New(segDW);	//Sleep(1);
	//local update
	SPI_Write32_New(0x80400000);
}

DLL_EXPORT void White()
{
	DWORD WHITE[]=
	{
		0xa0000000,0xa2000000,0xa4000000,0xa6000000,
		0xe0000000,0xe2000000,0xe4000000,0xe6000000
	};

	for(int i=0; i<sizeof(WHITE)/sizeof(DWORD); i++)
	{
		SPI_Write32_New(WHITE[i]);	
		//Sleep(1);
		wait_us(200);	//0.2ms
	}

	//local update
	SPI_Write32_New(0x80800000);	
}

DLL_EXPORT void Black()
{
	DWORD BLACK[]=
	{
		0xa0ffffff,0xa2ffffff,0xa4ffffff,0xa6ffffff,
		0xe0ffffff,0xe2ffffff,0xe4ffffff,0xe6ffffff
	};

	for(int i=0; i<sizeof(BLACK)/sizeof(DWORD); i++)
	{
		SPI_Write32_New(BLACK[i]);	
		//Sleep(1);
		wait_us(200);	//0.2ms
	}

	//local update
	SPI_Write32_New(0x80800000);	
}

DLL_EXPORT void BackgroundOff() 
{
	SPI_Write32_New(0xa0000000|REG_BACKGROUND_OFF);
///	Sleep(1);
	SPI_Write32_New(0x80400000);
}

DLL_EXPORT void BackgroundOn() 
{
	SPI_Write32_New(0xa0000000|REG_BACKGROUND_ON);
///	Sleep(1);
	SPI_Write32_New(0x80400000);
}

DLL_EXPORT BOOL MISO()
{
	if(((BYTE)Inp32(PORT_ADDR+1))&SPI_MISO != 0)	return(true);

	return(false);
}

DLL_EXPORT DWORD MISO_DW()
{
	DWORD	readData=0;
	readData= SPI_Read32_New();	

	return(readData);
}

DLL_EXPORT BYTE CheckBusy()
{
	SPI_Write32_New(0x80800000);	//global updata
	SPI_Write32_New(0x56000000);	//check busy cmd
	DWORD readData= SPI_Read32_New();
	BYTE busyBits= (BYTE)((readData & BUSY_BITS)>>14);
	return(busyBits);
}

DLL_EXPORT BYTE TempSense()
{
	SPI_Write32_New(0x94030000);	//enable tempreture senser and ADC
	DWORD temp= SPI_Read32_New();
	BYTE tempData= (BYTE)((temp & TEMP_BITS)>>18);
	return(tempData);
}

DLL_EXPORT void EnableTemper()
{
	SPI_Write32_New(0x94030000);	//enable tempreture senser and ADC
}
///////////////////////////////// B
DLL_EXPORT void B_PowerOn() 
{	
	DWORD PN[]=
	{
	 0xfaf1b042,0xd4d90000,0x82192100,0x84192120,
	 0x86400000,0x56000000
	};
/*
	DWORD PN2[]=
	{
	 0xd4100000,0xd4900000,0xd4d00000,0xd4d80000,
	 0x94100000,0x82192100,0x84192100,0x86400000,
	 0x88080000,0x80000000,0x80800000,0x88000000
	};
*/
	//reset
	B_CLR_RES();	
	wait_us(10000);	//10ms
	B_SET_RES();	

	//init data
	for(BYTE i=0; i<sizeof(PN)/sizeof(DWORD); i++)
		B_SPI_Write32_New(PN[i]);
}

DLL_EXPORT void B_PowerOff() 
{
	DWORD PD[]=
	{
		0x80200000,0xd4d00000,0xd4900000,0xd4100000,0xd4000000,
		0x94000000
	};
	for(BYTE i=0; i<sizeof(PD)/sizeof(DWORD); i++)
		B_SPI_Write32_New(PD[i]);

	Sleep(200);
}

DLL_EXPORT void B_UpdateIC(BYTE nSeg) 
{
	//check busy status
	//SPI_Write32(0x56000000);
	
	//set local update segment
	//set segment
	//SPI_Write32(GET_SEG_REG(nSeg));	
	B_SPI_Write32_New(GET_SEG_REG(nSeg));	

	//local update
	//SPI_Write32(0x80400000);	
	B_SPI_Write32_New(0x80400000);		
}

DLL_EXPORT void B_UpdateIC_Array(BYTE* pSegArray, BYTE nArraySize) 
{
	//check busy status
	//SPI_Write32(0x56000000);
	
	//set local update segment
	//DWORD	segCMD[4];
	DWORD   TMP=0x0;

	for(BYTE t=0; t<nArraySize; t++)
	{
	//	CString s; s.Format("segTable[%d]= %d",t, pSegArray[t]); MessageBox(s);
		//segCMD[t]= GetCommand(pSegArray[t]);
		//if(segCMD[t]!=0)	TMP = segCMD[t] | TMP;
		if(pSegArray[t]!=0)	TMP = GET_SEG_REG(pSegArray[t]) | TMP;
	//	CString ss; ss.Format("TMP= 0x%x",TMP); MessageBox(ss);
	}

	//set segment
	if(TMP!=0)	
		B_SPI_Write32_New(TMP);	
		//SPI_Write32(TMP);	

	//local update
	B_SPI_Write32_New(0x80400000);	
	//SPI_Write32(0x80400000);	
}

DLL_EXPORT void B_UpdateICArrayn(CString tmpStr) 
{
	//CString tmpStr,
	tmpStr.TrimLeft();tmpStr.TrimRight();	//trim blank 
	CString tmp2;
	if(tmpStr.IsEmpty())	{AfxMessageBox("Input segs(like: 1,2,3,5)"); return;}

	int beforePos=0, currentPos=beforePos;
	CByteArray	byteArray;
	while(currentPos!=-1 && currentPos!= tmpStr.GetLength())
	{
		currentPos= tmpStr.Find(TCHAR(','),beforePos+1);
		if(currentPos==-1 )	currentPos= tmpStr.GetLength();
		if(currentPos>beforePos)	
		{
			tmp2= tmpStr.Mid(beforePos, currentPos);
			tmp2.TrimLeft(TCHAR(','));	tmp2.TrimRight(',');
			if(!tmp2.IsEmpty())	byteArray.Add((BYTE)atoi(tmp2));
		}
		beforePos=currentPos;
	}
	
	if(byteArray.GetSize()==0)	{AfxMessageBox("Input Invailable");	return;}
	DWORD	segDW=0x0;
	for(int x=0; x<byteArray.GetSize(); x++)
	{
		segDW |= GET_SEG_REG(byteArray.GetAt(x));
		//CString msg; msg.Format("byteArray[%d]= %d",x, byteArray.GetAt(x));	MessageBox(msg);
	}
	//CString msg2; msg2.Format("segDW= 0x%x",segDW);	MessageBox(msg2);

	B_SPI_Write32_New(segDW);	//Sleep(1);
	//local update
	B_SPI_Write32_New(0x80400000);
}

DLL_EXPORT void B_UpdateICArrayn_New(char* pStr) 
{
	CString tmpStr(pStr);
	tmpStr.TrimLeft();tmpStr.TrimRight();	//trim blank 
	CString tmp2;
	if(tmpStr.IsEmpty())	{AfxMessageBox("Input segs(like: 1,2,3,5)"); return;}

	int beforePos=0, currentPos=beforePos;
	CByteArray	byteArray;
	while(currentPos!=-1 && currentPos!= tmpStr.GetLength())
	{
		currentPos= tmpStr.Find(TCHAR(','),beforePos+1);
		if(currentPos==-1 )	currentPos= tmpStr.GetLength();
		if(currentPos>beforePos)	
		{
			tmp2= tmpStr.Mid(beforePos, currentPos);
			tmp2.TrimLeft(TCHAR(','));	tmp2.TrimRight(',');
			if(!tmp2.IsEmpty())	byteArray.Add((BYTE)atoi(tmp2));
		}
		beforePos=currentPos;
	}
	
	if(byteArray.GetSize()==0)	{AfxMessageBox("Input Invailable");	return;}
	DWORD	segDW=0x0;
	for(int x=0; x<byteArray.GetSize(); x++)
	{
		segDW |= GET_SEG_REG(byteArray.GetAt(x));
		//CString msg; msg.Format("byteArray[%d]= %d",x, byteArray.GetAt(x));	MessageBox(msg);
	}
	//CString msg2; msg2.Format("segDW= 0x%x",segDW);	MessageBox(msg2);

	B_SPI_Write32_New(segDW);	//Sleep(1);
	//local update
	B_SPI_Write32_New(0x80400000);
}

DLL_EXPORT void B_White()
{
	DWORD WHITE[]=
	{
		0xa0000000,0xa2000000,0xa4000000,0xa6000000,
		0xe0000000,0xe2000000,0xe4000000,0xe6000000
	};

	for(int i=0; i<sizeof(WHITE)/sizeof(DWORD); i++)
	{
		B_SPI_Write32_New(WHITE[i]);	
		//Sleep(1);
		wait_us(200);	//0.2ms
	}

	//local update
	B_SPI_Write32_New(0x80800000);	
}

DLL_EXPORT void B_Black()
{
	DWORD BLACK[]=
	{
		0xa0ffffff,0xa2ffffff,0xa4ffffff,0xa6ffffff,
		0xe0ffffff,0xe2ffffff,0xe4ffffff,0xe6ffffff
	};

	for(int i=0; i<sizeof(BLACK)/sizeof(DWORD); i++)
	{
		B_SPI_Write32_New(BLACK[i]);	
		//Sleep(1);
		wait_us(200);	//0.2ms
	}

	//local update
	B_SPI_Write32_New(0x80800000);	
}

DLL_EXPORT void B_BackgroundOff() 
{
	B_SPI_Write32_New(0xa0000000|REG_BACKGROUND_OFF);
///	Sleep(1);
	B_SPI_Write32_New(0x80400000);
}

DLL_EXPORT void B_BackgroundOn() 
{
	B_SPI_Write32_New(0xa0000000|REG_BACKGROUND_ON);
///	Sleep(1);
	B_SPI_Write32_New(0x80400000);
}

DLL_EXPORT BOOL B_MISO()
{
	if(((BYTE)Inp32(PORT_ADDR+1))&B_SPI_MISO == 0)	return(true);	//B_SPI_MISO, pin11= ~pin11

	return(false);
}

DLL_EXPORT DWORD B_MISO_DW()
{
	DWORD	readData=0;
	readData= B_SPI_Read32_New();	

	return(readData);
}

DLL_EXPORT BYTE B_CheckBusy()
{
	B_SPI_Write32_New(0x80800000);	//global updata
	B_SPI_Write32_New(0x56000000);	//check busy cmd
	DWORD readData= B_SPI_Read32_New();
	BYTE busyBits= (BYTE)((readData & BUSY_BITS)>>14);

	return (busyBits);
}

DLL_EXPORT BYTE B_TempSense()
{
	B_SPI_Write32_New(0x94030000);	//enable tempreture senser and ADC
	DWORD temp= B_SPI_Read32_New();
	BYTE tempData= (BYTE)((temp & TEMP_BITS)>>18);
	return(tempData);
}


DLL_EXPORT void B_EnableTemper()
{
	B_SPI_Write32_New(0x94030000);	//enable tempreture senser and ADC
}
////////////////////////////////////////////////////////////////////////////
DWORD GET_SEG_REG(BYTE seg)
{
	DWORD	segDW= 0;

	//if(seg==0 || seg>185)	return (0);
	if(seg>181)	return (0);

	if(seg<93)	 segDW = 0xa0000000;	//seg= 0 : background
	else		
	{
		segDW = 0xe0000000; 
	
		if(seg>= 97)
			seg+=3;
		else if(seg>=96)
			++seg;

		seg-=92;
	}//seg=96,98,99 ,nothing display

	TRACE("seg/24=%d; seg\\24=%d\n",seg/24,seg%24);	
	switch(seg/24)
	{
	case 0:	
		segDW |= 0x00000000|(1<<(seg%24));
		break;
	case 1:
		segDW |= 0x02000000|(1<<(seg%24));
		break;
	case 2:
		segDW |= 0x04000000|(1<<(seg%24));
		break;
	case 3:
		segDW |= 0x06000000|(1<<(seg%24));
		break;
	default:
		segDW= 0x0;
	}
	TRACE("segDW=0x%x;\n",segDW);	
	return segDW;
}

⌨️ 快捷键说明

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