新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > C++builder串口通信設計(一)-串口接收數據

        C++builder串口通信設計(一)-串口接收數據

        作者: 時間:2016-11-28 來源:網絡 收藏

        3、unit1.cpp代碼


        void __fastcall TForm1::Button1Click(TObject *Sender) // 打開
        {
        static st=0;
        AnsiString s;
        if(st==0)
        {
        try
        {
        Form1->MSComm1->_CommPort=3;//COM3
        Form1->MSComm1->Settings="9600,n,8,1"; //初始化串口
        Form1->MSComm1->InputMode=type; ////設置傳入數據的格式,0表示文本形式 ,1表示二進制格式
        Form1->MSComm1->RThreshold=1;
        Form1->MSComm1->PortOpen=true; //打開串口
        Application->MessageBoxA("串口初始化成功","串口初始化",0);
        }
        catch(...)
        //catch(EOleException&e)
        {
        Application->MessageBoxA("串口未連接好或已經打開","故障提示");
        }

        Button1->Caption="關閉";
        st=1;
        }
        else
        {
        Form1->MSComm1->PortOpen=false;
        Button1->Caption="打開";
        st=0;
        }
        }
        //---------------------------------------------------------------------------
        void __fastcall TForm1::MSComm1Comm(TObject *Sender) //串口接收事件
        {
        AnsiString str; //聲明一個AnsiString類型的變量
        OleVariant rec; //聲明一個用于接收數據的OleVariant變量。
        int count;
        int j;
        unsigned char buf[128];

        switch(MSComm1->CommEvent)
        {
        case comEvReceive: //接收事件
        if(type==0) //字符型接收
        {
        str=MSComm1->Input;//收到字符串;
        Memo1->Text=Memo1->Text+str+" "; //顯示收到的字符串
        }
        else //type=1 為二進制接收
        {
        count=MSComm1->InBufferCount; //字節數
        rec=MSComm1->Input; //取出接收緩沖器內容
        for(j=0;j小于count;j++)
        {
        buf[j]=rec.GetElement(j); //轉換成字節類型
        }
        Memo1->Text=Memo1->Text+"";
        for(j=0;j小于count;j++)
        {
        Memo1->Text=Memo1->Text+IntToHex(buf[j],2)+" "; //顯示接收的字節(以十六進制顯示)
        }
        }
        break;
        default: break;
        } //switch(MSComm1->CommEvent)
        }
        //---------------------------------------------------------------------------
        void __fastcall TForm1::Button2Click(TObject *Sender)
        {
        Application->Terminate();
        }
        //---------------------------------------------------------------------------
        void __fastcall TForm1::FormCreate(TObject *Sender) //初始化
        {
        RadioButton1->Checked=false;
        RadioButton2->Checked=true;
        type=1; //0--字符,1---二進制
        }
        //---------------------------------------------------------------------------
        void __fastcall TForm1::RadioButton1Click(TObject *Sender) //字符型
        {
        RadioButton2->Checked=false;
        RadioButton1->Checked=true;
        type=0; //字符型
        Form1->MSComm1->InputMode=type;
        }
        //---------------------------------------------------------------------------
        void __fastcall TForm1::RadioButton2Click(TObject *Sender) //二進制
        {
        RadioButton1->Checked=false;
        RadioButton2->Checked=true;
        type=1;//二進制
        Form1->MSComm1->InputMode=type;
        }
        //---------------------------------------------------------------------------

        四、運行結果





        可見,選擇二進制模式或字符模式都可以完成串口接收通信。


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 翼城县| 凤翔县| 济源市| 静宁县| 吴桥县| 敦煌市| 信丰县| 乃东县| 界首市| 德昌县| 嘉祥县| 金堂县| 滁州市| 枣庄市| 井研县| 宁强县| 宁强县| 醴陵市| 湖北省| 青岛市| 怀化市| 澎湖县| 亚东县| 集贤县| 蚌埠市| 祁门县| 集安市| 宁德市| 灵寿县| 梓潼县| 延寿县| 陵川县| 湄潭县| 勃利县| 亚东县| 漠河县| 清远市| 军事| 盱眙县| 商洛市| 涟水县|