📄 unit1.~cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include "Unit1.h"
//user include
#include <math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "DLPortIOX"
#pragma link "YbCommDevice"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
DL->OpenDriver();
delaytime=ScrollBar1->Position;
Label1->Caption=ScrollBar1->Position;
Label2->Caption=ScrollBar2->Position;
ReadDelayTime=ScrollBar2->Position;
SCL_Set_1;
try
{
YbCommDevice1->PortNo=1;
YbCommDevice1->Active=true;
}
catch(Exception &e)
{
ShowMessage("YbCommDevice1: "+e.Message);
}
}
//----------------------------------------------------------------------------
void TForm1::i2cstart(void)
{
SCL_Set_1;
SDA_Set_1;
DelayUS(delaytime);
SDA_Set_0;
DelayUS(delaytime);
}
//----------------------------------------------------------------------------
void TForm1::i2cstop(void)
{
SCL_Set_0;
SDA_Set_0;
DelayUS(delaytime);
SCL_Set_1;
DelayUS(delaytime);
SDA_Set_1;
}
//----------------------------------------------------------------------------
void TForm1::mainsendask(void)
{
SCL_Set_0;
SDA_Set_0;
DelayUS(delaytime);
SCL_Set_1;
DelayUS(delaytime);
}
//----------------------------------------------------------------------------
bool TForm1::mainreceiveask(void)
{
int i=0;
SCL_Set_0;
SDA_Set_1;
DelayUS(delaytime);
SCL_Set_1;
DelayUS(delaytime);
while(SDA_Get!=0)
{
i++;
if(i>20)
{
ShowMessage("No ACK!");
return(0);
}
}
return(1);
}
//----------------------------------------------------------------------------
bool TForm1::sendbyte(int temp)
{
short int a=7;
char d,e;
while(a>=0)
{
d=temp>>a;
d=d<<7;
if(d)
{
SCL_Set_0;
SDA_Set_1;
DelayUS(delaytime);
SCL_Set_1;
DelayUS(delaytime);
}
else
{
SCL_Set_0;
SDA_Set_0;
DelayUS(delaytime);
SCL_Set_1;
DelayUS(delaytime);
}
a=a-1;
}
return(mainreceiveask());
}
//----------------------------------------------------------------------------
int TForm1::readbyte()
{
unsigned short a=8;
short d,e,f=0;
while(a>0)
{
SCL_Set_0;
SDA_Set_1;
DelayUS(delaytime);
SCL_Set_1;
DelayUS(delaytime);
e=SDA_Get;
f=f<<1;
f=f+e;
a=a-1;
}
mainsendask();
return(f);
}
//----------------------------------------------------------------------------
int TForm1::readlastbyte()
{
unsigned short a=8;
short d,e,f=0;
while(a>0)
{
SCL_Set_0;
SDA_Set_1;
DelayUS(delaytime);
SCL_Set_1;
DelayUS(delaytime);
e=SDA_Get;
f=f<<1;
f=f+e;
a=a-1;
}
return(f);
}
//----------------------------------------------------------------------------
void TForm1::checkIICbusy()
{
int i;
for(i=0;i<15;i++)
{
Sleep(1);
i++;
if(SCL_Get==0)
{
i=0;
}
}
}
//----------------------------------------------------------------------------
bool TForm1::WriteDDC(short int i,int s[])
{
short int j=0;
checkIICbusy();
i2cstart();
while(j<i)
{
if(sendbyte(s[j])==0)
return(0);
j++;
}
i2cstop();
DelayUS(delaytime);
return(1);
}
//----------------------------------------------------------------------------
int *TForm1::ReadDDC(short int sendlong,int sendstr[],short int receivelong)
{
short int i;
bool WOKF;
int receivestr[MaxReceiveNum];
checkIICbusy();
if(receivelong==0)
{
receivestr[0]=0x00;
return(&receivestr[0]);
}
WOKF=WriteDDC(sendlong,sendstr);
if(WOKF==0)
{
receivestr[0]=0x00;
return(&receivestr[0]);
}
Sleep(ReadDelayTime);
i2cstart();
sendbyte(sendstr[0]|0x01);
if(receivelong==1)
receivestr[0]=readlastbyte();
else
{
for(i=0;i< (receivelong-1); i++)
{
receivestr[i]=readbyte();
}
receivestr[i]=readlastbyte();
}
i2cstop();
return(&receivestr[0]);
}
//----------------------------------------------------------------------------
void TForm1::DelayUS(double us)
{
double delayus;
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfMinus, dfFreq, dfTim;
if(us<20)
{
us=20;
}
delayus=(us-9)/2500000;
QueryPerformanceFrequency(&litmp);
dfFreq = (double)litmp.QuadPart;// 获得计数器的时钟频率
QueryPerformanceCounter(&litmp);
QPart1 = litmp.QuadPart;// 获得初始值
do
{
QueryPerformanceCounter(&litmp);
QPart2 = litmp.QuadPart;//获得中止值
dfMinus = (double)(QPart2-QPart1);
dfTim = dfMinus / dfFreq;// 获得对应的时间值,单位为秒
}while(dfTim<delayus);
}
//-----------------------------------------------------------------------------
void __fastcall TForm1::Button13Click(TObject *Sender)
{
int s[4]={0x58,0xef,0x00,0x00};
WriteDDC(4,s);
Button8->Caption="DebugEnable";
Timer1->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int s[9]={0x6e,0x51,0x85,0xc0,0x00,0xef,0x01,0x00,0x94};
WriteDDC(9,s);
}
//---------------------------------------------------------------------------
/*
void __fastcall TForm1::ReadEEPROM()
{
int *restr;
int s[8]={0x58,0x51,0x84,0xef,0x8a,0x04,0x01,0x52};
restr=ReadDDC(8,s,3);
} */
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
char receivestr[27];
unsigned char TempRStr[11];
unsigned int TempRInt;
bool UpdateOupFlag=false;
int i,j,k;
Timer1->Enabled=false;
checkIICbusy();
i2cstart();
if(sendbyte(0x59|0x01)==0)
{
Timer1->Enabled=false;
Button8->Caption="DebugEnable";
return;
}
for(i=0;i<7; i++)
{
receivestr[i]=readbyte();
TempRStr[i]=receivestr[i];
}
receivestr[i]=readlastbyte();
TempRStr[i]=receivestr[i];
i2cstop();
receivestr[8]='\r';
receivestr[9]='\n';
receivestr[10]='\0';
for (i=0;i<11;i++)
{
if(PreS[i]!=receivestr[i])
{
PreS[i]=receivestr[i];
UpdateOupFlag=true;
}
}
if(receivestr[4]=='=')
{
switch(receivestr[5])
{
case 'x':
case 'X':
receivestr[5]='0';
receivestr[6]='x';
if(TempRStr[6])
{
receivestr[7]=TempRStr[6]>>4;
receivestr[8]=TempRStr[6]&0x0f;
receivestr[9]=TempRStr[7]>>4;
receivestr[10]=TempRStr[7]&0x0f;
for(j=7;j<=10;j++)
{
if(receivestr[j]<=9)
receivestr[j]+=0x30;
else
receivestr[j]+=0x37;
}
receivestr[11]='\r';
receivestr[12]='\n';
receivestr[13]='\0';
}
else
{
receivestr[7]=TempRStr[7]>>4;
receivestr[8]=TempRStr[7]&0x0f;
for(j=7;j<=8;j++)
{
if(receivestr[j]<=9)
receivestr[j]+=0x30;
else
receivestr[j]+=0x37;
}
receivestr[9]='\r';
receivestr[10]='\n';
receivestr[11]='\0';
}
break;
case 'd':
case 'D':
TempRInt= TempRStr[6];
TempRInt=(TempRInt<<8)+ TempRStr[7];
receivestr[5]=TempRInt/10000+0x30;
TempRInt%=10000;
receivestr[6]=TempRInt/1000+0x30;
TempRInt%=1000;
receivestr[7]=TempRInt/100+0x30;
TempRInt%=100;
receivestr[8]=TempRInt/10+0x30;
TempRInt%=10;
receivestr[9]=TempRInt+0x30;
for(j=5;j<=9;j++)
{
if(receivestr[j]!=0x30)
break;
}
for(k=5;k<j;k++)
{
receivestr[k]=' ';
}
receivestr[10]='\r';
receivestr[11]='\n';
receivestr[12]='\0';
break;
case 'b':
case 'B':
if(TempRStr[6])
{
for(i=0;i<9;i++)
{
if (i==4)
{
receivestr[5+i]=' ';
continue;
}
if(TempRStr[6]>>7)
receivestr[5+i]=1+0x30;
else
receivestr[5+i]=0+0x30;
TempRStr[6]<<=1;
}
receivestr[14]=' ';
for(i=0;i<9;i++)
{
if (i==4)
{
receivestr[15+i]=' ';
continue;
}
if(TempRStr[7]>>7)
receivestr[15+i]=1+0x30;
else
receivestr[15+i]=0+0x30;
TempRStr[7]<<=1;
}
receivestr[24]='\r';
receivestr[25]='\n';
receivestr[26]='\0';
}
else
{
for(i=0;i<9;i++)
{
if (i==4)
{
receivestr[5+i]=' ';
continue;
}
if(TempRStr[7]>>7)
receivestr[5+i]=1+0x30;
else
receivestr[5+i]=0+0x30;
TempRStr[7]<<=1;
}
receivestr[14]='\r';
receivestr[15]='\n';
receivestr[16]='\0';
}
break;
default:
break;
}
}
if(UpdateOupFlag==true)
{
RichEdit1->Text=RichEdit1->Text+receivestr;
UpdateOupFlag=false;
}
Timer1->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button7Click(TObject *Sender)
{
RichEdit1->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button8Click(TObject *Sender)
{
Timer1->Enabled=true;
Button8->Caption="DebugExit";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ScrollBar1Scroll(TObject *Sender,
TScrollCode ScrollCode, int &ScrollPos)
{
Label1->Caption=ScrollBar1->Position;
delaytime=ScrollBar1->Position;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ScrollBar2Scroll(TObject *Sender,
TScrollCode ScrollCode, int &ScrollPos)
{
Label2->Caption=ScrollBar2->Position;
ReadDelayTime=ScrollBar2->Position;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int s[4];
char *EndPtr;
s[0]=0x58;
s[1]=strtol(Edit1->Text.c_str(),&EndPtr,16);
s[2]=strtol(Edit2->Text.c_str(),&EndPtr,16);
s[3]=strtol(Edit3->Text.c_str(),&EndPtr,16);
WriteDDC(4,s);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TabSheet6ContextPopup(TObject *Sender,
TPoint &MousePos, bool &Handled)
{
RichEdit1->Hide();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TabSheet7ContextPopup(TObject *Sender,
TPoint &MousePos, bool &Handled)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -