📄 uautocode.pas
字号:
cbbErr.Color := clWindow;
end
else
begin
if edtErr <> nil then
edtErr.Color := clRed;
if cbbErr <> nil then
cbbErr.Color := clRed;
end;
tmrErr.Tag := tmrErr.Tag - 1;
end
else
begin
if edtErr <> nil then
begin
edtErr.Color := clWindow;
edtErr := nil;
end;
if cbbErr <> nil then
begin
cbbErr.Color := clWindow;
cbbErr := nil;
end;
tmrErr.Enabled := False;
end;
end;
procedure TfrmAutoCode.setcbbErr(cbb: TComboBox);
begin
cbbErr := cbb;
tmrErr.Tag := 6;
tmrErr.Enabled := True;
end;
procedure TfrmAutoCode.setedtErr(edt: TEdit);
begin
edtErr := edt;
tmrErr.Tag := 6;
tmrErr.Enabled := True;
end;
procedure TfrmAutoCode.FormShow(Sender: TObject);
var
buf: CBuf;
i: Integer;
begin
Idle := True;
edtErr := nil;
cbbErr := nil;
//cbbMCU.Sorted := True;
case cfg.FlashSize of
0, 1: cbbMCU.Text := '';
2: cbbMCU.Text := 'ATmega88';
3: cbbMCU.Text := 'ATmega168';
4: cbbMCU.Text := 'ATmega32';
5: cbbMCU.Text := 'ATmega64';
6: cbbMCU.Text := 'ATmega128';
7: cbbMCU.Text := 'ATmega2560';
end;
cbbCportBaudRate.Refresh;
cbbBaudRate.Items := cbbCportBaudRate.Items;
cbbBaudRate.ItemIndex := Ord(frmMain.ComPort.BaudRate);
if cbbBaudRate.ItemIndex = -1 then
cbbBaudRate.ItemIndex := 9;
cbbComPortNo.ItemIndex := 0;
cbbBufferSize.Text := IntToStr(cfg.FrameLen);
cbbCRC.ItemIndex := cfg.Protocol;
if cbbCRC.ItemIndex = -1 then
cbbCRC.ItemIndex := 0;
cbbBootLevel.ItemIndex := 0;
cbbBootMode.ItemIndex := 0;
cbbPINRS485.ItemIndex := 5;
cbbPINLED.ItemIndex := 6;
cbbPINLevel.ItemIndex := 7;
cbbBufferSize.Text := IntToStr(cfg.FrameLen);
cbbTimeClk.Text := IntToStr(cfg.SendTime);
cbbBootCnt.Text := IntToStr(cfg.BootCnt);
if FlashSize[cfg.FlashSize] > 4096 then
cbbBootStart.Text := '0x' + IntToHex((FlashSize[cfg.FlashSize] - 2048) div 2, 4);
cbbByteWord.Tag := 1;
cbbByteWord.ItemIndex := 1;
cbbByteWordChange(Sender);
cbbMCUChange(Sender);
edtKeyHEX.Text := FormatHexStr(cfg.keyHEX, buf);
Font.Name := cfg.FontName;
Font.Size := cfg.FontSize;
chkLED.Checked := True;
chkLEDClick(Sender);
if cbbAlgorithm.ItemIndex = -1 then
cbbAlgorithm.ItemIndex := 0;
for i := 0 to ComponentCount - 1 do
if Components[i] is TComboBox then
begin
TComboBox(Components[i]).SelLength := 0;
end;
end;
procedure TfrmAutoCode.cbbByteWordChange(Sender: TObject);
var
s: string;
i: Integer;
t: Integer;
begin
if cbbByteWord.ItemIndex <> cbbByteWord.Tag then
begin
s := cbbBootStart.Text;
for i := 0 to cbbBootStart.Items.Count - 1 do
begin
t := StrToInt(cbbBootStart.Items.Strings[i]);
if cbbByteWord.ItemIndex = 0 then
t := t * 2
else
t := t div 2;
cbbBootStart.Items.Strings[i] := '0x' + IntToHex(t, 4);
end;
cbbByteWord.Tag := cbbByteWord.ItemIndex;
try
t := StrToInt(s);
if cbbByteWord.ItemIndex = 0 then
t := t * 2
else
t := t div 2;
cbbBootStart.Text := '0x' + IntToHex(t, 4);
except
end;
end;
end;
procedure TfrmAutoCode.cbbMCUChange(Sender: TObject);
begin
case getAVRType of
1:
begin
if cbbByteWord.ItemIndex = 0 then
begin
cbbBootStart.Items.Text := '0x1800' + #13#10 + '0x1C00' + #13#10 + '0x1E00' + #13#10 + '0x1F00';
end
else
begin
cbbBootStart.Items.Text := '0x0C00' + #13#10 + '0x0E00' + #13#10 + '0x0F00' + #13#10 + '0x0F80';
end;
end;
2:
begin
if cbbByteWord.ItemIndex = 0 then
begin
cbbBootStart.Items.Text := '0x3800' + #13#10 + '0x3C00' + #13#10 + '0x3E00' + #13#10 + '0x3F00';
end
else
begin
cbbBootStart.Items.Text := '0x1C00' + #13#10 + '0x1E00' + #13#10 + '0x1F00' + #13#10 + '0x1F80';
end;
end;
3:
begin
if cbbByteWord.ItemIndex = 0 then
begin
if CompareText(cbbMCU.Text, 'AT90CAN32') = 0 then
cbbBootStart.Items.Text := '0x6000' + #13#10 + '0x7000' + #13#10 + '0x7800' + #13#10 + '0x7C00'
else
cbbBootStart.Items.Text := '0x7000' + #13#10 + '0x7800' + #13#10 + '0x7C00' + #13#10 + '0x7E00';
end
else
begin
if CompareText(cbbMCU.Text, 'AT90CAN32') = 0 then
cbbBootStart.Items.Text := '0x3000' + #13#10 + '0x3800' + #13#10 + '0x3C00' + #13#10 + '0x3E00'
else
cbbBootStart.Items.Text := '0x3800' + #13#10 + '0x3C00' + #13#10 + '0x3E00' + #13#10 + '0x3F00';
end;
end;
4:
begin
if cbbByteWord.ItemIndex = 0 then
begin
cbbBootStart.Items.Text := '0x9000' + #13#10 + '0x9800' + #13#10 + '0x9C00' + #13#10 + '0x9E00';
end
else
begin
cbbBootStart.Items.Text := '0x4800' + #13#10 + '0x4C00' + #13#10 + '0x4E00' + #13#10 + '0x4F00';
end;
end;
5:
begin
if cbbByteWord.ItemIndex = 0 then
begin
cbbBootStart.Items.Text := '0xE000' + #13#10 + '0xF000' + #13#10 + '0xF800' + #13#10 + '0xFC00';
end
else
begin
cbbBootStart.Items.Text := '0x7000' + #13#10 + '0x7800' + #13#10 + '0x7C00' + #13#10 + '0x7E00';
end;
end;
6:
begin
if cbbByteWord.ItemIndex = 0 then
begin
cbbBootStart.Items.Text := '0x1E000' + #13#10 + '0x1F000' + #13#10 + '0x1F800' + #13#10 + '0x1FC00';
end
else
begin
cbbBootStart.Items.Text := '0xF000' + #13#10 + '0xF800' + #13#10 + '0xFC00' + #13#10 + '0xFE00';
end;
end;
7:
begin
if cbbByteWord.ItemIndex = 0 then
begin
cbbBootStart.Items.Text := '0x3E000' + #13#10 + '0x3F000' + #13#10 + '0x3F800' + #13#10 + '0x3FC00';
end
else
begin
cbbBootStart.Items.Text := '0x1F000' + #13#10 + '0x1F800' + #13#10 + '0x1FC00' + #13#10 + '0x1FE00';
end;
end;
else
if cbbByteWord.ItemIndex = 0 then
begin
cbbBootStart.Items.Text := '0x1800' + #13#10 + '0x1C00' + #13#10 + '0x1E00' + #13#10 + '0x1F00' + #13#10 +
'0x3800' + #13#10 + '0x3C00' + #13#10 + '0x3E00' + #13#10 + '0x3F00' + #13#10 +
'0x6000' + #13#10 + '0x7000' + #13#10 + '0x7800' + #13#10 + '0x7C00' + #13#10 + '0x7E00' + #13#10 +
'0x9000' + #13#10 + '0x9800' + #13#10 + '0x9C00' + #13#10 + '0x9E00' + #13#10 +
'0xE000' + #13#10 + '0xF000' + #13#10 + '0xF800' + #13#10 + '0xFC00' + #13#10 +
'0x1E000' + #13#10 + '0x1F000' + #13#10 + '0x1F800' + #13#10 + '0x1FC00' + #13#10 +
'0x3E000' + #13#10 + '0x3F000' + #13#10 + '0x3F800' + #13#10 + '0x3FC00';
end
else
begin
cbbBootStart.Items.Text := '0x0C00' + #13#10 + '0x0E00' + #13#10 + '0x0F00' + #13#10 + '0x0F80' + #13#10 +
'0x1C00' + #13#10 + '0x1E00' + #13#10 + '0x1F00' + #13#10 + '0x1F80' + #13#10 +
'0x3000' + #13#10 + '0x3800' + #13#10 + '0x3C00' + #13#10 + '0x3E00' + #13#10 + '0x3F00' + #13#10 +
'0x4800' + #13#10 + '0x4C00' + #13#10 + '0x4E00' + #13#10 + '0x4F00' + #13#10 +
'0x7000' + #13#10 + '0x7800' + #13#10 + '0x7C00' + #13#10 + '0x7E00' + #13#10 +
'0xF000' + #13#10 + '0xF800' + #13#10 + '0xFC00' + #13#10 + '0xFE00' + #13#10 +
'0x1F000' + #13#10 + '0x1F800' + #13#10 + '0x1FC00' + #13#10 + '0x1FE00';
end;
end;
cbbBootStart.ItemIndex := 0;
end;
function TfrmAutoCode.getAVRType: Integer;
begin
Result := 0; //unknow
//8K: 10
if (CompareText(cbbMCU.Text, 'ATmega8') = 0) or
(CompareText(cbbMCU.Text, 'ATmega88') = 0) or
(CompareText(cbbMCU.Text, 'ATmega88P') = 0) or
(CompareText(cbbMCU.Text, 'AT90PWM2') = 0) or
(CompareText(cbbMCU.Text, 'AT90PWM2B') = 0) or
(CompareText(cbbMCU.Text, 'AT90PWM3') = 0) or
(CompareText(cbbMCU.Text, 'AT90PWM324') = 0) or
(CompareText(cbbMCU.Text, 'AT90PWM3B') = 0) or
(CompareText(cbbMCU.Text, 'ATMega8515') = 0) or
(CompareText(cbbMCU.Text, 'ATMega8535') = 0)
then
begin
Result := 1;
Exit;
end;
//16K: 14
if (CompareText(cbbMCU.Text, 'ATmega16') = 0) or
(CompareText(cbbMCU.Text, 'AT90PWM216') = 0) or
(CompareText(cbbMCU.Text, 'AT90PWM316') = 0) or
(CompareText(cbbMCU.Text, 'ATMega162') = 0) or
(CompareText(cbbMCU.Text, 'ATMega163') = 0) or
(CompareText(cbbMCU.Text, 'ATMega164P') = 0) or
(CompareText(cbbMCU.Text, 'ATMega165') = 0) or
(CompareText(cbbMCU.Text, 'ATMega165P') = 0) or
(CompareText(cbbMCU.Text, 'ATMega168') = 0) or
(CompareText(cbbMCU.Text, 'ATMega168P') = 0) or
(CompareText(cbbMCU.Text, 'ATMega169') = 0) or
(CompareText(cbbMCU.Text, 'ATMega169P') = 0) or
(CompareText(cbbMCU.Text, 'ATmega328P') = 0)
then
begin
Result := 2;
Exit;
end;
//32K: 12
if (CompareText(cbbMCU.Text, 'ATmega32') = 0) or
(CompareText(cbbMCU.Text, 'ATmega323') = 0) or
(CompareText(cbbMCU.Text, 'ATmega324P') = 0) or
(CompareText(cbbMCU.Text, 'ATmega325') = 0) or
(CompareText(cbbMCU.Text, 'ATmega3250') = 0) or
(CompareText(cbbMCU.Text, 'ATmega3250P') = 0) or
(CompareText(cbbMCU.Text, 'ATmega329') = 0) or
(CompareText(cbbMCU.Text, 'ATmega3290') = 0) or
(CompareText(cbbMCU.Text, 'ATmega3290P') = 0) or
(CompareText(cbbMCU.Text, 'ATmega329P') = 0) or
(CompareText(cbbMCU.Text, 'ATmega32HVB') = 0) or
(CompareText(cbbMCU.Text, 'AT90CAN32') = 0)
then
begin
Result := 3;
Exit;
end;
//40K: 1
if (CompareText(cbbMCU.Text, 'ATmega406') = 0)
then
begin
Result := 4;
Exit;
end;
//64K: 9
if (CompareText(cbbMCU.Text, 'ATmega64') = 0) or
(CompareText(cbbMCU.Text, 'ATmega640') = 0) or
(CompareText(cbbMCU.Text, 'ATmega644') = 0) or
(CompareText(cbbMCU.Text, 'ATmega644P') = 0) or
(CompareText(cbbMCU.Text, 'ATmega645') = 0) or
(CompareText(cbbMCU.Text, 'ATmega6450') = 0) or
(CompareText(cbbMCU.Text, 'ATmega649') = 0) or
(CompareText(cbbMCU.Text, 'ATmega6490') = 0) or
(CompareText(cbbMCU.Text, 'AT90CAN64') = 0)
then
begin
Result := 5;
Exit;
end;
//128K: 5
if (CompareText(cbbMCU.Text, 'ATmega128') = 0) or
(CompareText(cbbMCU.Text, 'ATmega1280') = 0) or
(CompareText(cbbMCU.Text, 'ATmega1281') = 0) or
(CompareText(cbbMCU.Text, 'ATmega1284P') = 0) or
(CompareText(cbbMCU.Text, 'AT90CAN128') = 0) then
begin
Result := 6;
Exit;
end;
//256K: 2
if (CompareText(cbbMCU.Text, 'ATmega2560') = 0) or
(CompareText(cbbMCU.Text, 'ATmega2561') = 0)
then
begin
Result := 7;
Exit;
end;
end;
procedure TfrmAutoCode.cbbTimeClkChange(Sender: TObject);
begin
try
Timer.Interval := StrToInt(cbbTimeClk.Text);
if Timer.Interval < 100 then
Timer.Interval := 100;
except
Timer.Interval := 200;
end;
end;
procedure TfrmAutoCode.FormCreate(Sender: TObject);
begin
edtEncryptKey.Text := 'D0 94 3F 8C 29 76 15 D8 20 40 E3 27 45 D8 48 AD EA 8B 2A 73 16 E9 B0 49 45 B3 39 28 0A C3 28 3C';
edtDecryptKey.Text := 'D0 94 3F 8C 29 76 15 D8 20 40 E3 27 45 D8 48 AD EA 8B 2A 73 16 E9 B0 49 45 B3 39 28 0A C3 28 3C';
end;
procedure TfrmAutoCode.btnRandomKeyClick(Sender: TObject);
var
i: Integer;
s: string;
begin
Randomize;
s := '';
for i := 0 to 31 do
begin
s := s + IntToHex(Random(256), 2) + ' ';
end;
edtEncryptKey.Text := s;
edtDecryptKey.Text := s;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -