📄 spi.cpp
字号:
}
//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 + -