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

📄 unit1.cpp

📁 谁给看看
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
HANDLE hComm=INVALID_HANDLE_VALUE;

//设置SONY遥控命令
BYTE STOP[]={0x020,0x000,0x020};
BYTE PLAY[]={0x020,0x001,0x021};
BYTE REC[]={0x020,0x002,0x022};
BYTE STDBY[]={0x020,0x004,0x024};
BYTE EJECT[]={0x020,0x00f,0x02f};
BYTE FF[]={0x020,0x010,0x030};
BYTE REW[]={0x020,0x020,0x040};
BYTE STILL[]={0x020,0x005,0x025};

BYTE GetCurrectCTL[]={0x061,0x00c,0x004,0x071};
BYTE GetCurrectTC[]={0x061,0x0c,0x001,0x06e};
BYTE CurrentStatus[]={0x061,0x020,0x007,0x088};

BYTE REW48X[]={0x021,0x023,0x076,0x0BA};
BYTE REW25X[]={0x021,0x023,0x06c,0x0B0};
BYTE REW16X[]={0x021,0x023,0x066,0x0AA};
BYTE REW9X[]={0x021,0x023,0x05E,0x0A2};
BYTE REW4X[]={0x021,0x023,0x053,0x097};
BYTE REW1X[]={0x021,0x023,0x040,0x084};

BYTE FF48X[]={0x021,0x013,0x076,0x0AA};
BYTE FF25X[]={0x021,0x013,0x06c,0x0A0};
BYTE FF16X[]={0x021,0x013,0x066,0x09A};
BYTE FF9X[]={0x021,0x013,0x05E,0x092};
BYTE FF4X[]={0x021,0x013,0x053,0x087};
BYTE FF1X[]={0x021,0x013,0x040,0x074};

BYTE jREW_1X[]={0x021,0x021,0x020,0x062};
BYTE jREW_3X[]={0x021,0x021,0x02f,0x071};
BYTE jREW_5X[]={0x021,0x021,0x036,0x076};
BYTE jREW_8X[]={0x021,0x021,0x03c,0x07e};
BYTE jREW1X[]={0x021,0x021,0x040,0x082};

BYTE jFF_1X[]={0x021,0x011,0x020,0x052};
BYTE jFF_3X[]={0x021,0x011,0x02f,0x061};
BYTE jFF_5X[]={0x021,0x011,0x036,0x066};
BYTE jFF_8X[]={0x021,0x011,0x03c,0x06e};
BYTE jFF1X[]={0x021,0x011,0x040,0x072};


BYTE Mask[]={0x03f,0x07f,0x07f,0x03f};
BYTE temp[64];
int i=0;

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  DCB dcbCommPort;
  //打开串行口com1
  hComm=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,
                   0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,
                   NULL);
  if(hComm==INVALID_HANDLE_VALUE)
     Application->Terminate();
  //取得当前串行口参数
    GetCommState(hComm,&dcbCommPort);
  //设置SONY设备使用的串行口参数
  dcbCommPort.BaudRate=(UINT)CBR_38400;//波特率38400
  dcbCommPort.Parity=(BYTE)ODDPARITY; //奇校验
  dcbCommPort.StopBits=(BYTE)ONESTOPBIT;//一个停止位
  dcbCommPort.ByteSize=(BYTE)8; //数据位8bit
  dcbCommPort.fBinary=1;     //二进制数据收发
  SetCommState(hComm,&dcbCommPort);


  //读取录像机当前时码
  if(RadioCTL->Checked==FALSE)
      SentComm(GetCurrectTC);
  else
      SentComm(GetCurrectCTL);
  for(i=0;i<500;i++)
     ReceiveSony();


}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
 //关闭串行口
 CloseHandle(hComm);
 hComm=INVALID_HANDLE_VALUE;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SentComm(BYTE *comm)
{
  BOOL n=FALSE;
  DWORD ReturnedByteCount;
  //清除串行口输入、输出缓冲区中的内容
  PurgeComm(hComm,PURGE_TXABORT|PURGE_RXABORT|
                 PURGE_TXCLEAR|PURGE_RXCLEAR);
  //发送命令
  n=WriteFile(hComm,(void *)comm,(*comm&0x0f)+3,&ReturnedByteCount,NULL);
  if(n==FALSE)
    {
      MessageBox(NULL,"控制命令发送失败!!","警告",MB_OK);
      return;
      }
}


