📄 gpstestu.pas
字号:
Edit12.Text := '等待接收...';
Edit13.Text := '等待接收...';
Edit14.Text := '等待接收...';
Edit15.Text := '等待接收...';
Edit16.Text := '等待接收...';
Edit17.Text := '等待接收...';
Memo1.Clear;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
if StringGrid1.Cells[1, StringGrid1.RowCount - 1] <> '' then
begin
StringGrid1.RowCount := StringGrid1.RowCount + 1;
StringGrid1.Cells[0, StringGrid1.RowCount - 1] := inttostr(StringGrid1.RowCount - 1);
end;
StringGrid1.Cells[1, StringGrid1.RowCount - 1] := Edit4.Text;//经度
StringGrid1.Cells[2, StringGrid1.RowCount - 1] := Edit5.Text;//纬度
StringGrid1.Cells[3, StringGrid1.RowCount - 1] := Edit3.Text;//速度
end;
procedure TForm1.ComboBox2Change(Sender: TObject);
begin
Comm1.PortOpen := false;
Comm1.BaudRate := strtoint(ComboBox2.Items[ComboBox2.ItemIndex]);//波特率4800
StatusBar1.Panels.Items[1].Text := '波特率已更改请重新打开串口';
end;
procedure TForm1.BitBtn6Click(Sender: TObject);
var
sum: byte;
i, j: integer;
str: string;
begin
if Comm1.PortOpen then
begin
for i := 1 to 14 do
begin
str := '$PGRMO,' + TCheckBox(GroupBox2.Controls[i]).Caption + ',';
if TCheckBox(GroupBox2.Controls[i]).Checked then str := str + '1'
else str := str + '0';
sum := 0;
for j := 2 to length(str) do
begin
sum := sum xor byte(str[j]);
end;
str := str+ '*' + inttohex(sum, 2) + #13#10;
Comm1.Output := str;
end;
sum := 0;
str := '$PGRMC1,1,,,,,,,N,N';
for i := 2 to length(str) do
begin
sum := sum xor byte(str[i]);
end;
str := str+ '*' + inttohex(sum, 2) + #13#10;
Comm1.Output := str;
end;
end;
procedure TForm1.BitBtn5Click(Sender: TObject);
var
i: integer;
sum: byte;
str: string;
begin
if Comm1.PortOpen then
begin
sum := 0;
str := '$PGRMC,A,,,,,,,,,' + inttostr(ComboBox3.ItemIndex + 1) + ',,,1';
for i := 2 to length(str) do
begin
sum := sum xor byte(str[i]);
end;
str := str+ '*' + inttohex(sum, 2) + #13#10;
Comm1.Output := str;
StatusBar1.Panels.Items[1].Text := '请关闭GPS电源,在上电后新波特率才有效!!!';
end;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
var
i: integer;
sum: byte;
str: string;
begin
if Comm1.PortOpen then
begin
sum := 0;
str := '$PGRMIX';
for i := 2 to length(str) do
begin
sum := sum xor byte(str[i]);
end;
str := str+ '*' + inttohex(sum, 2) + #13#10;
Comm1.Output := str;
sum := 0;
str := '$PGRMCX';
for i := 2 to length(str) do
begin
sum := sum xor byte(str[i]);
end;
str := str+ '*' + inttohex(sum, 2) + #13#10;
Comm1.Output := str;
sum := 0;
str := '$PGRMC1X';
for i := 2 to length(str) do
begin
sum := sum xor byte(str[i]);
end;
str := str+ '*' + inttohex(sum, 2) + #13#10;
Comm1.Output := str;
sum := 0;
str := '$PGRMO,GPALM,1';
for i := 2 to length(str) do
begin
sum := sum xor byte(str[i]);
end;
str := str+ '*' + inttohex(sum, 2) + #13#10;
Comm1.Output := str;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
i: integer;
sum: byte;
str: string;
begin
if Comm1.PortOpen then
begin
if Timer1.Tag = 0 then
begin
Comm1.PortOpen := false;
if ComboBox2.ItemIndex >= (ComboBox2.Items.Count - 1) then ComboBox2.ItemIndex := 0
else ComboBox2.ItemIndex := ComboBox2.ItemIndex + 1;
Comm1.BaudRate := strtoint(ComboBox2.Items[ComboBox2.ItemIndex]);//波特率4800
Comm1.PortOpen := true;
sum := 0;
str := '$PGRMIX';
for i := 2 to length(str) do
begin
sum := sum xor byte(str[i]);
end;
str := str+ '*' + inttohex(sum, 2) + #13#10;
Comm1.Output := str;
sum := 0;
str := '$PGRMCX';
for i := 2 to length(str) do
begin
sum := sum xor byte(str[i]);
end;
str := str+ '*' + inttohex(sum, 2) + #13#10;
Comm1.Output := str;
sum := 0;
str := '$PGRMC1X';
for i := 2 to length(str) do
begin
sum := sum xor byte(str[i]);
end;
str := str+ '*' + inttohex(sum, 2) + #13#10;
Comm1.Output := str;
sum := 0;
str := '$PGRMO,GPALM,1';
for i := 2 to length(str) do
begin
sum := sum xor byte(str[i]);
end;
str := str+ '*' + inttohex(sum, 2) + #13#10;
Comm1.Output := str;
end;
// Timer1.Tag := 0;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
str: String;
i, k: integer;
s: byte;
begin
str := Edit18.Text;
i := Pos('*', str);
if (i < 10) or (str[1] <> '$') then
begin
Exit;
end;
s := 0;
for k := 2 to i - 1 do
begin
s := s xor byte(str[k]);
end;
Edit19.Text :=inttohex(s, 2);
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
StatusBar1.Panels.Items[3].Text:= FormatDateTime('yyyy"年"mm"月"dd"日"', Now());
StatusBar1.Panels.Items[4].Text:= FormatDateTime('hh:mm:ss', Now());
end;
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
ch: char;
name: String;
begin
Timer1.Tag := Timer1.Tag + 1;
move(Buffer^, ch, 1);
if ch >= ' ' then GPSBuffers := GPSBuffers + ch
else
begin
if ch = #10 then GPSBuffers := ''
else if ch = #13 then
begin
if GPSBuffers[1] = '$' then
begin
if Memo1.Lines.Count >= 88 then
Memo1.Lines.Clear;
Memo1.Lines.Add(GPSBuffers);
name := GetGpsMess(GPSBuffers, 0);
if name = 'GPGGA' then
begin
Edit2.Text := GpsTimeFormat(GetGpsMess(GPSBuffers, 1));//时间
Edit4.Text := GetGpsMess(GPSBuffers, 4);//经度
Edit5.Text := GetGpsMess(GPSBuffers, 2);//纬度
Edit6.Text := GetGpsMess(GPSBuffers, 7);//星数
Edit7.Text := GetGpsMess(GPSBuffers, 6);//状态
Edit8.Text := GetGpsMess(GPSBuffers, 9);//高度
StatusBar1.Panels.Items[1].Text := '以GPGGA方式接收';
end
else if name = 'GPRMC' then
begin
Edit1.Text := GpsDateFormat(GetGpsMess(GPSBuffers, 9));//日期
Edit2.Text := GpsTimeFormat(GetGpsMess(GPSBuffers, 1));//时间
Edit3.Text := GetGpsMess(GPSBuffers, 7);//速度
Edit17.Text := GetGpsMess(GPSBuffers, 8);//方向
Edit4.Text := GetGpsMess(GPSBuffers, 5);//经度
Edit5.Text := GetGpsMess(GPSBuffers, 3);//纬度
StatusBar1.Panels.Items[1].Text := '以GPRMC方式接收';
end
else Exit;
if Edit15.Text = '' then
begin
Edit15.Text := Edit2.Text;//时间
Edit9.Text := Edit4.Text;
Edit10.Text := Edit4.Text;
Edit12.Text := Edit5.Text;
Edit13.Text := Edit5.Text;
end
else
begin
if Edit9.Text < Edit4.Text then Edit9.Text := Edit4.Text;
if Edit10.Text > Edit4.Text then Edit10.Text := Edit4.Text;
if Edit12.Text < Edit5.Text then Edit12.Text := Edit5.Text;
if Edit13.Text > Edit5.Text then Edit13.Text := Edit5.Text;
Edit11.Text := inttostr(strtoint(copy(Edit9.Text, 7, 4)) - strtoint(copy(Edit10.Text, 7, 4)));
Edit14.Text := inttostr(strtoint(copy(Edit12.Text, 6, 4)) - strtoint(copy(Edit13.Text, 6, 4)));
Edit16.Text := FormatFloat('0.00', 0.1805 * sqrt(sqr(strtoint(Edit11.Text)) + sqr(strtoint(Edit14.Text)))) + '米';
end;
end;
end
else
begin
StatusBar1.Panels.Items[1].Text := '波特率设置错误!!!';
Comm1.PortOpen := false;
if ComboBox2.ItemIndex >= (ComboBox2.Items.Count - 1) then ComboBox2.ItemIndex := 0
else ComboBox2.ItemIndex := ComboBox2.ItemIndex + 1;
Comm1.BaudRate := strtoint(ComboBox2.Items[ComboBox2.ItemIndex]);//波特率4800
Comm1.PortOpen := true;
end;
end;
end;
procedure TForm1.BitBtn7Click(Sender: TObject);
begin
Map1.Extent := Map1.FullExtent;
end;
procedure TForm1.BitBtn8Click(Sender: TObject);
var
r : IMoRectangle;
begin
r := IMoRectangle(CreateOleObject('MapObjects2.Rectangle'));
r := Map1.Extent;
r.ScaleRectangle(1.5);
Map1.Extent :=r;
end;
procedure TForm1.Map1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
r : IMoRectangle;
begin
r := IMoRectangle(CreateOleObject('MapObjects2.Rectangle'));
r := Map1.TrackRectangle;
if r<>NIL then Map1.Extent :=r;
// if not varisempty(r) then Map1.Extent :=r;
end;
procedure TForm1.BitBtn9Click(Sender: TObject);
var
r : IMoRectangle;
begin
r := IMoRectangle(CreateOleObject('MapObjects2.Rectangle'));
r := Map1.Extent;
r.ScaleRectangle(0.5);
Map1.Extent :=r;
end;
procedure TForm1.Q1Click(Sender: TObject);
begin
application.terminate;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -