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

📄 unit.cpp

📁 端点批量传输 eerom的读写 固件自动下载 USB标准请求 GPIF单字节读写 GPIF_FIFO读写 Led显示与键盘扫描等
💻 CPP
字号:
//---------------------------------------------------------------------------
#include <stdio.h>
#include <vcl.h>
#pragma hdrstop

#define FILE_DEVICE_UNKNOWN     0x00000022
#define METHOD_BUFFERED                0
#define METHOD_IN_DIRECT               1
#define METHOD_OUT_DIRECT              2
#define METHOD_NEITHER                 3

#define FILE_ANY_ACCESS           0
#define FILE_READ_ACCESS          1
#define FILE_WRITE_ACCESS         2


#include "Unit.h"
#include "hdddb.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HANDLE h1;

int  LEDWrite(int index,int digit);
int  SRAMWrite(unsigned short Addr,char *DataBuff,int bufflen);
int  SRAMRead(unsigned short Addr,char *DataBuff,int bufflen);
int  EEPROMWrite(unsigned short Addr,char *DataBuff,int bufflen);
int  EEPROMRead(unsigned short Addr,char *DataBuff,int bufflen);
int  ComSendData(char *DataBuff,int bufflen);
int  ComReadData(char *DataBuff,int bufflen);
int  GetKey(char *Key);

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

int CTL_CODE(Word DeviceType,Word  Func,Word Method,Word Access)
{
   return  ((DeviceType) << 16) | ((Access) << 14)  |  ((Func) << 2) | (Method);
}


void HexToStr(int i,char *buff){
  char tmp[18]="0123456789ABCDEF ";

  buff[0]=tmp[(i/16)];
  buff[1]=tmp[(i%16)];
//  buff[2]=0;
}

int strtohex(char *s){

  char tmp[]="0123456789ABCDEF ";
  int i,a,b;

  if (s[0]==0) return 0;

  i=1;
  for(i=0;i<16;i++){
    if (tmp[i]==s[0])   a=i;
    if (tmp[i]==s[1])   b=i;
  }
  return a*16+b;
}

//char *hextostr(int i){
//
//}


void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if (h1!=NULL) return;
  h1=CreateFile("\\\\.\\EZUSB-0",GENERIC_WRITE,FILE_SHARE_WRITE ,NULL,OPEN_EXISTING,0,NULL);

  if (h1==INVALID_HANDLE_VALUE){
   Memo2->Lines->Add("设备打开失败!");
   Timer1->Enabled=false;
  }
  else  {
    Timer1->Enabled=true;
    Memo2->Lines->Add("设备打开成功!");

    Edit8->Text="0";
    Edit9->Text="0";
    Edit10->Text="0";
    Edit11->Text="0";            
    LEDWrite(0,0);
    LEDWrite(1,0);
    LEDWrite(2,0);
    LEDWrite(3,0);
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
  CloseHandle(h1);
  h1=NULL;
  Timer1->Enabled=false;
  Memo2->Lines->Add("设备关闭成功!");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
     h1=NULL;
}
//---------------------------------------------------------------------------
int  GetKey(char *Key){
   unsigned long  rcnt;

   VENDOR_OR_CLASS_REQUEST_CONTROL  myrequest;
   myrequest.direction=1;
   myrequest.requestType=2;
   myrequest.recepient=0;
   myrequest.request=0xB1;


   if (!DeviceIoControl(h1,IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST,&myrequest,
       sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL),Key,1,&rcnt,NULL)){
     Form1->Memo2->Lines->Add("\r\nGetKey Failed\r\n");
   }
   return rcnt;
}


int  LEDWrite(int index,int digit){
   unsigned long  wcnt;
   VENDOR_OR_CLASS_REQUEST_CONTROL  myrequest;
   myrequest.direction=0;
   myrequest.requestType=2;
   myrequest.recepient=0;
   myrequest.request=0xB0;


   myrequest.value=(index&0xff)*256+digit;

   if (!DeviceIoControl(h1,IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST,&myrequest,
       sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL),NULL,0,&wcnt,NULL)){
     Form1->Memo2->Lines->Add("\r\nLED Write Failed\r\n");
   }
   return wcnt;
}


int  SRAMWrite(unsigned short Addr,char *DataBuff,int bufflen){
   unsigned long  wcnt;
   VENDOR_OR_CLASS_REQUEST_CONTROL  myrequest;

   myrequest.direction=0;
   myrequest.requestType=2;
   myrequest.recepient=0;
   myrequest.request=0xB3;

   myrequest.value=Addr;

   if (!DeviceIoControl(h1,IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST,&myrequest,
       sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL),DataBuff,bufflen,&wcnt,NULL)){
     Form1->Memo2->Lines->Add("\r\nSRAM Write Failed\r\n");
   }
   return wcnt;
}


