打開VC++6.0,建立一個基於對話框的MFC應用程序。
菜單中依次選擇Project -> Add To Project -> Components and Controls
在彈出的Components and Controls Gallery 窗口中雙擊Registered Activex Controls文件夾
選中Microsoft Communications Control,version 6.0,點擊Insert添加控件,如下圖
在這裡如果沒有找到Microsoft Communications Control,version 6.0怎麼辦?
如果沒有,說明這個控件還沒有注冊。那麼需要先注冊此控件,方法如下:
開始 -> 運行 中輸入 regsvr32 mscomm32.ocx
點擊確定注冊
添加控件後會彈出一個確認框
點擊“確定”
再點擊"OK",控件就添加成功了
把此控件拖入界面中,利用MFC ClassWizard添加成員變量(我在這裡用的變量名是m_msCom,可變),如圖
然後在控件的屬性裡進行一些必要的配置:
CommPort設置串口號
InputMode設置為1-Binary,表示以二進制方式檢取數據
RThreshold設置為1,表示每當串口接收緩沖區中有多於或等於1個字符時將引發一個接收數據的OnComm事件
其它的用默認值。
也可以在OnInitDialog()函數中用代碼設置,如下:
m_msCom.SetCommPort(1); // 指定串口號為1(視實際情況而定)
if (m_msCom.GetPortOpen())
{
m_msCom.SetPortOpen(FALSE);
}
m_msCom.SetInputMode(1); //1:表示以二進制方式檢取數據
m_msCom.SetRThreshold(1);
//參數1表示每當串口接收緩沖區中有多於或等於1個字符時將引發一個接收數據的OnComm事件
設置好以後,要在程序的開始打開串口,不然是沒發使用的。在OnInitDialog中加入以下代碼:
m_msCom.SetPortOpen(TRUE); // 打開串口
m_msCom.GetInput(); //先預讀緩沖區以清除殘留數據
OK,在你需要的地方可以隨時發送串口數據了,很簡單:
m_msCom.SetOutput(COleVariant(TXData)); //發送數據TXData
接收串口數據:
首先要添加串口事件消息處理函數,雙擊控件,彈出添加成員函數對話框,我們用默認的函數名OnOnCommMscomm1,這裡也可以更改函數名。
這個函數是用來處理串口消息事件的,如每當串口接收到數據(正如我們前面設置的RThreshold,每當串口接收緩沖區中有多於或等於1個字符時將引發一個接收數據的OnComm事件),就會產生一個串口接收數據緩沖區中有字符的消息事件,剛才添加的函數就會執行,我們在OnOnCommMscomm1函數加入相應的處理代碼就能實現自已想要的功能了。在該函數中加入如下代碼以接收數據:
// TODO: Add your control notification handler code here
if (m_msCom.GetCommEvent() == 2) //事件值為2表示接收緩沖區內有字符
{
Sleep(100);
VARIANT rec_data;
int data_len;
char cData[1024];
rec_data = m_msCom.GetInput(); // 讀取緩沖區
data_len = rec_data.parray->rgsabound->cElements;
memcpy(cData,(char *)rec_data.parray->pvData,data_len);
cData[data_len] = 0;
// cData就是指向接收到的字符串的指針
m_list.AddString(cData); //在listBox控件中顯示接收到的數據
}