版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品文档-下载后可编辑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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理并发症的预防与风险评估
- 2026mba专业面试题型及答案
- 左心衰患者氧疗护理方法
- 2026年浙江丽水宁畲族自治县招聘引进紧缺急需人才11人(三)易考易错模拟试题(共500题)试卷后附参考答案
- 2026年泸州市纳溪区总工会招考社会化专职工会工作者易考易错模拟试题(共500题)试卷后附参考答案
- 2026年河南郑州荥阳市招才引智事业单位引进人才80人易考易错模拟试题(共500题)试卷后附参考答案
- 2026年河南省汝阳县事业单位招考易考易错模拟试题(共500题)试卷后附参考答案
- 2026年河南安阳市滑县中医院招聘卫生专业技术人才易考易错模拟试题(共500题)试卷后附参考答案
- 2026年河南信阳市商城县事业单位招考(第三批)易考易错模拟试题(共500题)试卷后附参考答案
- 2026年河北衡水市教育考试院选聘事业单位工作人员4人易考易错模拟试题(共500题)试卷后附参考答案
- 安徽汇宇能源发展有限公司25万吨年石脑油芳构化项目环境影响报告书
- 建筑工程项目汇报ppt
- 人教版一年级数学下册《第8单元 总复习 第1节 数与代数》课堂教学课件PPT小学公开课
- 火力发电厂金属技术监督规程解读
- 特种加工技术课件第11章 高压水射流加工
- YS/T 96-2009散装浮选铜精矿中金、银分析取制样方法
- 最新人教部编版六年级下册语文《古诗词诵读:春夜喜雨》教学课件
- 超市经营服务投标方案
- 高血压中医健康教育专家讲座
- 不稳定型心绞痛共30张课件
- 冠心病的三级预防及康复治疗和社区管理要求
评论
0/150
提交评论