Mainfrm.pas
上传用户:psxgmh
上传日期:2013-04-08
资源大小:15112k
文件大小:4k
源码类别:

Delphi/CppBuilder

开发平台:

Delphi

  1. unit Mainfrm;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, StdCtrls, Buttons, SPComm, ExtCtrls, ComCtrls;
  6. type
  7.   TfrmComm = class(TForm)
  8.     Comm: TComm;
  9.     StatusBar1: TStatusBar;
  10.     Panel1: TPanel;
  11.     Panel2: TPanel;
  12.     mmoComm: TMemo;
  13.     btnOpen: TBitBtn;
  14.     btnClose: TBitBtn;
  15.     btnSend: TBitBtn;
  16.     Panel3: TPanel;
  17.     edtSendText: TEdit;
  18.     Label6: TLabel;
  19.     Label1: TLabel;
  20.     Label2: TLabel;
  21.     Label3: TLabel;
  22.     Label4: TLabel;
  23.     Label5: TLabel;
  24.     cmbByteSize: TComboBox;
  25.     cmbStopBits: TComboBox;
  26.     cmbParity: TComboBox;
  27.     edtCommName: TEdit;
  28.     edtBaudRate: TEdit;
  29.     procedure btnOpenClick(Sender: TObject);
  30.     procedure btnCloseClick(Sender: TObject);
  31.     procedure btnSendClick(Sender: TObject);
  32.     procedure CommReceiveData(Sender: TObject; Buffer: Pointer;
  33.       BufferLength: Word);
  34.     procedure edtBaudRateExit(Sender: TObject);
  35.     procedure FormCreate(Sender: TObject);
  36.     procedure cmbByteSizeChange(Sender: TObject);
  37.     procedure cmbStopBitsChange(Sender: TObject);
  38.     procedure cmbParityChange(Sender: TObject);
  39.   private
  40.     { Private declarations }
  41.   public
  42.     { Public declarations }
  43.   end;
  44. var
  45.   frmComm: TfrmComm;
  46. implementation
  47. {$R *.dfm}
  48. //当窗体创建时,初始化参数
  49. procedure TfrmComm.FormCreate(Sender: TObject);
  50. begin
  51.   edtCommName.Text := 'COM1';
  52.   edtBaudRate.Text := '9600';
  53.   cmbByteSize.ItemIndex := 3;
  54.   cmbStopbits.ItemIndex := 0;
  55.   cmbParity.ItemIndex := 0;
  56. end;
  57. //打开端口
  58. procedure TfrmComm.btnOpenClick(Sender: TObject);
  59. begin
  60.   //设置串口参数
  61.   comm.CommName := edtCommName.Text;
  62.   comm.BaudRate := strToInt(edtBaudRate.Text);
  63.   comm.ByteSize := TByteSize(cmbByteSize.ItemIndex);
  64.   comm.StopBits := TStopBits(cmbStopBits.ItemIndex);
  65.   comm.Parity := TParity(cmbParity.ItemIndex);
  66.   //打开串口
  67.   try
  68.     Comm.StartComm;
  69.   except
  70.     raise Exception.Create('打开串口错误');
  71.   end;
  72.   statusbar1.Panels[0].Text := Comm.CommName + '已打开';
  73.   statusbar1.Refresh;
  74.   btnOpen.Enabled := False;
  75.   btnSend.Enabled := True;
  76.   btnClose.Enabled := True;
  77. end;
  78. //关闭端口
  79. procedure TfrmComm.btnCloseClick(Sender: TObject);
  80. begin
  81.   Comm.StopComm;
  82.   statusbar1.Panels[0].Text := Comm.CommName + '已关闭';
  83.   statusbar1.Refresh;
  84. end;
  85. //向端口发送数据
  86. procedure TfrmComm.btnSendClick(Sender: TObject);
  87. var
  88.   str: Pchar;
  89.   Count: integer;
  90. begin
  91.   str := Pchar(edtSendText.Text);
  92.   Count := Length(str);
  93.   if Comm.WriteCommData(str, Count) then
  94.     mmoComm.Lines.Add('已发送' + intTostr(Count) + '个字符')
  95.   else
  96.     raise exception.Create('发送错误');
  97. end;
  98. //从端口接收数据
  99. procedure TfrmComm.CommReceiveData(Sender: TObject; Buffer: Pointer;
  100.   BufferLength: Word);
  101. var
  102.   strRecv : string;
  103. begin
  104.   setLength(strRecv,BufferLength);
  105.   Move(Buffer^,pchar(strRecv)^,BufferLength);
  106.   mmoComm.Lines.Add('已收到:'+intTostr(BufferLength)+'字节的数据');
  107.   mmoComm.Lines.Add(strRecv);
  108.   mmoComm.Invalidate ;
  109. end;
  110. //对波特率进行有效性检验
  111. procedure TfrmComm.edtBaudRateExit(Sender: TObject);
  112. var
  113.   i: integer;
  114. begin
  115.   try
  116.     i := strToInt(edtBaudRate.Text)
  117.   except
  118.     edtBaudRate.setfocus;
  119.     raise Exception.Create('波特率设置错误');
  120.   end;
  121.     //改变串口的波特率
  122.   comm.BaudRate := StrToInt(edtBaudRate.Text);
  123. end;
  124. procedure TfrmComm.cmbByteSizeChange(Sender: TObject);
  125. begin
  126.   //改变串口的数据位
  127.   comm.ByteSize := TByteSize(cmbByteSize.ItemIndex);
  128. end;
  129. procedure TfrmComm.cmbStopBitsChange(Sender: TObject);
  130. begin
  131.   //改变串口的停止位
  132.   comm.StopBits := TStopBits(cmbStopBits.ItemIndex);
  133. end;
  134. procedure TfrmComm.cmbParityChange(Sender: TObject);
  135. begin
  136.   //设置串口的奇偶校验位
  137.   comm.Parity := TParity(cmbParity.ItemIndex);
  138. end;
  139. end.