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

📄 unit1.~cpp

📁 在c++builder环境下一个串口通信程序
💻 ~CPP
字号:
//------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HANDLE hComm;

//------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
  if (hComm!=INVALID_HANDLE_VALUE) CloseHandle(hComm);
  exit(EXIT_SUCCESS);
}
//------------------------------------------------------------------
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) // 如果通信端口未打开
  {
    MessageBox(0, "打开通信端口错误!!","Comm Error",MB_OK);
    return;
   }
  //将dcb地址传入,以取得通信参数
  GetCommState(hComm,&dcb);                         // 得知目前通信端口的状态
  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)) {       // 设置通信端口的状态
    MessageBox (0, "通信端口设置错误!!!","Set Error",MB_OK);
    CloseHandle(hComm);
    return;
   }
}
//------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
  String Temp;
  char *SendData;
  int  ln;
  unsigned long lrc,BS;
  if (hComm==0) return; //检查Handle值
  Temp = mSend->Text;//取得发送的字符串
  SendData = Temp.c_str(); //字符串转换
  //取得发送的字符串数
  BS = Temp.Length();
  //BS = StrLen(SendData);  //也可以使用此种方式取得字符串长度
  //实际的发送动作
  WriteFile(hComm,SendData,BS, &lrc,NULL); // 送出数据

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

void __fastcall TForm1::Button4Click(TObject *Sender)
{
  String Temp;
  char inbuff[1024];
  DWORD nBytesRead, dwEvent, dwError;
  COMSTAT cs;
    //取得状态
   ClearCommError(hComm,&dwError,&cs);
   // 数据是否大于我们所准备的缓冲区
   if (cs.cbInQue > sizeof(inbuff))
   {
     PurgeComm(hComm, PURGE_RXCLEAR);  // 清除通信端口数据
     return;
    }
   ReadFile(hComm, inbuff,cs.cbInQue,&nBytesRead,NULL); // 接收通信端口的数据
   //数组中的字符串结尾处补上零字符
   inbuff[cs.cbInQue]= '\0';
   // 将数据显示于Memo1 上
   mReceive->Text = inbuff;

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

⌨️ 快捷键说明

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