Delphi调用API函数操作串口

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

再贴上一段用API操作串口的代码,还是API好,一目了然,呵呵。

unit main;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Memo1: TMemo;

Memo2: TMemo;

Label1: TLabel;

Label2: TLabel;

RadioGroup1: TRadioGroup;

Button3: TButton;

Button4: TButton;

procedure Button1Click(Sender: TObject);

procedure OpenSerialPort;

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

hSerialPort:Cardinal;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

OpenSerialPort;

end;

procedure tform1.OpenSerialPort;

var

cc:TCommConfig;

Temp:string;

begin

Temp:='Com'+inttostr(RadioGroup1.ItemIndex+1); hSerialPort:=CreateFile(PChar(Temp),GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,0,0);

if (hSerialPort=invalid_handle_value) then

begin

MessageBox(0,'打开串口失败','',MB_OK);

Exit;

end;

GetCommState(hSerialPort,cc.dcb);

cc.dcb.BaudRate:=CBR_9600;

cc.dcb.ByteSize:=8;

cc.dcb.Parity:=NOPARITY;

cc.dcb.StopBits:=ONESTOPBIT;

if not SetCommState(hSerialPort,cc.dcb) then

begin

ShowMessage('不能设置串口');

CloseHandle(hSerialPort);

Exit;

end

else

ShowMessage('打开,并设置成功!');

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

if hSerialPort<>0 then CloseHandle(hSerialPort);

Exit;

end;

procedure TForm1.Button3Click(Sender: TObject);

var

temp:string;

lw:LongWord;

begin

if hSerialPort=0 then Exit;

temp:=Memo1.Text;

WriteFile(hSerialPort,PChar(temp)^,Length(temp),lw,nil); end;

procedure TForm1.Button4Click(Sender: TObject);

var

tempString:string;

inBuff:array[0..2047]of Char;

bytesRead,dwError:LongWord;

cs:TComStat;

begin

ClearCommError(hSerialPort,dwError,@cs);

if cs.cbInQue>SizeOf(inBuff)then

begin

PurgeComm(hSerialPort,PURGE_RXCLEAR);

Exit;

end;

ReadFile(hSerialPort,inBuff,cs.cbInQue,bytesRead,nil); tempString:=Copy(inBuff,1,cs.cbInQue);

Memo2.Text:=tempString;

end;

end.

测试软件代码下载:/onews.asp?/123.html

相关文档
最新文档