《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 設計應用 > Lazarus實戰開發之串口通信(WINCE/WIN32)
Lazarus實戰開發之串口通信(WINCE/WIN32)
摘要: Lazarus最吸引人的地方就是她的開發方式類似Delphi,支持超好用的RAD開發方式,并且最厲害的地方是她還支持多個平臺,多個CPU,例如ARM9的WINCE。本文要講述的就是“如何使用LAZARUS開發Wince上的串口程序”...
Abstract:
Key words :

  Lazarus最吸引人的地方就是她的開發方式類似Delphi,支持超好用的RAD開發方式,并且最厲害的地方是她還支持多個平臺,多個CPU,例如ARM9的WINCE

  本文要講述的就是“如何使用LAZARUS開發Wince上的串口程序”,并且,本文的串口程序同時支持WINCE和WINXP系統,當然編譯時要選擇平臺啦。WINCE與WINXP在本文中的代碼區別只是OpenPort(‘COM1:’,CBR_9600,8,NOPARITY,ONESTOPBIT);//wince用COM1:表示串口1;WINXP用COM1表示串口1.

  一、建立一個可重用的類,文件名為CE_Series.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.

  二、寫調用程序演示如何使用這個類,請自行加入控件,所用的控件不多:

  unit Unit1;

  {$mode objfpc}{$H+}

  interface

  uses

  Windows,Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,ExtCtrls

  ,CE_Series;

  type

  { TForm1 }

  TForm1 = class(TForm)

  btn_OpenPort: TButton;

  btn_ClosePort: TButton;

  btn_Send: TButton;

  edt_Receive: TMemo;

  GroupBox1: TGroupBox;

  edt_Send: TMemo;

  GroupBox2: TGroupBox;

  Timer1: TTimer;

  procedure btn_ClosePortClick(Sender: TObject);

  procedure btn_OpenPortClick(Sender: TObject);

  procedure btn_SendClick(Sender: TObject);

  procedure Timer1Timer(Sender: TObject);

  private

  { private declarations }

  public

  { public declarations }

  end;

  var

  Form1: TForm1;

  myseries:TCE_Series;

  implementation

  { TForm1 }

  procedure TForm1.btn_OpenPortClick(Sender: TObject);

  begin

  myseries:=TCE_Series.Create;

  myseries.OpenPort(‘COM1:’,CBR_9600,8,NOPARITY,ONESTOPBIT);

  Timer1.Enabled:=true;

  end;

  procedure TForm1.btn_SendClick(Sender: TObject);

  begin

  myseries.Send(edt_Send.Text);

  end;

  procedure TForm1.Timer1Timer(Sender: TObject); //用Timer定時接收數據

  var

  receive:string;

  begin

  receive:=myseries.Receive();

  if receive《》‘’ then

  begin

  edt_Receive.Lines.Add(receive); // 將數據顯示于edt_Receive 上

  end;

  end;

  procedure TForm1.btn_ClosePortClick(Sender: TObject);

  begin

  Timer1.Enabled:=false;

  myseries.ClosePort();

  close;

  end;

  initialization

  {$I unit1.lrs}

  end.

 

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲黄色性网站| 欧美一区国产一区| 国产一区在线看| 国产精品你懂的在线欣赏| 欧美精品一区三区在线观看| 久久人体大胆视频| 久久精品国产一区二区三| 久久aⅴ国产欧美74aaa| 性色一区二区| 性欧美大战久久久久久久免费观看| 中文日韩在线视频| 一区二区三区精品国产| 日韩一区二区精品| 日韩一级黄色片| 亚洲美女毛片| 99riav国产精品| 一区二区日本视频| 一本色道久久综合亚洲精品不卡 | 欧美一区二区三区播放老司机| 亚洲一区二区3| 亚洲一区在线看| 亚洲欧美日本在线| 香蕉久久精品日日躁夜夜躁| 先锋亚洲精品| 久久成人国产精品| 亚洲黄网站黄| 99国产精品国产精品毛片| 一区二区激情视频| 亚洲资源在线观看| 午夜久久福利| 久久久精品性| 欧美成人国产va精品日本一级| 欧美v国产在线一区二区三区| 欧美va天堂在线| 欧美日韩久久不卡| 国产精品久久久久久久久动漫| 国产欧美精品国产国产专区| 狠狠v欧美v日韩v亚洲ⅴ| 在线电影一区| 亚洲免费电影在线观看| 亚洲一区精品在线| 欧美在线观看视频| 亚洲精品久久久蜜桃| 一区二区三区www| 欧美中文字幕精品| 女人色偷偷aa久久天堂| 欧美日韩在线一区二区| 国产欧美va欧美va香蕉在| 国内精品久久久久久久影视麻豆| 在线欧美亚洲| av成人老司机| 欧美一区二区三区播放老司机| 91久久线看在观草草青青| 亚洲图片欧美午夜| 久久激情久久| 欧美精品999| 国产精品日日摸夜夜添夜夜av| 国产一区二区观看| 亚洲娇小video精品| 亚洲伊人一本大道中文字幕| 亚洲第一中文字幕在线观看| 一本色道久久综合精品竹菊 | 欧美日韩国产123区| 国产欧美日本| 亚洲人成网站影音先锋播放| 亚洲小视频在线| 亚洲国产91精品在线观看| 亚洲欧美中文另类| 91久久久在线| 久久er99精品| 欧美日韩性生活视频| 国产专区欧美专区| 99在线精品视频| 亚洲国产精品t66y| 香蕉久久国产| 欧美黄色日本| 国产在线高清精品| 亚洲视频免费在线观看| 亚洲欧美三级伦理| 亚洲国产一区二区三区高清| 亚洲一级电影| 亚洲精品在线免费观看视频| 欧美在线观看你懂的| 欧美日本一道本在线视频| 国内精品久久久| 亚洲一区免费| 亚洲深夜影院| 欧美肥婆在线| 黄色成人在线| 午夜久久久久久久久久一区二区| 一区二区三区高清在线 | 欧美性猛交xxxx免费看久久久 | 毛片av中文字幕一区二区| 国产精品久久久久免费a∨大胸| 亚洲国产欧美一区二区三区丁香婷| 亚洲欧美久久| 亚洲综合精品自拍| 欧美连裤袜在线视频| 国产一区视频在线看| 亚洲一二区在线| 欧美一区日韩一区| 夜夜爽99久久国产综合精品女不卡| 久久国产加勒比精品无码| 欧美日本韩国| 1769国内精品视频在线播放| 校园激情久久| 亚洲欧美自拍偷拍| 欧美日韩精品三区| 亚洲激情专区| 亚洲精品欧美日韩专区| 久久久亚洲欧洲日产国码αv| 国产精品人成在线观看免费 | 国产一区二区三区网站| 亚洲在线成人| 亚洲一级免费视频| 欧美黄色网络| 亚洲黄色高清| 91久久在线| 免费中文字幕日韩欧美| 国产一区日韩欧美| 久久国产精品毛片| 久久久久青草大香线综合精品| 国产麻豆一精品一av一免费| 亚洲一区一卡| 性久久久久久| 国产欧美不卡| 欧美一区影院| 久久一区二区三区四区五区| 黑人一区二区| 亚洲国产精品福利| 麻豆视频一区二区| 亚洲高清在线观看一区| 国产精品乱子久久久久| 一区二区三区精品国产| 欧美mv日韩mv国产网站| 亚洲第一视频网站| 91久久久亚洲精品| 欧美精品福利视频| 亚洲日本激情| 亚洲在线中文字幕| 国产精品福利在线| 亚洲欧美日韩精品久久亚洲区| 欧美一区国产一区| 国产最新精品精品你懂的| 亚洲高清视频的网址| 美日韩精品免费观看视频| 亚洲黄色三级| 亚洲制服少妇| 国产视频久久久久| 亚洲大胆人体视频| 欧美激情一区二区三区成人| 99re6这里只有精品| 亚洲综合色丁香婷婷六月图片| 国产美女精品视频免费观看| 久久精品国产综合精品| 欧美国产日韩一二三区| 99精品热6080yy久久| 校园激情久久| 在线观看视频日韩| 一区二区免费看| 国产视频不卡| 亚洲精品一区二区三区99| 欧美手机在线| 欧美在线高清| 欧美日韩国产大片| 亚洲影视九九影院在线观看| 久久久一本精品99久久精品66| 亚洲福利视频一区二区| 亚洲一线二线三线久久久| 国产无遮挡一区二区三区毛片日本| 亚洲黄色在线观看| 欧美新色视频| 亚洲高清视频在线| 国产精品福利久久久| 亚洲福利在线看| 国产精品av免费在线观看| 久久国产欧美精品| 欧美日本三区| 欧美一区2区三区4区公司二百| 欧美激情中文字幕一区二区| 亚洲欧美精品suv| 欧美粗暴jizz性欧美20| 亚洲午夜精品久久久久久app| 久久中文欧美| 亚洲午夜久久久| 欧美xxx成人| 亚洲综合二区| 欧美国产一区二区三区激情无套| 亚洲综合精品自拍| 欧美成人69av| 性亚洲最疯狂xxxx高清| 欧美日韩国产成人在线免费| 久久av免费一区| 欧美亚州一区二区三区| 亚洲第一福利视频| 国产精品入口日韩视频大尺度| 亚洲欧洲一二三| 国产欧美在线播放| 一区二区三区免费网站| 激情综合激情|