《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 設計應用 > 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亚洲国产精品_日韩亚洲一区二区
亚洲国产精品一区在线观看不卡| 久久这里有精品视频| 亚洲一级网站| 日韩视频免费看| 韩日精品视频一区| 国产日韩欧美在线观看| 国产精品成人免费视频 | 亚洲小说欧美另类社区| 亚洲剧情一区二区| 亚洲国产成人91精品 | 一二三四社区欧美黄| 最新国产精品拍自在线播放| 影音欧美亚洲| 在线免费观看一区二区三区| 一区二区视频欧美| 一区在线免费| 亚洲国产三级| 99在线|亚洲一区二区| 99re热这里只有精品视频| 一区二区精品国产| 亚洲新中文字幕| 亚洲一二三级电影| 先锋资源久久| 亚洲成色最大综合在线| 亚洲人妖在线| 一区二区欧美日韩| 午夜在线视频一区二区区别| 欧美一区二区三区免费视频| 欧美永久精品| 久久亚洲私人国产精品va媚药| 一本大道久久a久久精品综合| 亚洲欧美日韩国产成人| 亚洲一区一卡| 欧美影视一区| 亚洲欧洲在线观看| 亚洲天堂成人| 欧美亚洲免费电影| 久久一区中文字幕| 欧美不卡视频| 欧美日韩一区二区三区在线观看免| 久久综合中文字幕| 欧美大片免费观看在线观看网站推荐| 午夜日韩福利| 久久久久亚洲综合| 欧美激情小视频| 国产精品久久久久久久久久ktv | 亚洲一区二区三区在线观看视频| 在线观看91精品国产麻豆| 亚洲国产一区二区a毛片| 日韩亚洲不卡在线| 亚洲欧美激情一区| 亚洲人成在线观看| 亚洲视频在线一区观看| 欧美一级在线视频| 欧美高清一区| 国产精品自拍视频| 亚洲高清毛片| 亚洲欧美www| 亚洲日韩成人| 香蕉久久夜色| 欧美欧美午夜aⅴ在线观看| 国产婷婷97碰碰久久人人蜜臀| 国产精品久久久一区二区| 国产欧美日韩亚洲| 亚洲精品视频中文字幕| 午夜精品久久久久久久久久久久| 亚洲专区在线| 亚洲欧洲日韩在线| 欧美一区二区三区在线| 欧美金8天国| 国产欧美日韩另类视频免费观看| 国产情人节一区| 亚洲人成在线观看| 午夜精品999| 亚洲一区二区黄色| 另类av导航| 国产精品一区二区久久久| 亚洲欧洲精品一区二区| 欧美一区二区三区免费看 | 亚洲丰满在线| 亚洲视频电影图片偷拍一区| 六月丁香综合| 国产欧美一区二区视频| 亚洲免费观看| 亚洲国产精品成人久久综合一区| 亚洲精品日韩在线| 欧美在线精品免播放器视频| 欧美三级日韩三级国产三级| 1769国产精品| 欧美一区精品| 欧美一区二区三区日韩| 欧美高清在线视频观看不卡| 国产伦精品一区二区三区免费迷| 国产欧美一区在线| 一本色道久久综合亚洲精品按摩| 亚洲视频在线观看一区| 亚洲精品一区二区在线| 久久久精品视频成人| 国产精品美女久久久久久久| 日韩午夜在线视频| 99精品国产福利在线观看免费| 国产精品自在在线| 猛男gaygay欧美视频| 欧美新色视频| 亚洲美洲欧洲综合国产一区| 91久久精品www人人做人人爽 | 欧美午夜精品一区| 亚洲欧洲精品一区二区三区不卡| 亚洲伦理在线| 亚洲欧洲午夜| 另类综合日韩欧美亚洲| 国产欧美亚洲一区| 亚洲免费中文字幕| 亚洲欧美激情在线视频| 欧美三日本三级三级在线播放| 国产欧美日韩视频一区二区三区| 国内成+人亚洲+欧美+综合在线| 亚洲国产精品传媒在线观看 | 在线观看一区视频| 久久狠狠亚洲综合| 久久字幕精品一区| 一区二区三区在线视频播放| 欧美一区二区三区精品| 久久久精品日韩| 黄色日韩在线| 亚洲激情影视| 欧美国产亚洲精品久久久8v| 亚洲国产老妈| 9l视频自拍蝌蚪9l视频成人| 欧美日本韩国一区| 日韩午夜av电影| 亚洲一区999| 国产精品亚洲а∨天堂免在线| 激情亚洲成人| 亚洲国产日日夜夜| 欧美福利在线| 99精品欧美一区二区蜜桃免费| 欧美一区三区三区高中清蜜桃| 亚洲精品三级| 欧美精品自拍| 亚洲一区网站| 久久久久一区二区三区四区| 永久域名在线精品| 99国产精品久久久久久久| 欧美日韩一区二区三区四区五区| 国语自产精品视频在线看| 欧美一级二区| 另类天堂av| 一区二区三区导航| 欧美专区亚洲专区| 在线观看不卡| 在线综合+亚洲+欧美中文字幕| 女同一区二区| 亚洲精品乱码久久久久| 夜夜爽夜夜爽精品视频| 国产精品网站在线观看| 久久成人免费日本黄色| 欧美国产视频在线| 亚洲一区二区三区中文字幕| 久久一区二区三区国产精品| 亚洲欧洲综合另类| 欧美一区二区精美| 亚洲电影中文字幕| 亚洲欧美国产毛片在线| 国产专区一区| 一区二区三区.www| 国产日韩专区在线| 亚洲精品一区二区在线| 国产精品一区二区久激情瑜伽| 一区二区三区精品久久久| 羞羞色国产精品| 最新成人在线| 欧美中文在线免费| 91久久中文| 久久精品视频播放| 日韩视频在线免费观看| 久久久91精品国产一区二区三区| 国产精品欧美风情| 亚洲国产欧洲综合997久久| 欧美日韩在线免费| 亚洲国产第一| 国产精品视频yy9299一区| 亚洲精品免费电影| 国产欧美一区二区三区另类精品| 亚洲欧美日韩国产中文在线| 美女福利精品视频| 亚洲欧美日韩天堂一区二区| 欧美韩国一区| 欧美一级网站| 欧美人与性动交α欧美精品济南到| 亚洲欧洲久久| 久久久久久久久久久久久女国产乱| 国产女主播一区二区三区| 亚洲黄色成人| 国产精品一区二区在线观看| 日韩视频一区二区| 黄色欧美日韩| 欧美在线视频免费| 一本色道久久88综合日韩精品| 先锋影音久久久|