Lazarus开发串口通信_第1页
Lazarus开发串口通信_第2页
Lazarus开发串口通信_第3页
Lazarus开发串口通信_第4页
Lazarus开发串口通信_第5页
已阅读5页,还剩5页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档-下载后可编辑Lazarus开发串口通信Lazarus的设计目标是应用FreePascal,所以所有凡是FreePascal能运行的平台,Lazarus都可以运行。版本能运行于Linux,Win32和FreeBSD。整个界面的外观和操作和DelphiIDE一样,因此,如果你会使用Delphi的话,用起LazarusIDE来就一定能得心应手了。

引集成开发环境

Lazarus是一个用于FreePascal的快速应用开发(RAD)的面向对象的Pascal集成开发环境(IDE)。Lazarus对于窗口管理来说是中性的。可以工作在KDE(1.13版本)下,也可以工作在GNOME(1.23版本)或其他窗口管理器(MVM、WindowMaker)。Lazarus的设计目标是应用FreePascal,所以所有凡是FreePascal能运行的平台,Lazarus也可以运行。版本能运行于Linux,Win9x/2000/xp/win7和FreeBSD。目前,已提供32位和64位版本支持。Lazarus的工作界面、外观和操作和Borland的DelphiIDE非常相似,所不同的是Lazarus是完全的自由软件。Lazarus可以直接移植Delphi的代码。Lazarus的编程语言是以Pascal为基础的。Pascal语言具有可读性好、编写容易的特点,这使得它很适合作为基础的开发语言。同时,使用编译器创建的应用程序只生成单个可执行文件(。EXE,但生成的可执行文件体积相对Delphi的来说有点大,只包含一个空窗体的工程生成的可执行文件就达到了10多M。这里,可以通过编译选项来减小可执行文件的大小,可以减为1M多点,然后通过UPX压缩,可以减为600多K。)。正是这种结合,使得Pascal成为Lazarus这种先进开发环境的编程语言。

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:

unitCE_Series;

interface

uses

Windows,Classes,SysUtils,LResources,StdCtrls,ExtCtrls;

type

TCE_Series=class(TObject)

private

hComm:THandle;

public

FunctionOpenPort(Port:LPCWSTR;BaudRate,ByteSize,Parity,StopBits:integer):String;

procedureSend(str:String);

FunctionReceive():String;

procedureClosePort();

end;

implementation

//===============================================================================================

//语法格式:OpenPort(Port:LPCWSTR;BaudRate,ByteSize,Parity,StopBits:integer)

//实现功能:打开串口

//参数:port,串口号;例如wince下为从COM1:,COM2:……。win32下为COM1,COM2.……;其他略,顾名思义哈

//返回值:错误信息

//===============================================================================================

functionTCE_Series.OpenPort(Port:LPCWSTR;BaudRate,ByteSize,Parity,StopBits:integer):String;

var

cc:TCOMMCONFIG;

begin

result:=‘’;

hComm:=CreateFile(port,GENERIC_READorGENERIC_WRITE,

0,nil,OPEN_EXISTING,0,0);//打开COM

if(hComm=INVALID_HANDLE_VALUE)thenbegin//如果COM未打开

result:=‘CreateFileError!’;

exit;

end;

GetCommState(hComm,cc.dcb);//得知目前COM的状态

cc.dcb.BaudRate:=BaudRate;//设置波特率为BaudRate

cc.dcb.ByteSize:=ByteSize;//字节为ByteSize(8bit)

cc.dcb.Parity:=Parity;//Parity为None

cc.dcb.StopBits:=StopBits;//1个Stopbit

ifnotSetCommState(hComm,cc.dcb)thenbegin//设置COM的状态

result:=‘SetCommStateError!’;

CloseHandle(hComm);

exit;

end;

end;

//===============================================================================================

//语法格式:Send(str:String)

//实现功能:发送数据

//参数:str,数据

//返回值:无

//===============================================================================================

procedureTCE_Series.Send(str:String);

var

lrc:LongWord;

begin

if(hComm=0)thenexit;//检查Handle值

WriteFile(hComm,str,Length(str),lrc,nil);//送出数据

end;

//=====================================================================

//语法格式:Receive()

//实现功能:接收串口数据

//参数:无

//返回值:收到的字符串

//=====================================================================

FunctionTCE_Series.Receive():String;

var

inbuff:array[02047]ofChar;

nBytesRead,dwError:LongWORD;

cs:TCOMSTAT;

begin

ClearCommError(hComm,dwError,@CS);//取得状态

//数据是否大于我们所准备的Buffer

ifcs.cbInQue》sizeof(inbuff)thenbegin

PurgeComm(hComm,PURGE_RXCLEAR);//清除COM数据

exit;

end;

ReadFile(hComm,inbuff,cs.cbInQue,nBytesRead,nil);//接收COM的数据

//转移数据到变量中

result:=Copy(inbuff,1,cs.cbInQue);//返回数据

end;

//=====================================================================

//语法格式:ClosePort()

//实现功能:关闭串口

//参数:无

//返回值:无

//=====================================================================

procedureTCE_Series.ClosePort();

begin

SetCommMask(hcomm,$0);

CloseHandle(hComm);

end;

end.

二、写调用程序演示如何使用这个类,请自行加入控件,所用的控件不多:

unitUnit1;

{$modeobjfpc}{$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;

procedurebtn_ClosePortClick(Sender:TObject);

procedurebtn_OpenPortClick(Sender:TObject);

procedurebtn_SendClick(Sender:TObject);

procedureTimer1Timer(Sender:TObject);

private

{privatedeclarations}

public

{publicdeclarations}

end;

var

Form1:TForm1;

myseries:TCE_Series;

implementation

{TForm1}

procedureTForm1.btn_OpenPortClick(Sender:TObject);

begin

myseries:=TCE_Series.Create;

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

Timer1.Enabled:=true;

e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论