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

📄 unit1.cpp

📁 ISP 并口下载工具
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit3.h"
#include "Unit2.h"
#include "Unit4.h"
#include "WinIO.h"
#include "Unit5.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#pragma link "WinIo_bc.lib"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  prom=NULL;
  readbuff=NULL;
  readchip=NULL;
  promsize=0;
  bWinIoInitOK=false;
  BitBtn1->Hint="打开文件";
  BitBtn2->Hint="保存文件";
  BitBtn3->Hint="呼叫";
  BitBtn4->Hint="擦除芯片";
  BitBtn5->Hint="读芯片";
  BitBtn6->Hint="写芯片";
  BitBtn7->Hint="校验";
  BitBtn8->Hint="写加密位";
  BitBtn9->Hint="读加密位";
  BitBtn10->Hint="读芯片ID";
  BitBtn11->Hint="自动编程";
//================================
  bWinIoInitOK = InitializeWinIo();
  if(!bWinIoInitOK)
   {
     Application->MessageBox("不能装载 WinIO 程序!","错误信息",MB_OK|MB_ICONSTOP);
     Application->Terminate();
   }
  outportb(0x37a,0);   
  enableoutput();
  unlock();
  setreset();
  enableprogram=penable();  
  lock();
}
//================================
__fastcall TForm1::~TForm1()
{
  if(bWinIoInitOK)
    {
      unlock();
      clrreset();
      lock();
      disableoutput();    
      ShutdownWinIo();
    }
  if(readbuff!=NULL)
   delete [] readbuff;
  if(prom!=NULL)
   delete [] prom;
  if(readchip!=NULL)
   delete [] readchip;
}
//---------------------------------------------------------------------------
//打开文件
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
  showtime();
  if(OpenDialog1->Execute())
    {
     Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
     if(Form1->prom==NULL)
        Form1->prom=hextobin(promsize);
     else
       {
        delete [] Form1->prom;
        Form1->prom=hextobin(promsize);
        }
    }
}
//---------------------------------------------------------------------------
//将Memo1的内容保存
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
  showtime();
  if(readchip!=NULL)
   {
    if(SaveDialog1->Execute())
     {
      Memo1->Lines->SaveToFile(SaveDialog1->FileName);
     }
   }
}
//---------------------------------------------------------------------------
//弹出About对话框
void __fastcall TForm1::N11Click(TObject *Sender)
{
 TOKBottomDlg *about;
 about=new TOKBottomDlg(this);
 about->Show();
}
//---------------------------------------------------------------------------
//重新复位单片机,联络
void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
  showtime();
  clrreset();
  setreset();
  enableprogram=penable();
  if(enableprogram)
    Memo2->Lines->Add("单片机处于编程状态了");
}
//---------------------------------------------------------------------------
//获取芯片ID
void __fastcall TForm1::BitBtn10Click(TObject *Sender)
{
  showtime();
  if(enableprogram)
   readID();
}
//---------------------------------------------------------------------------
//自动完成烧写数据,校验操作
void __fastcall TForm1::BitBtn11Click(TObject *Sender)
{
  if(promsize>getromsize())
    Form1->Memo2->Lines->Add("错误!烧写文件大于芯片ROM容量,或者通讯设备错误!");
  else
   {
    BitBtn6Click(Sender); //烧写数据
    BitBtn7Click(Sender); //校验数据
    } 
}
//---------------------------------------------------------------------------
//擦除芯片
void __fastcall TForm1::BitBtn4Click(TObject *Sender)
{
  showtime();
  if(enableprogram)
   erase();
}
//---------------------------------------------------------------------------
//进行烧写芯片操作
void __fastcall TForm1::BitBtn6Click(TObject *Sender)
{
  unsigned int maxromsize;
  showtime();
  maxromsize=getromsize();
  if(prom!=NULL) //if1
    {
      if(promsize<maxromsize)
       {
         erase();
         Form1->Memo2->Lines->Add("正进行写数据操作,请稍等......");
         pagewrite(prom,promsize);
       } //end if1
      else
         Form1->Memo2->Lines->Add("错误!烧写文件大于芯片ROM容量,或者通讯设备错误!"); 
     }
  else
   Form1->Memo2->Lines->Add("您还没有打开文件!");
}
//---------------------------------------------------------------------------
//校验
void __fastcall TForm1::BitBtn7Click(TObject *Sender)
{
 unsigned char order[4];
 unsigned int i;
 bool ok;
 showtime();
 if(prom!=NULL) //if1
  {
   ok=true;
   if(readbuff!=NULL)
    {
     delete [] readbuff;
    }
   readbuff=new unsigned char[promsize];
   Form1->Memo2->Lines->Add("正进行从芯片中读取数据进行校验,请稍等......");
   pageread(readbuff,promsize);
   for(i=0;i<promsize;i++)
    {
      if((*(Form1->prom+i))!=(*(readbuff+i)))
       {
        ok=false;
       }
     }
   if(ok)
    {
      Memo2->Lines->Add("芯片内部的数据与打开文件的一样!");
    }
   else
    {
     Memo2->Lines->Add("校验出错");
     delete [] readbuff;
     readbuff=NULL;
    }
   }
 else
  Form1->Memo2->Lines->Add("您还没有打开文件!");
}
//---------------------------------------------------------------------------
//将芯片ROM中的所以数据都读取出来(进行页读)
void __fastcall TForm1::BitBtn5Click(TObject *Sender)
{
  int i;
  showtime();
  if(enableprogram)
  {
   if(readchip!=NULL)
     delete [] readchip;
   i=getromsize();
   if(i!=0)
    {
      readchip=new unsigned char [i];
      Memo2->Lines->Add("正在读取芯片的数据,请稍等......");
      pageread(readchip,i);
      bintohex(readchip);      
      Memo2->Lines->Add("已经将数据转换为HEX文件格式,请参考左边的文本框。");
     }
   else
      Memo2->Lines->Add("不能确定芯片ROM的大小!");
  }
}
//---------------------------------------------------------------------------
//读取芯片的加密位情况
void __fastcall TForm1::BitBtn9Click(TObject *Sender)
{
  showtime();
  relockbit();
}
//---------------------------------------------------------------------------
//加密芯片
void __fastcall TForm1::BitBtn8Click(TObject *Sender)
{
  showtime();
  wrlockbit(3);
  relockbit();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::showtime(void)
{
TDateTime DateTime;
AnsiString str;
DateTime=Time();
str=TimeToStr(DateTime);
Form1->Memo2->Lines->Add(str);
}
//====================================
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//菜单按钮
//open
void __fastcall TForm1::N3Click(TObject *Sender)
{
 BitBtn1Click(Sender);
}
//---------------------------------------------------------------------------
//save
void __fastcall TForm1::N2Click(TObject *Sender)
{
 BitBtn2Click(Sender);
}
//---------------------------------------------------------------------------
//quit
void __fastcall TForm1::exit1Click(TObject *Sender)
{
 Close();
}
//---------------------------------------------------------------------------
//recall
void __fastcall TForm1::N5Click(TObject *Sender)
{
 BitBtn3Click(Sender);
}
//---------------------------------------------------------------------------
//erase
void __fastcall TForm1::N6Click(TObject *Sender)
{
BitBtn4Click(Sender);
}
//---------------------------------------------------------------------------
//read chip
void __fastcall TForm1::N7Click(TObject *Sender)
{
 BitBtn5Click(Sender);
}
//---------------------------------------------------------------------------
//program 
void __fastcall TForm1::N8Click(TObject *Sender)
{
BitBtn6Click(Sender);
}
//---------------------------------------------------------------------------
//verify
void __fastcall TForm1::N13Click(TObject *Sender)
{
BitBtn7Click(Sender);
}
//---------------------------------------------------------------------------
//write lock bit
void __fastcall TForm1::N9Click(TObject *Sender)
{
BitBtn8Click(Sender);
}
//---------------------------------------------------------------------------
//read lock bit
void __fastcall TForm1::N10Click(TObject *Sender)
{
BitBtn9Click(Sender);
}
//---------------------------------------------------------------------------
//read id
void __fastcall TForm1::ID1Click(TObject *Sender)
{
BitBtn10Click(Sender);
}
//---------------------------------------------------------------------------
//AUTO program
void __fastcall TForm1::N12Click(TObject *Sender)
{
BitBtn11Click(Sender);
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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