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

📄 unit1.pas

📁 RS232 例程 可以监听
💻 PAS
字号:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    rdCOM: TRadioGroup;
    Label1: TLabel;
    mSend: TMemo;
    Label2: TLabel;
    mReceive: TMemo;
    btnOpenPort: TButton;
    btnSend: TButton;
    btnEnd: TButton;
    btnReceive: TButton;
    procedure btnSendClick(Sender: TObject);
    procedure btnOpenPortClick(Sender: TObject);
    procedure btnEndClick(Sender: TObject);
    procedure btnReceiveClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure OpenComm;  //打开通信端口
  end;

var
  Form1: TForm1;
  hComm: THandle;

implementation

{$R *.DFM}

procedure TForm1.btnSendClick(Sender: TObject);
var
  Temp:string;
  lrc:LongWord;
begin
  if (hComm=0) then exit; //检查Handle值
  Temp:=msend.Text ;//取得传送的字符串
  lrc:=strlen(Pchar(Temp));
  //实际的传送动作
  WriteFile(hComm,Pchar(Temp)^,Length(Temp), lrc, nil); // 送出数据      //
end;

procedure TForm1.btnOpenPortClick(Sender: TObject);

begin
  OpenComm;
end;

//以下是打开通信端口的程序
procedure TForm1.OpenComm;
var
  cc:TCOMMCONFIG;
  Temp:string;
begin

  Temp:='COM'+inttostr(rdcom.ItemIndex+3);   // 选择所要打开的COM

  hComm:=CreateFile(PChar(Temp), GENERIC_READ or GENERIC_WRITE,
       0, nil, OPEN_EXISTING, 0, 0); // 打开COM
  if (hComm = INVALID_HANDLE_VALUE) then begin  // 如果COM 未打开
    MessageBox (0, 'error in opening the port!!','',MB_OK);
    exit;
  end;

  GetCommState(hComm,cc.dcb); // 得知目前COM 的状态
  cc.dcb.BaudRate:=CBR_9600; // 设置波特率为9600
  cc.dcb.ByteSize:=7;  // 字节为 8 bit
  cc.dcb.Parity:=EVENPARITY; // Parity 为 None
  cc.dcb.StopBits:= TWOSTOPBITS; // 2 个Stop bit

  if not SetCommState(hComm, cc.dcb) then begin// 设置COM 的状态
    MessageBox (0, 'error in port setting!!!','',MB_OK);
    CloseHandle(hComm);
    exit;
  end;
end;

procedure TForm1.btnEndClick(Sender: TObject);
begin
   SetCommMask(hcomm,$0);
   CloseHandle(hComm);
   close;
end;

procedure TForm1.btnReceiveClick(Sender: TObject);
var
  Temp : string;
  inbuff: array[0..2047] of Char;
  nBytesRead, dwEvent, dwError:LongWORD ;
  cs:TCOMSTAT;
begin
   ClearCommError(hComm,dwError,@CS);  //取得状态
       // 数据是否大于我们所准备的Buffer
   if cs.cbInQue > sizeof(inbuff) then begin
     PurgeComm(hComm, PURGE_RXCLEAR);  // 清除COM 数据
     exit;
   end;
   ReadFile(hComm, inbuff,cs.cbInQue,nBytesRead,nil); // 接收COM 的数据
   //转移数据到变量中
   Temp:=Copy(inbuff,1,cs.cbInQue);
   mReceive.Text :=Temp;   // 将数据显示于Memo1 上
end;

end.

⌨️ 快捷键说明

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