unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls, OleCtrls, MSCommLib_TLB,
PreDefine,mmSystem,SetComm, ToolWin, Menus, Buttons, ImgList;
type
TMainForm = class(TForm)
StatusBar1: TStatusBar;
ControlBar1: TControlBar;
PopupMenu1: TPopupMenu;
File1: TMenuItem;
File2: TMenuItem;
File3: TMenuItem;
File4: TMenuItem;
Download1: TMenuItem;
SetTrans: TMenuItem;
Help1: TMenuItem;
Help2: TMenuItem;
Help3: TMenuItem;
N1: TMenuItem;
Help4: TMenuItem;
N5: TMenuItem;
File5: TMenuItem;
N7: TMenuItem;
File6: TMenuItem;
Download2: TMenuItem;
Download3: TMenuItem;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton6: TToolButton;
ToolButton4: TToolButton;
ControlBar2: TControlBar;
Panel2: TPanel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
SpeedButton6: TSpeedButton;
SpeedButton8: TSpeedButton;
MSComm1: TMSComm;
Bevel1: TBevel;
Bevel2: TBevel;
Bevel3: TBevel;
Edit1: TEdit;
BitBtn1: TBitBtn;
Setup: TMenuItem;
OpenDlg: TOpenDialog;
SaveDialog1: TSaveDialog;
ToolButton3: TToolButton;
ToolButton5: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton9: TToolButton;
Chip1: TMenuItem;
ATMega81: TMenuItem;
ATMega161: TMenuItem;
ATMega321: TMenuItem;
ATMega641: TMenuItem;
ATMega1281: TMenuItem;
CombChip: TComboBox;
Label1: TLabel;
CombSize: TComboBox;
Label2: TLabel;
Bevel4: TBevel;
Bevel5: TBevel;
ToolButton10: TToolButton;
ToolButton11: TToolButton;
StartSize: TMenuItem;
N128: TMenuItem;
N256: TMenuItem;
N512: TMenuItem;
N1K: TMenuItem;
N2K: TMenuItem;
N4k: TMenuItem;
ToolButton12: TToolButton;
ToolButton13: TToolButton;
Fill1: TMenuItem;
Fill2: TMenuItem;
Fill3: TMenuItem;
CombFill: TComboBox;
Bevel6: TBevel;
Label3: TLabel;
PanProgress: TPanel;
ProgBar: TProgressBar;
Label4: TLabel;
LabProgress: TLabel;
Memo1: TRichEdit;
Timer1: TTimer;
Label5: TLabel;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure MSComm1Comm(Sender: TObject); //串口发送数据
procedure DispData(nLength:Integer); //显示读取数据
procedure DispProgress; //显示下载进程
procedure EnableButton(Sender: TObject);
procedure SpeedButton8Click(Sender: TObject);
procedure SetupClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure ATMega81Click(Sender: TObject);
procedure ATMega161Click(Sender: TObject);
procedure ATMega321Click(Sender: TObject);
procedure ATMega641Click(Sender: TObject);
procedure ATMega1281Click(Sender: TObject);
procedure CombChipChange(Sender: TObject);
procedure N128Click(Sender: TObject);
procedure N256Click(Sender: TObject);
procedure N512Click(Sender: TObject);
procedure N1KClick(Sender: TObject);
procedure N2KClick(Sender: TObject);
procedure N4kClick(Sender: TObject);
procedure CombSizeChange(Sender: TObject);
procedure CombFillChange(Sender: TObject);
procedure Fill2Click(Sender: TObject);
procedure Fill3Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function SendCommStr(Str:Variant):Boolean;
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
procedure TMainForm.FormCreate(Sender: TObject);
var
PortNumb:Integer;
i:Integer;
begin
SendStr :=VarArrayCreate([0, 4], varByte);
Loadsetup;
CombChip.ItemIndex := DownLoadSet.ICType;
CombSize.ItemIndex := DownLoadSet.BootSizeIndex ;
for i:=0 to (CombFill.Items.Count -1) do
if CombFill.Items[i] = IntToHex(DownLoadSet.Fill,2) then
CombFill.ItemIndex := i;
LoadCommSetup;
if MSComm1.PortOpen then
MSComm1.PortOpen :=False;
PortNumb :=StrToInt(Copy(CommSetup.Port,4,2));
try
MSComm1.CommPort :=PortNumb;
MSComm1.Settings :=IntToStr(CommSetup.bps)+','+CommSetup.Ord +IntToStr(CommSetup.Numb)+',1';
except
MessageDlg('通讯端口设置错误!',mtInformation,[mbOk],0);
end;
PortOpenError :=False;
try
MSComm1.PortOpen :=True;
except
MessageDlg('通讯端口打开错误!',mtError,[mbOk],0);
PortOpenError :=True;
end;
EnableButton(Self);
end;
function TMainForm.SendCommStr(Str:Variant):Boolean;
begin
if not MSComm1.PortOpen then
MSComm1.PortOpen :=True;
MSComm1.Output :=Str; // Variant VarArrayCreate varByte VarArrayCreate([0, 4], varVariant)
SendCommStr :=True;
end;
procedure TMainForm.MSComm1Comm(Sender: TObject);
var
oStr : OleVariant ;
ss : String;
i,j,k:integer;
begin
if MSComm1.CommEvent = comEvReceive then begin
oStr := MSComm1.Input ;
ss :=oStr;
if DownLoadSet.DownCond <> 0 then begin
Edit1.Text :=Edit1.Text +Trim(ss);
InputStr :=InputStr+Trim(ss);
for i:=1 to Length(InputStr) do begin
case InputStr[i] of
'{':begin
ss :='';
end;
'}':begin
Break;
end;
else
ss :=ss + InputStr[i];
end;
end;
case DownLoadSet.DownCond of //0:完成,1:等待下载,2:准备下载,3:正在下载
1:begin
if ss='BL' then begin
DownLoadSet.DownCond :=2;
DownTime :=0; //下载时间
VarArrayRedim(SendStr, 3);
SendStr[0] := Ord('{');
SendStr[1] := Ord('L');
SendStr[2] := Ord('B');
SendStr[3] := Ord('}');
SendCommStr(SendStr);
end;
end;
2:begin
if ss='GD' then begin
DownLoadSet.DownCond :=3;
DownTime :=0; //下载时间
VarArrayRedim(SendStr,72);
DownLoadSet.DownError :=False; //发送正确
DownLoadSet.NowPos:=0;
if DownLoadSet.NowPos < DownLoadSet.StartPos then
DownLoadSet.NowPos:= DownLoadSet.StartPos;
DownLoadSet.NowPageNo := DownLoadSet.NowPos div DownLoadSet.BytePerPage ;
DownLoadSet.NowPos := (DownLoadSet.NowPageNo)* DownLoadSet.BytePerPage;
CreateSendStr;
DownLoadSet.NowPageNo := DownLoadSet.NowPageNo+1;
DownLoadSet.NowPos := DownLoadSet.NowPos + DownLoadSet.BytePerPage ;
SendCommStr(SendStr); //发送数据
end;
end;
3:begin
if ss='OK' then begin
DownLoadSet.DownCond :=0; //下载完毕
DownTime :=0; //下载时间
Timer1.Enabled :=False; //下载定时器停止
DownLoadSet.DownError :=False; //发送正确
PanProgress.Visible :=False;
MessageDlg('下载完毕!',mtInformation,[mbOK],0);
InDownLoad :=False;
EnableButton(self);
ProgBar.Position := ProgBar.Max;
end else
if ss='Err' then begin
DownTime :=0; //下载时间
DownLoadSet.DownError :=True; //发送错误
DownLoadSet.NowPageNo := DownLoadSet.NowPageNo-1;