設置項目名稱為
ComTest
(這個地方隨意命名,根據個人習慣),點擊確定后,
點擊下一步
出現如下界面
選擇“基於對話框”模式然后直接點擊完成即可(其他選項按默認方式),點擊完成后出現如下界面
解決資源管理器中自動給你生成好代碼目錄(可點擊菜單欄“視圖”選項打開解決方案資源管理器),如下圖所示
然后把最重要的串口通信控件加入到工具箱中,因為默認的工具箱是不帶 MS 串口通信控件的。添加方法如下:在工具箱界面點擊鼠標右鍵出現如下界面:
我們吧串口控件添加到對話框里,位置隨意,運行的時候是看不見的,所以最終界面是這樣子的
兩個編輯框,一個用於接收顯示數據ID設置為IDC_EDIT_RXDATA(在控件屬性框里設置),另一個用於輸入發送數據,ID設置為IDC_EDIT_TXDATA,兩岸按鈕,一個用於發送數據,將其ID設為IDC_BUTTON_MANUALSEND,另一個用於清空接收的編輯框,ID默認就行,不再贅述。
回到對話框編輯界面,鼠標左鍵點擊串口控件按鈕,然后在對應的屬性欄,點擊閃電按鈕(控件事件)
添加串口事件消息處理函數,並將函數名改為OnComm,在上圖中所示位置改就行。
我們在OnComm()函數加入相 應的處理代碼就能實現自已想要的功能了。請你在函數中加入如下代碼:
void CSCommDlg::OnComm()
{
// TODO: 在此處添加消息處理程序代碼
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //設置BYTE數組 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm.get_CommEvent()==2) //事件值為2表示接收緩沖區內有字符
{
safearray_inp.GetElement(&k,rxdata+k);//轉換為BYTE型數組
for(k=0;k<len;k++)
//將數組轉換為Cstring型變量
////此處編譯有錯誤,可在項目屬性->配置屬性->常規里將“字符集”改為使用多字節字符集即可
}
打開串口和設置串口參數
你可以在你需要的時候打開串口,例如在程序中做一個開始按鈕,在該按鈕的處理函數中打開串口。現在我們在主對話框的
CSCommTestDlg::OnInitDialog()
打開串口,找到
// TODO: Add extra initialization here,並在下面
加入如下代碼:
// TODO: 在此添加額外的初始化代碼
m_ctrlComm.put_CommPort(5);
//選擇串口號5(筆記本沒有串口,用的虛擬串口,可以使用軟件vspd創建)
m_ctrlComm.put_PortOpen(TRUE);
//打開串口
m_ctrlComm.put_RThreshold(2);
//收到兩個字節引發OnComm事件
m_ctrlComm.put_InputMode(1);
//輸入模式選為二進制
m_ctrlComm.put_Settings(_T("9600,n,8,1"));
//設置串口參數,波特率,無奇偶校驗,位停止位,位數據位
m_ctrlComm.put_InputMode(1);
// 以二進制方式檢取數據
m_ctrlComm.put_RThreshold(1); //參數1表示每當串口接收緩沖區中有多於或等於1個字符時將引發一個接收數據的OnComm事件
m_ctrlComm.put_InputLen(0); //設置當前接收區數據長度為0
m_ctrlComm.get_Input();//先預讀緩沖區以清除殘留數據
發送數據
先為發送按鈕添加一個單擊消息即BN_CLICKED處理函數,方法和串口事件控制函數的添加方法一樣(只不過是在實踐中的
OnBnClickedButtonManualsend里添加
),不再贅述,
在函數中添加如下代碼:
// TODO: 在此添加控件通知處理程序代碼
UpdateData(TRUE);
//讀取編輯框內容
m_ctrlComm.put_Output(COleVariant(m_strTXData)); //發送數據
運行程序,在發送編輯框中隨意輸入點什么,單擊發送按鈕,這時候在另一端的串口調試助手(或別的調試工具)接收框里就會有數據出現啦。
最后那個“清除接收框”的按鈕還沒有用到,為它添加點擊觸發時間,在函數里添加如下代碼即可:
void CSCommDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知處理程序代碼
m_strRXData="";
UpdateData(FALSE);
}
這樣簡單的串口通信就基本完成了。











