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

📄 unit1.pas

📁 RS232串口通讯随书源码
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, TComm1, ExtCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    mReceive: TMemo;
    Button1: TButton;
    Button2: TButton;
    rdCOM: TRadioGroup;
    Button4: TButton;
    Comm1: TComm;
    Label4: TLabel;
    txtVoltage: TEdit;
    txtCmd: TEdit;
    Button3: TButton;
    procedure Button4Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  PowerDelay:Integer;
  Procedure TimeDelay(DT:DWORD);

implementation

{$R *.DFM}

//以下是延迟函数,单位毫秒
Procedure TimeDelay(DT:DWORD);
var
 TT:DWORD;
begin
  //取得现在的Tick值
  TT:=GetTickCount();
  //计算Tick差值是否超过设置值
  while GetTickCount()-TT<DT do
   Application.ProcessMessages; //释放控制权
end;


procedure TForm1.Button4Click(Sender: TObject);
begin
  //确定使用的通信端口号码
  if rdCOM.ItemIndex =0 then
    Comm1.CommPort := pnCOM1
  else
    Comm1.CommPort := pnCOM2;
  //打开通信端口
  Comm1.PortOpen := True;
  Button1.Enabled := True;
  Button3.Enabled := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Buf : String;
  BufLen,i : Integer;
begin
  PowerDelay := 50; //延迟设置
  Buf := (txtCmd.Text); //命令字符串指定
  BufLen := Length(Buf); //取得长度
  //每个字符分别送出
  For i := 1 To BufLen do
   begin
    Comm1.OutputString(Copy(Buf,i,1));
    TimeDelay(PowerDelay);
   end;
  //送出结尾字符
  Comm1.OutputString( Chr(13));
  TimeDelay(100);
  //取得执行结果
  mReceive.Text := Comm1.Input;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
 PowerDelay,i,Code:Integer;
 SetVoltage:Single;
 Buf : String;
 BufLen : Integer;
begin
 PowerDelay := 50; //设置延迟时间
 //转换字符串为数值
 Val(txtVoltage.Text,SetVoltage ,Code);
 //若数值为0,表示重设
 If SetVoltage = 0 Then
 begin
    Comm1.OutputString('C');TimeDelay (PowerDelay);
    Comm1.OutputString('H'); TimeDelay (PowerDelay);
    Comm1.OutputString('A'); TimeDelay (PowerDelay);
    Comm1.OutputString('N'); TimeDelay (PowerDelay);
    Comm1.OutputString('1'); TimeDelay (PowerDelay);
    Comm1.OutputString(Chr(13));
    TimeDelay(100);
    Comm1.OutputString('O'); TimeDelay (PowerDelay);
    Comm1.OutputString('U'); TimeDelay (PowerDelay);
    Comm1.OutputString('T'); TimeDelay (PowerDelay);
    Comm1.OutputString('0'); TimeDelay (PowerDelay);
    Comm1.OutputString(Chr(13));
    TimeDelay(300);
    mReceive.Text := Comm1.Input ;
    Exit;
  End;
   //以下仅设置第一个波道
   //每个字符均分别送出
    Comm1.OutputString('C'); TimeDelay (PowerDelay);
    Comm1.OutputString('H'); TimeDelay (PowerDelay);
    Comm1.OutputString('A'); TimeDelay (PowerDelay);
    Comm1.OutputString('N'); TimeDelay (PowerDelay);
    Comm1.OutputString('1'); TimeDelay (PowerDelay);
    Comm1.OutputString(Chr(13));
    TimeDelay(100);
    mReceive.Text := mReceive.Text + Comm1.Input ;    
    Buf := FormatFloat('00.00',SetVoltage);
    Buf := 'VSET1 ' + Buf + Chr(13);
    BufLen := Length(Buf);
    //TimeDelay(300);
    For i := 1 To BufLen do
     begin
      Comm1.OutputString(Copy(Buf,i,1));
      TimeDelay (PowerDelay);
     end;
    TimeDelay(300);
    //取得结果
    mReceive.Text := mReceive.Text + Comm1.Input ;
    Comm1.OutputString('O'); TimeDelay (PowerDelay);
    Comm1.OutputString('U'); TimeDelay (PowerDelay);
    Comm1.OutputString('T'); TimeDelay (PowerDelay);
    Comm1.OutputString('1'); TimeDelay (PowerDelay);
    Comm1.OutputString(Chr(13));
    TimeDelay(300);
    //取得结果
    mReceive.Text := mReceive.Text + Comm1.Input ;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  //结束程序
  Close;
end;

end.

⌨️ 快捷键说明

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