當前位置:編程學習大全網 - 編程語言 - 菜菜的問題。vc串口通信中如何自動讀取緩沖區的字符顯示在editbox中?

菜菜的問題。vc串口通信中如何自動讀取緩沖區的字符顯示在editbox中?

妳好,希望我的回答能夠對妳有所幫助。

1.假如妳現在正在學習VC串口編程,強烈建議妳安裝壹個“虛擬串口軟件vspdxp.exe”,再找個“sscom3.2串口通訊調試工具”。之後就可以完全用軟件模擬串口通信來調試妳的vc程序,很方便

2.我自己寫了個程序實現妳的要求,vc6下測試通過,工程下載地址:/site/qiujiejia1/Home/BaiDu_Answer_VC_SERIAL_2.zip

3. 萍水e相逢 推薦的 “ 龔建偉的個人主頁,www.gjwtech.com ”絕對是學習串口通信的好網站,望有空多上去看看。

4.以下是主要代碼,僅供參考。

/****************************************************************************

在OnInitDialog()裏初始化

****************************************************************************/

BOOL CCommTest::OnInitDialog()

{

CDialog::OnInitDialog();

SetIcon(m_hIcon, TRUE); // Set big icon

SetIcon(m_hIcon, FALSE); // Set small icon

//Initial COM

m_ctrlComm.SetCommPort(1); //選擇com1

m_ctrlComm.SetSettings("9600,n,8,1"); //通信參數設置 波特率9600,無校驗,8個數據位,1個停止位

m_ctrlComm.SetInBufferSize(1024); //指定接收緩沖區大小

m_ctrlComm.SetRThreshold(1); //參數1表示每當串口接收緩沖區中有多於或等於1個字符時將引發壹個接收數據的OnComm事件

m_ctrlComm.SetInputMode(1); //定義Input屬性獲取數據的方式(為0:文本方式;為1:二進制方式)。

m_ctrlComm.SetInputLen(0); //設置每次Input讀入的字符個數,缺省值為0,表明讀取接收緩沖 區中的全部內容。

m_ctrlComm.SetInBufferCount(0); //清空接收緩沖區

m_ctrlComm.SetPortOpen(TRUE); //打開串口

return TRUE; // return TRUE unless you set the focus to a control

}

/****************************************************************************

接收函數

****************************************************************************/

void CCommTest::OnComm()

{

char Rec_Data_Array[2048]; //用於接受數據

if (m_ctrlComm.GetCommEvent() == 2) //事件值為2表示接收緩沖區內有字符

{

VARIANT ReceiveData = m_ctrlComm.GetInput(); //獲取數據

int Data_Len = ReceiveData.parray->rgsabound->cElements; //取出壹維的數據個數

memcpy(Rec_Data_Array, (char*) ReceiveData.parray->pvData, Data_Len); //拷貝出數據

Rec_Data_Array[Data_Len] = 0;

}

//將獲取的字符串顯示在edit框裏

::SetWindowText(::GetDlgItem(m_hWnd,IDC_EDIT_RXDATA),Rec_Data_Array);

}

/****************************************************************************

發送函數

****************************************************************************/

void CCommTest::OnTransmit()

{

char buf[100]={0};

::GetWindowText(::GetDlgItem(m_hWnd,IDC_EDIT_TXDATA),buf,sizeof(buf));

m_ctrlComm.SetOutput(COleVariant(buf));//發送數據

}

  • 上一篇:谷歌地球的攻略
  • 下一篇:激光雕刻機可以雕刻木材嗎?
  • copyright 2024編程學習大全網