void __fastcall TForm1::rewClick(TObject *Sender)
{
   TrackBar1->Position=0;
   SentComm(REW);
   Timer1->Enabled = True;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::playClick(TObject *Sender)
{
   TrackBar1->Position=6;
   SentComm(PLAY);
   Timer1->Enabled =True;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::stillClick(TObject *Sender)
{
   SentComm(STOP);
   SentComm(STILL);
   TrackBar1->Position=6;
   Timer1->Enabled =False;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::ffClick(TObject *Sender)
{
TrackBar1->Position=12;
SentComm(FF);
 Timer1->Enabled =True;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ejectClick(TObject *Sender)
{
SentComm(EJECT);
 Timer1->Enabled =False;
 if(RadioCTL->Checked==True)
 Label1->Caption="00:00:00:00";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::recClick(TObject *Sender)
{
SentComm(REC);
Timer1->Enabled =True;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::stdbyClick(TObject *Sender)
{
SentComm(STDBY);
Timer1->Enabled =False;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::stopClick(TObject *Sender)
{
  SentComm(STOP);
   TrackBar1->Position=6;
  Timer1->Enabled =False;
 }
//---------------------------------------------------------------------------


void __fastcall TForm1::RadioCTLClick(TObject *Sender)
{
    RadioTC->Checked=FALSE;
    SentComm(GetCurrectCTL);
    for(i=0;i<500;i++)
     ReceiveSony();

}
//---------------------------------------------------------------------------

void __fastcall TForm1::RadioTCClick(TObject *Sender)
{
    RadioCTL->Checked=FALSE;
    SentComm(GetCurrectTC);
    for(i=0;i<500;i++)
     ReceiveSony();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ReceiveSony()
{
   COMSTAT comstat;
   DWORD Error;
   DWORD nToRead=0;
   BOOL n;
   DWORD ReturnedByteCount;
   BYTE chksum;

   // 串行口是否出错
   ClearCommError(hComm,&Error,&comstat);
   if(Error)
      return;
   if(comstat.cbInQue > (DWORD)sizeof(temp))
      nToRead=sizeof(temp);
     else
      nToRead=comstat.cbInQue;
   if(nToRead==0)
     return;

   n=ReadFile(hComm,(void *)temp,nToRead,
              &ReturnedByteCount,NULL);
   if(n==FALSE)
     return;

  /* //检查校验和
   for(i=1,chksum=temp[0];i<((temp[0]&0x0f)+2);i++)
      chksum+=temp[i];
   if(temp[i]!=chksum)
     {
      MessageBox(NULL,"校验和错","警告",MB_OK);
      return;
      }

   //return NAK
   if((*temp==0x011)&&(*(temp+1)==0x012))
      {
      MessageBox(NULL,"没有此命令或电缆联接异常","警告",MB_OK);
      return;
        }
   if((*temp==0x074)&&(*(temp+1)==0x020))
      {
       if(*(temp+2)&&0x01==1)
       MessageBox(NULL,"请将录像机置于Remote状态!","信息",MB_OK);
      } */

   //接收的如果是时码
   if(*temp==0x074)
      DisplayTime();

}
//---------------------------------------------------------
void __fastcall TForm1::DisplayTime()
{
   char Display[64];

   wsprintf(Display,"%2.2x:%2.2x:%2.2x:%2.2x",
            temp[5]&Mask[3],
            temp[4]&Mask[2],
            temp[3]&Mask[1],
            temp[2]&Mask[0]);

   Label1->Caption=Display;
}

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  if(RadioCTL->Checked==FALSE)
      SentComm(GetCurrectTC);
  else
      SentComm(GetCurrectCTL);
  for(i=0;i<500;i++)
     ReceiveSony();
}
//---------------------------------------------------------------------------



void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
  SentComm(STILL);

  if(JOG->Checked==True)   //Jog方式
  { switch(TrackBar1->Position)
   {
    case 0:
       SentComm(jREW1X);
       break;
    case 1:
       SentComm(jREW1X);
       break;
    case 2:
       SentComm(jREW_8X);
       break;
    case 3:
       SentComm(jREW_5X);
       break;
    case 4:
       SentComm(jREW_3X);
       break;
    case 5:
       SentComm(jREW_1X);
       break;
    case 6:
       SentComm(STOP);
       Timer1->Enabled=False;
       break;
    case 7:
       SentComm(jFF_1X);
       break;
     case 8:
       SentComm(jFF_3X);
       break;
     case 9:
       SentComm(jFF_5X);
       break;
     case 10:
       SentComm(jFF_8X);
       break;
     case 11:
       SentComm(jFF1X);
       break;
     case 12:
       SentComm(jFF1X);
     default:
       break;
    }
   Timer1->Enabled=True;
   return;
   }

 switch(TrackBar1->Position) //Shuttel
  {
    case 0:
       SentComm(REW48X);
       break;
    case 1:
       SentComm(REW25X);
       break;
    case 2:
       SentComm(REW16X);
       break;
    case 3:
       SentComm(REW9X);
       break;
    case 4:
       SentComm(REW4X);
       break;
    case 5:
       SentComm(REW1X);
       break;
    case 6:
       SentComm(STOP);
       Timer1->Enabled=False;
       break;
    case 7:
       SentComm(FF1X);
       break;
     case 8:
       SentComm(FF4X);
       break;
     case 9:
       SentComm(FF9X);
       break;
     case 10:
       SentComm(FF16X);
       break;
     case 11:
       SentComm(FF25X);
       break;
     case 12:
       SentComm(FF48X);
     default:
       break;
    }
   Timer1->Enabled=True;
   return;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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