搜索
bottom↓
回复: 10

用BCB写的串口通讯。使用API函数,照着例子敲上去的,懒的敲的可以下来直接复制。

[复制链接]

出0入93汤圆

发表于 2008-8-20 10:32:33 | 显示全部楼层 |阅读模式
没有写过上位机,上午没事照着一个从坛里下的PDF的教程写了一点。那个PDF是扫描版的,无法复制,所以就调了一下,有需要的朋友可以直接复制了。只实现了简单的发送盒接收功能。

(原文件名:未命名.JPG)

BCB的源文件。
点击此处下载 ourdev_384398.rar(文件大小:624K) (原文件名:com.rar)


主要代码:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SUIButton"
#pragma link "SUIForm"
#pragma link "SUIGroupBox"
#pragma link "SUIImagePanel"
#pragma link "SUIMemo"
#pragma link "SUIRadioGroup"
#pragma resource "*.dfm"
TForm1 *Form1;
HANDLE hComm;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::suitempbtOpencomClick(TObject *Sender)
{
    char *ComNo;
    DCB dcb;
    String Temp;
    Temp = "COM" + IntToStr(RadioGroupComselect->ItemIndex + 1);
    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;
    }
    GetCommState(hComm,&dcb);
    dcb.BaudRate = CBR_9600;
    dcb.ByteSize = 8;
    dcb.Parity = NOPARITY;
    dcb.StopBits = ONESTOPBIT;
    if(!SetCommState(hComm, &dcb))
    {
        MessageBox(0, "通信设置错误" ,"Set Error", MB_OK);
        CloseHandle(hComm);
        return;
    }
    Shape1->Brush->Color = clRed;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::suitempbtExitClick(TObject *Sender)
{
    if(hComm != INVALID_HANDLE_VALUE)
        CloseHandle(hComm);
    exit(EXIT_SUCCESS);            
}
//---------------------------------------------------------------------------
void __fastcall TForm1::suitempbtTransmitClick(TObject *Sender)
{
    String Temp;
    char *SendData;
    int ln;
    unsigned long lrc,BS;
    if(hComm == 0)
        return;
    Temp = MemoSend->Text;
    SendData = Temp.c_str();
    BS = Temp.Length();
    WriteFile(hComm,SendData,BS,&lrc,NULL);        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::suitempbtReceiveClick(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';
    MemoReceive->Text = inbuff;
}
//---------------------------------------------------------------------------

出0入0汤圆

发表于 2008-8-20 10:46:51 | 显示全部楼层
使用控件啊

出0入93汤圆

 楼主| 发表于 2008-8-20 11:14:53 | 显示全部楼层
没有找到啊。。。在哪藏着呢

出0入0汤圆

发表于 2008-8-26 08:38:38 | 显示全部楼层
呵呵!我正在学!

出0入0汤圆

发表于 2009-7-22 15:46:51 | 显示全部楼层
好象不能通信,楼主有没有自己试一下呢
头像被屏蔽

出0入0汤圆

发表于 2012-5-16 20:51:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2012-5-16 21:07:44 | 显示全部楼层
“打开端口失败”,可能是已经被占用。。。。

比如说俺的电脑上COM1--COM8 已经全被占用了,如果再有新的东西,只能用更高的端口号了。
头像被屏蔽

出0入0汤圆

发表于 2012-5-16 21:22:01 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽

出0入0汤圆

发表于 2012-5-16 21:22:46 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2012-5-21 21:57:41 | 显示全部楼层
呵呵正在学习中                    

出0入0汤圆

发表于 2013-4-16 23:48:35 | 显示全部楼层
我也试了一下,发现串口发不出数据。我使用的是C++ builder XE2。有没有人知道原因啊。
因为数据类型不符的原因,对原例子有点小修改,改为如下:
     char *SendData;
     int ln;
     unsigned long lrc,BS;
     if(hComm == 0)
         return;
      SendData = "123" ;
      BS = 3;
     WriteFile(hComm,SendData,BS,&lrc,NULL);
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-8 02:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表