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

📄 unit1.~cpp

📁 串行端口的数字输出控制
💻 ~CPP
字号:
//------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HANDLE hComm; //给串行端口用的Handle
boolean DTRState,RTSState;
//------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}
//------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  char *ComNo;
  DCB dcb;
  String Temp;
  //取得要打开的通信端口
  Temp = "COM"+IntToStr(rdCOM->ItemIndex +1);
  //转换至指针类型Char
  ComNo = Temp.c_str();
  hComm = CreateFile(ComNo,GENERIC_READ | GENERIC_WRITE,
       0, NULL, OPEN_EXISTING, 0, 0);
  if (hComm == INVALID_HANDLE_VALUE) // 如果COM 未打开
  {
    MessageBox(0, "打开通信端口错误!!","Comm Error",MB_OK);
    return;
   }
  //将dcb地址传入,以取得通信参数
  GetCommState(hComm,&dcb);                        // 得知目前COM 的状态
  dcb.BaudRate = CBR_9600;                         // 设置波特率为9600
  dcb.ByteSize = 8;                                 // 字节为 8 bit
  dcb.Parity = NOPARITY;                           // Parity 为 None
  dcb.StopBits = ONESTOPBIT;                       // 1 个Stop bit
  //通信端口设置
  if (!SetCommState(hComm, &dcb)) {       // 设置COM 的状态
    MessageBox (0, "通信端口设置错误!!!","Set Error",MB_OK);
    CloseHandle(hComm);
    return;
   }
  EscapeCommFunction( hComm, CLRDTR); //将DTR降为低电位
  EscapeCommFunction( hComm, CLRRTS); //将RTS降为低电位
}
//------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
    //若通信端口未打开,则不作动作,并跳出
    if (hComm==0)
     {
       MessageBox (0, "通信端口未打开!!!","Open Error",MB_OK);
       return;
      }
    //判断DTRState值,输出状态后,将原值作转态
    if (DTRState)
      {
       //输出DTR状态为低电位
       EscapeCommFunction( hComm, CLRDTR );
       spDTR->Brush->Color=clWhite; //更改信号灯的颜色
      }
    else
      {
       //输出DTR的状态为高电位
       EscapeCommFunction( hComm, SETDTR );
       spDTR->Brush->Color=clRed; //更改信号灯的颜色
      }
    DTRState =~DTRState; //将DTRState转态
}
//------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  if (hComm!=INVALID_HANDLE_VALUE) CloseHandle(hComm);
  exit(EXIT_SUCCESS);
}
//------------------------------------------------------------------
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
    //若通信端口未打开,则不作动作,并跳出
    if (hComm==0)
     {
       MessageBox (0, "通信端口未打开!!!","Open Error",MB_OK);
       return;
      }
    //判断RTSState值,输出状态后,将原值作转态
    if (RTSState)
      {
       //输出RTS状态为低电位
       EscapeCommFunction( hComm, CLRRTS );
       spRTS->Brush->Color=clWhite; //更改信号灯的颜色
      }
    else
      {
       //输出RTS的状态为高电位
       EscapeCommFunction( hComm, SETRTS );
       spRTS->Brush->Color=clRed; //更改信号灯的颜色
      }
    RTSState =~RTSState; //将RTSState转态

}
//------------------------------------------------------------------

⌨️ 快捷键说明

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