📄 unit.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 + -