由于我认为新学习pascal语言是件很头疼的事情!所以最终我决定使用bcb作为windows上的编程工具了。

安装好cport控件后在bcb的控件栏中将会多出如图示的cport控件。


常用的有ComPort和ComDataPacket控件,本例中我只用了ComPort控件实现简单的串口发送接收功能。

(1).将ComPort拖至窗体上,设置属性页中的DiscardNull为true,ControlDTR为dtrEnable.

(2).添加三个按钮控件到窗体,分别作为“设置串口”“打开/关闭串口”“发送”。

(3).添加Edit控件作为输入将要发送的数据,添加memo作为显示接收的数据。

如图示:


(4).分别双击三个按钮事件,“设置串口”“打开/关闭串口”“发送”函数。

(5).接收数据关键的一步:选中cport控件,进入其Events页,双击OnRxChar编写接收函数。(之前我一直是手动添加的该函数,导致最后没有与控件的events关联起来,从而无法正确接收数据,纠结的2天!)如图示:

代码:

1.com_pro.h



  1. //---------------------------------------------------------------------------

  2. #ifndef Unit1H
  3. #define Unit1H
  4. //---------------------------------------------------------------------------
  5. #include <Classes.hpp>
  6. #include <Controls.hpp>
  7. #include <StdCtrls.hpp>
  8. #include <Forms.hpp>
  9. #include "CPort.hpp"
  10. //---------------------------------------------------------------------------
  11. class TForm1 : public TForm
  12. {
  13. __published: // IDE-managed Components
  14. TComPort *compt;
  15. TButton *btn_set;
  16. TButton *btn_open_close;
  17. TButton *btn_send;
  18. TMemo *memo_1;
  19. TEdit *edt_send;
  20. void __fastcall btn_setClick(TObject *Sender);
  21. void __fastcall btn_open_closeClick(TObject *Sender);
  22. void __fastcall btn_sendClick(TObject *Sender);
  23. // void __fastcall ComPortRxChar(TObject* Sender, int Count);
  24. void __fastcall comptRxChar(TObject *Sender, int Count);

  25. private: // User declarations
  26. int time;
  27. public: // User declarations
  28. __fastcall TForm1(TComponent* Owner);
  29. };
  30. //---------------------------------------------------------------------------
  31. extern PACKAGE TForm1 *Form1;
  32. //---------------------------------------------------------------------------
  33. #endif



2.com_port.cpp



  1. //---------------------------------------------------------------------------

  2. #include <vcl.h>
  3. #pragma hdrstop

  4. #include "Unit1.h"
  5. //---------------------------------------------------------------------------
  6. #pragma package(smart_init)
  7. #pragma link "CPort"
  8. #pragma resource "*.dfm"
  9. TForm1 *Form1;
  10. //---------------------------------------------------------------------------
  11. __fastcall TForm1::TForm1(TComponent* Owner)
  12. : TForm(Owner)
  13. {
  14. memo_1->Text="";
  15. }
  16. //---------------------------------------------------------------------------
  17. void __fastcall TForm1::btn_setClick(TObject *Sender)//设置串口
  18. {
  19. compt->ShowSetupDialog();
  20. }
  21. //---------------------------------------------------------------------------
  22. void __fastcall TForm1::btn_open_closeClick(TObject *Sender) //打开&关闭串口
  23. {
  24. if(compt->Connected)
  25. {
  26. compt->Close();
  27. btn_open_close->Caption="打开串口";
  28. }
  29. else
  30. {
  31. compt->Open();
  32. btn_open_close->Caption="关闭串口";
  33. }
  34. }
  35. //---------------------------------------------------------------------------
  36. void __fastcall TForm1::btn_sendClick(TObject *Sender) //发送数据
  37. {
  38. AnsiString Str;

  39. Str=edt_send->Text;
  40. Str=Str+"/r/n";
  41. compt->WriteStr(Str);
  42. //memo_1->Text="yes,you are right!/r/n";
  43. }
  44. //---------------------------------------------------------------------------
  45. void __fastcall TForm1::comptRxChar(TObject *Sender, int Count) //接收数据
  46. {
  47. AnsiString Str;
  48. compt->ReadStr(Str,Count);
  49. memo_1->Text=memo_1->Text+Str;
  50. }
  51. //---------------------------------------------------------------------------