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

📄 gpstestu.pas

📁 根据水潭改编
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  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 + -