int  SRAMRead(unsigned short Addr,char *DataBuff,int bufflen){
   unsigned long  rcnt;
   VENDOR_OR_CLASS_REQUEST_CONTROL  myrequest;

   myrequest.direction=1;
   myrequest.requestType=2;
   myrequest.recepient=0;
   myrequest.request=0xB3;

   myrequest.value=Addr;

   if (!DeviceIoControl(h1,IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST,&myrequest,
       sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL),DataBuff,bufflen,&rcnt,NULL)){
     Form1->Memo2->Lines->Add("\r\nSRAM Read Failed\r\n");
   }
   return rcnt;
}



int  EEPROMWrite(unsigned short Addr,char *DataBuff,int bufflen){
   unsigned long  wcnt;
   VENDOR_OR_CLASS_REQUEST_CONTROL  myrequest;

   myrequest.direction=0;
   myrequest.requestType=2;
   myrequest.recepient=0;
   myrequest.request=0xB2;

   myrequest.value=Addr;

   if (!DeviceIoControl(h1,IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST,&myrequest,
       sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL),DataBuff,bufflen,&wcnt,NULL)){
     Form1->Memo2->Lines->Add("\r\nEEPROM Write Failed\r\n");
   }
   return wcnt;
}


int  EEPROMRead(unsigned short Addr,char *DataBuff,int bufflen){
   unsigned long  rcnt;
   VENDOR_OR_CLASS_REQUEST_CONTROL  myrequest;

   myrequest.direction=1;
   myrequest.requestType=2;
   myrequest.recepient=0;
   myrequest.request=0xB2;

   myrequest.value=Addr;

   if (!DeviceIoControl(h1,IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST,&myrequest,
       sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL),DataBuff,bufflen,&rcnt,NULL)){
     Form1->Memo2->Lines->Add("\r\nEEPROM Read Failed\r\n");
   }
   return rcnt;
}


int  ComSendData(char *DataBuff,int bufflen){
   unsigned long  wcnt;
   VENDOR_OR_CLASS_REQUEST_CONTROL  myrequest;

   myrequest.direction=0;
   myrequest.requestType=2;
   myrequest.recepient=0;
   myrequest.request=0xB4;
   if (Form1->RadioButton1->Checked==true)   myrequest.value=0;
   else myrequest.value=1;
   myrequest.index=0;


   if (!DeviceIoControl(h1,IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST,&myrequest,
       sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL),DataBuff,bufflen,&wcnt,NULL)){
     Form1->Memo2->Lines->Add("\r\nComport Write Failed\r\n");
   }
   return wcnt;
}


int ComReadData(char *DataBuff,int bufflen){
   unsigned long  rcnt;
   VENDOR_OR_CLASS_REQUEST_CONTROL  myrequest;

   myrequest.direction=1;
   myrequest.requestType=2;
   myrequest.recepient=0;
   myrequest.request=0xB4;
   if (Form1->RadioButton1->Checked==true)   myrequest.value=0;
   else myrequest.value=1;
   myrequest.index=0;


   rcnt=0;
   if (!DeviceIoControl(h1,IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST,&myrequest,
       sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL),DataBuff,bufflen,&rcnt,NULL)){
     Form1->Memo2->Lines->Add("\r\nComport Read Failed\r\n");
   }
   return rcnt;
}


void __fastcall TForm1::Memo1KeyPress(TObject *Sender, char &Key)
{
   //
  // ComSendByte(Key);
  // if (Key=='\r')    ComSendByte('\n');
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
  //char tmpbuff[255];
  ComSendData(Edit1->Text.c_str(),strlen(Edit1->Text.c_str()));

 // ComSendData("\r\n",2);
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button4Click(TObject *Sender)
{
  int readcount;
  char tmpbuff[1024];
  char tmpbuff1[1024];
  
  memset(tmpbuff,1024,0);
  readcount=ComReadData(tmpbuff,1024);
//  Form1->Memo1->Lines->Add("\r\n");
//  Form1->Memo1->Lines->Add(tmpbuff);

  tmpbuff[readcount]=0;
  if (readcount>0){
    strcpy(tmpbuff1,Form1->Memo1->Text.c_str());
    strcat(tmpbuff1,tmpbuff);
    Form1->Memo1->Text=tmpbuff1;
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)
{
  unsigned short addr;
  char Databuff[1024];
  char tmpbuff[100];
  int i,j;
  int rlen;

  //计算地址
  strcpy(tmpbuff,Edit2->Text.c_str());
  addr=strtohex(tmpbuff)*256+strtohex(tmpbuff+2);

  rlen=atoi(MaskEdit1->Text.c_str());
  if (rlen>=1024) rlen=1024;

  //读数据
  EEPROMRead(addr,Databuff,rlen);

  for(j=0;j<rlen;){

     sprintf(tmpbuff,"%04x:",addr);

     memset(tmpbuff+5,0x20,94);  tmpbuff[99]=0;

     for(i=0;i<16;i++){
         if ((j+i)>=rlen) break;
         HexToStr(Databuff[j+i]&0x00ff,tmpbuff+5+i*3);
     }
     ListBox1->Items->Add(tmpbuff);

     j+=16;
     addr=addr+16;
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)
{
  ListBox1->Clear();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button7Click(TObject *Sender)
{
  unsigned short addr;
  char tmpbuf[255];
  char buff2[100];
  int i;

  strcpy(tmpbuf,Edit3->Text.c_str());
  addr=strtohex(tmpbuf)*256+strtohex(tmpbuf+2);
  if (addr<=8)  {
    MessageBox(NULL,"实验板EEPROM低8位字节中为厂家代码,本例程不提供对低8字节的写操作","提示",MB_OK);
    return;
  }

  strcpy(tmpbuf,Edit4->Text.c_str());
  EEPROMWrite(addr,tmpbuf,strlen(tmpbuf));

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

void __fastcall TForm1::Button8Click(TObject *Sender)
{
  unsigned short addr;
  char Databuff[1024];
  char tmpbuff[100];
  int i,j;
  int rlen;

  //计算地址
  strcpy(tmpbuff,Edit5->Text.c_str());
  addr=strtohex(tmpbuff)*256+strtohex(tmpbuff+2);

  rlen=atoi(MaskEdit2->Text.c_str());
  if (rlen>=1024) rlen=1024;

  //读数据
  SRAMRead(addr,Databuff,rlen);

  for(j=0;j<rlen;){

     sprintf(tmpbuff,"%04x:",addr);

     memset(tmpbuff+5,0x20,94);  tmpbuff[99]=0;

     for(i=0;i<16;i++){
         if ((j+i)>=rlen) break;
         HexToStr(Databuff[j+i]&0x00ff,tmpbuff+5+i*3);
     }
     ListBox2->Items->Add(tmpbuff);

     j+=16;
     addr=addr+16;
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button10Click(TObject *Sender)
{
  unsigned short addr;
  char tmpbuf[255];
  char buff2[100];
  int i;

  strcpy(tmpbuf,Edit6->Text.c_str());
  addr=strtohex(tmpbuf)*256+strtohex(tmpbuf+2);

  strcpy(tmpbuf,Edit7->Text.c_str());
  SRAMWrite(addr,tmpbuf,strlen(tmpbuf));
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button11Click(TObject *Sender)
{
  Timer1->Enabled=true;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::UpDown1Click(TObject *Sender, TUDBtnType Button)
{
   char tmp[18]="0123456789ABCDEF ";
   char buff[2];

   buff[0]=tmp[UpDown1->Position];
   buff[1]=0;

   LEDWrite(0,UpDown1->Position);
   Edit8->Text=buff;

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

void __fastcall TForm1::UpDown2Click(TObject *Sender, TUDBtnType Button)
{
   char tmp[18]="0123456789ABCDEF ";
   char buff[2];

   buff[0]=tmp[UpDown2->Position];
   buff[1]=0;

   LEDWrite(1,UpDown2->Position);
   Edit9->Text=buff;

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

void __fastcall TForm1::UpDown3Click(TObject *Sender, TUDBtnType Button)
{
   char tmp[18]="0123456789ABCDEF ";
   char buff[2];

   buff[0]=tmp[UpDown3->Position];
   buff[1]=0;

   LEDWrite(2,UpDown3->Position);
   Edit10->Text=buff;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::UpDown4Click(TObject *Sender, TUDBtnType Button)
{
   char tmp[18]="0123456789ABCDEF ";
   char buff[2];

   buff[0]=tmp[UpDown4->Position];
   buff[1]=0;

   LEDWrite(3,UpDown4->Position);
   Edit11->Text=buff;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button12Click(TObject *Sender)
{
  Timer1->Enabled=false;        
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  char key;
  GetKey(&key);

  if (key==1) Shape1->Brush->Color=RGB(255,0,0);
  if (key==2) Shape2->Brush->Color=RGB(255,0,0);
  if (key==3) Shape3->Brush->Color=RGB(255,0,0);
  if (key==4) Shape4->Brush->Color=RGB(255,0,0);
  if (key==5) Shape5->Brush->Color=RGB(255,0,0);
  if (key==6) Shape6->Brush->Color=RGB(255,0,0);
  if (key==7) Shape7->Brush->Color=RGB(255,0,0);
  if (key==8) Shape8->Brush->Color=RGB(255,0,0);


  if (key==0x7f)  {
      Shape1->Brush->Color=RGB(255,255,255);
      Shape2->Brush->Color=RGB(255,255,255);
      Shape3->Brush->Color=RGB(255,255,255);
      Shape4->Brush->Color=RGB(255,255,255);

      Shape5->Brush->Color=RGB(255,255,255);
      Shape6->Brush->Color=RGB(255,255,255);
      Shape7->Brush->Color=RGB(255,255,255);
      Shape8->Brush->Color=RGB(255,255,255);
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormActivate(TObject *Sender)
{
  Button1Click(Sender);
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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