⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.cpp

📁 利用MSComm控件
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "MSCommLib_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
   bReceive=false;
   Timer->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn_OpenClick(TObject *Sender)
{
    MSComm->CommPort=1;  //指定端口
    MSComm->RThreshold=1; //设置接收多少字节开产生oncomm事件
    MSComm->Handshaking=1;
    MSComm->InputMode=1;     //数据通过 Input 属性以文本形式取回。
    if(MSComm->PortOpen)MSComm->PortOpen=false;
    MSComm->PortOpen=true;
    MSComm->InputLen=0;       //一次读取所有数据
    MSComm->SThreshold=0;      //一次发送所有数据
    MSComm->InBufferCount=0;   //清空读取缓冲区
    MSComm->OutBufferCount=0;  //清空发送缓冲区
    
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn_EndClick(TObject *Sender)
{
   if(MSComm->PortOpen)
   MSComm->PortOpen=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MSCommComm(TObject *Sender)
{

  switch(MSComm->CommEvent)
  {
     case comEvSend: ShowMessage("在传输缓冲区中有比 Sthreshold 数少的字符。");
    // case comEvReceive: ShowMessage("收到 Rthreshold 个字符。该事件将持续产生直到用Input 属性从接收缓冲区中删除数据。");
     case comEvCTS: ShowMessage("Clear To Send 线的状态发生变化。");
     case comEvDSR: ShowMessage("Data Set Ready 线的状态发生变化。该事件只在 DST 从 1 变到 0 时才发生。");
     case comEvCD: ShowMessage("Carrier Detect 线的状态发生变化");
     case comEvRing: ShowMessage("检测到振铃信号。一些 UART(通用异步接收— 传输)可能不支持该事件。");
     case comEvEOF: ShowMessage("收到文件结束(ASCII 字符为 26)字符。");
     case comEventBreak: ShowMessage("接收到一个中断信号。");
     case comEventCTSTO: ShowMessage("Clear To Send 超时。在系统规定时间内传输一个字符时,Clear To Send 线为低电平。");
     case comEventDSRTO: ShowMessage("Data Set Ready 超时。在系统规定时间内传输一个字符时,Data Set Ready 线为低电平。");
     case comEventFrame: ShowMessage("帧错误。硬件检测到一帧错误。");
     case comEventOverrun: ShowMessage("端口超速。没有在下一个字符到达之前从硬件读取字符,该字符丢失。");
     case comEventCDTO: ShowMessage("载波检测超时。在系统规定时间内传输一个字符时,Carrier Detect 线为低电平。Carrier Detect 也称为 Receive Line Signal Detect (RLSD)。");
     case comEventRxOver: ShowMessage("接受缓冲区溢出。接收缓冲区没有空间。");
     case comEventRxParity: ShowMessage("奇偶校验。硬件检测到奇偶校验错误");
     case comEventTxFull: ShowMessage("传输缓冲区已满。传输字符时传输缓冲区已满");
     case comEventDCB: ShowMessage("检索端口的设备控制块 (DCB) 时的意外错误");
     default:     ShowMessage("Other Event");

  }
  if(MSComm->CommEvent==2)
  {
    if(bReceive)
    {
     Var_Data[num]=MSComm->Input;
     num++;
    }
    else
     MSComm->InBufferCount=0;
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn_ReceiveClick(TObject *Sender)
{

    bReceive=!bReceive;
    if(bReceive)
       btn_Receive->Caption=_T("停止接收");
    else
       btn_Receive->Caption=_T("开始接收");
    Timer->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TimerTimer(TObject *Sender)
{
  for(long i=0;i<num;i++)
  {
   ListBox_Receive->Items->Add(VarToStr(&Var_Data[i]));
  }
  num=0;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -