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

📄 ce_series.pas

📁 Lazarus编写的WINCE上读写串口的程序例子
💻 PAS
字号:


unit CE_Series;
interface
uses
  Windows,Classes, SysUtils, LResources, StdCtrls,ExtCtrls;
  

type
  TCE_Series = class(TObject)
  
  private
    hComm: THandle;
  public
    Function OpenPort(Port:LPCWSTR;BaudRate,ByteSize,Parity,StopBits:integer):String;
    procedure Send(str:String);
    Function Receive():String;
    procedure ClosePort();
  end;


implementation


//===============================================================================================
// 语法格式:OpenPort(Port:LPCWSTR;BaudRate,ByteSize,Parity,StopBits:integer)
// 实现功能:打开串口
// 参数:port,串口号;例如wince下为从COM1:,COM2:.....win32下为COM1,COM2....... ;其他略,顾名思义哈
// 返回值:错误信息
//===============================================================================================
function TCE_Series.OpenPort(Port:LPCWSTR;BaudRate,ByteSize,Parity,StopBits:integer):String;
var
  cc:TCOMMCONFIG;
begin
  result:='';
  hComm:=CreateFile(port, GENERIC_READ or GENERIC_WRITE,
       0, nil, OPEN_EXISTING, 0, 0); // 打开COM
  if (hComm = INVALID_HANDLE_VALUE) then begin  // 如果COM 未打开
    result:='CreateFile Error!';
    exit;
  end;

  GetCommState(hComm,cc.dcb); // 得知目前COM 的状态
  cc.dcb.BaudRate:=BaudRate; // 设置波特率为BaudRate
  cc.dcb.ByteSize:=ByteSize;  // 字节为 ByteSize(8 bit)
  cc.dcb.Parity:=Parity; // Parity 为 None
  cc.dcb.StopBits:=StopBits; // 1 个Stop bit
  
  if not SetCommState(hComm, cc.dcb) then begin// 设置COM 的状态
    result:='SetCommState Error!';
    CloseHandle(hComm);
    exit;
  end;
end;

//===============================================================================================
// 语法格式:Send(str:String)
// 实现功能:发送数据
// 参数:str,数据
// 返回值:无
//===============================================================================================
procedure TCE_Series.Send(str:String);
var
  lrc:LongWord;
begin
  if (hComm=0) then exit; //检查Handle值
  WriteFile(hComm,str,Length(str), lrc, nil); // 送出数据
end;


//=====================================================================
//语法格式: Receive()
//实现功能: 接收串口数据
//参数:     无
//返回值:   收到的字符串
//=====================================================================
Function TCE_Series.Receive():String;
var
  inbuff: array[0..2047] of Char;
  nBytesRead, 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 的数据
   //转移数据到变量中
   result:=Copy(inbuff,1,cs.cbInQue);//返回数据
end;                             


//=====================================================================
//语法格式: ClosePort()
//实现功能:关闭串口
//参数:  无
//返回值:  无
//=====================================================================
procedure TCE_Series.ClosePort();
begin
   SetCommMask(hcomm,$0);
   CloseHandle(hComm);
end;


end.

⌨️ 快捷键说明

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