3228|0

57

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

delphi串口编程 [复制链接]

 
Delphi串口(COM口)编程(附截图)
2009-06-27 19:45

       因为公司有个读卡器由键盘口换成了COM口的,所以原来的程式要做个小小的调整,要改成从串口读数据。一般的系统默认使用COM2口——如要用其它的COM口请到设备管理器里修改。由于没有没过delphi,就只有摆渡了,并加上自己仅有的一些JAVA、C的编程知识成功调试出来了,现分享如下:

       首先,我们要用到MSComm控件,如果没有添加到控件面板的请先从component(控件)菜单里调出来,如下图:

先选Import Active Conrol...菜单项——

弹出的导入控件对话框——

添加后的控件放在ActiveX控件面板——

注:在使用时记得给Events里的OnComm事件添加写好的监听器——

一、MSComm控件的主要属性及事件  
  (1)CommPort:设置或返回串行端口号,缺省值1。  
  (2)Setting:设置或返回串口通信参数,格式为“波特率,奇偶校验位,数据位,停止位”。例如:MSComm1.Setting:=′9600,n,8,1′  
  (3)PortOpen:打开或关闭串行端口,格式为:MSComm1.PortOpen:={True|False}  
  (4)InBufferSize:设置或返回接收缓冲区的大小,缺省值为1024字节。  
  (5)InBufferCount:返回接收缓冲区内等待读取的字节数,可通过设置该属性为0来清空接收缓冲区。  
  (6)RThreshold:该属性为一阀值,它确定当接收缓冲区内的字节个数达到或超过该值后就产生代码为ComEvReceive的OnComm事件。  
  (7)SThreshold:该属性为一阀值,它确定当发送缓冲区内的字节个数少于该值后就产生代码为ComEvSend的OnComm事件。  
  (8)InputLen:设置或返回接收缓冲区内用Input读入的字节数,设置该属性为0表示Input读取整个缓冲区的内容。  
  (9)Input:从接收缓冲区读取一串字符。  
  (10)OutBufferSize:设置或返回发送缓冲区的大小,缺省值为512字节。  
  (11)OutBufferCount:返回发送缓冲区内等待发送的字节数,可通过设置该属性为0来清空缓冲区。  
  (12)OutPut:向发送缓冲区传送一串字符。  
  如果在通信过程中发生错误或事件,就会触发OnComm事件,并由CommEvent属性代码反映错误类型,在通信程序的设计中可根据该属性值来执行不同的操作。CommEvent属性值及其含义如下:  
  (1)ComEvSend:值为1,发送缓冲区的内容少于SThreshold指定的值。  
  (2)ComEvReceive:值为2,接收缓冲区内字符数达到RThreshold指定的值。  
  (3)ComEvFrame:值为1004,硬件检测到帧错误。  
  (4)ComEvRxOver:值为1008,接收缓冲区溢出。  
  (5)ComEvTxFull:值为1010,发送缓冲区溢出。  
  (6)ComEvRxParity:值为1009,奇偶校验错误。  
  (7)ComEvEOF:值为7,接收数据中出现文件尾(ASCII码为26)字符

二、示例代码

先看看运行的结果(文本框内的数字就是由COM口读卡器读入的)——

//这个代码是从网上找的代码改的,测试时,只须在一个TForm里加一个TMSComm控件和一个文本框TEdit控件

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, MSCommLib_TLB;

type
TForm1 = class(TForm)
    MSComm1: TMSComm;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure MSComm1Comm(Sender: TObject);
private
    { Private declarations }
public
    { Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

    Mscomm1.InBufferCount   :=0;   //   清空接收缓冲区
    Mscomm1.InputLen   :=0;   //   Input读取整个缓冲区内容
    Mscomm1.RThreshold   :=1;   //   每次接收到字符即产生OnComm事件

    //Mscomm1.Settings   :=ComboBox1.Text;
    //if   ComboBox2.Text   ='com1'   then   //   假设只考虑com1和com2两种情况
    // Mscomm1.CommPort   :=1
   // else
      Mscomm1.CommPort   :=2;
    Mscomm1.PortOpen   :=true;   //   打开串口
    Mscomm1.DTREnable   :=true;   //   数据终端准备好
    Mscomm1.RTSEnable   :=true;   //   请求发送

end;

procedure   TForm1.MSComm1Comm(Sender:   TObject);
    var
    recstr:String;
    begin
     if   Mscomm1.CommEvent   =   2   then
      begin
    recstr   :=   Mscomm1.Input   ;
    Edit1.text   :=   recstr;
    end;
end;
end.

此帖出自单片机论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表