好文档 - 专业文书写作范文服务资料分享网站

VC6.0MFC串口通信编写全过程(DOC)

天下 分享 时间: 加入收藏 我要投稿 点赞

{

// TODO: Add your control notification handler code here UpdateData(true);

m_ParityCheck=((CComboBox*)GetDlgItem(IDC_COMBO_ParityCheck))->GetCurSel();//当前选中的行

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

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

switch(m_ParityCheck) {

case 1: m_ctrlComm.SetSettings(\ break;

case 2: m_ctrlComm.SetSettings(\ break;

default:m_ctrlComm.SetSettings(\ break; }

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

UpdateData(false); }

此时应将代码段2:提示4中所指的那5个语句前的“//”删除 9、串口添加打开或关闭按钮 以同样的方式添加按钮,并将标题修改为“关闭串口”字样,为此按钮添加处理函数程序代码如下: 代码段8:

void CSCommTestDlg::OnButton1Start() {

//检查是否改变默认的串口值,没有改变m_Index的值是0的,否则则不为0 if(m_Index<0)//串口的默认值没有改变 { switch(m_ctrlComm.GetPortOpen())//点击打开或关闭串口按键时,根据当前串口是否打开进行相应操作 { case 1: /************************************************************** 关闭串口前先将自动发送功能关闭

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

SetDlgItemText(IDC_BUTTON_AutoSend,\自动发送\更改按键指示 KillTimer(1);

/**************************************************************/ //当前串口是打开的则进行关串口操作 m_ctrlComm.SetPortOpen(FALSE);//关闭串口 SetDlgItemText(IDC_BUTTON1,\打开串口\更改按键指示 UpdateData(FALSE);//更新按键状态 break; case 0://当前串口是关闭的则进行开串口操作 m_ctrlComm.SetCommPort(1);//如果要打开串口则应先选择哪个串口 m_ctrlComm.SetPortOpen(TRUE);//打开串口 SetDlgItemText(IDC_BUTTON1,\关闭串口\更改按键指示 UpdateData(FALSE); break; default : AfxMessageBox(\ } }

else//串口的默认值有改变 { switch(m_ctrlComm.GetPortOpen())//点击打开或关闭串口按键时,根据当前串口是否打开进行相应操作 { case 0://当前串口是关闭的则进行开串口操作 m_ctrlComm.SetCommPort(m_Index+1);//如果要打开串口则应先选择哪个串口 m_ctrlComm.SetPortOpen(TRUE);//打开串口 SetDlgItemText(IDC_BUTTON1,\关闭串口\更改按键指示 UpdateData(FALSE);//更新按键状态 break; case 1: /************************************************************** 关闭串口前先将自动发送功能关闭

***************************************************************/ SetDlgItemText(IDC_BUTTON_AutoSend,\自动发送\更改按键指示 KillTimer(1);

/**************************************************************/ //当前串口是打开的则进行关串口操作

m_ctrlComm.SetPortOpen(FALSE); SetDlgItemText(IDC_BUTTON1,\打开串口\ UpdateData(FALSE); break; default : AfxMessageBox(\ } }

if(m_Index<0)

((CComboBox*)GetDlgItem(IDC_COMBO_CommSelect))->SetCurSel(0);//如果没有另外进行串口选择则显示COM1 if(m_BaudRate<0)

((CComboBox*)GetDlgItem(IDC_COMBO_BaudRate_Select))->SetCurSel(0);//如果没有另外进行波特率选择则显示9600 if(m_Date_Select<0)

((CComboBox*)GetDlgItem(IDC_COMBO_Date_Select))->SetCurSel(0);////如果没有另外进行数据位选择则显示8 if(m_StopBit<0)

((CComboBox*)GetDlgItem(IDC_COMBO_StopBit))->SetCurSel(0);//如果没有另外进行停止位选择则显示1 if(m_ParityCheck<0)

((CComboBox*)GetDlgItem(IDC_COMBO_ParityCheck))->SetCurSel(0);//如果没有另外进行校验位选择则显示没有校验位N }

10、添加自动发送功能: A、添加一个“编辑框”控件,此控件用于获取自动发送的时间间隔的,修改其ID为IDC_EDIT_Timer,为其添加一个value类UINT型变量m_Timer B、添加一个“按钮”控件,修改其ID为IDC_BUTTON_AutoSend修改其标题为“自动发送” C、添加一个“按钮”控件,修改其ID为IDC_BUTTON_StopAutoSend修改其标题为“停止自动发送” D、为“自动发送”按钮添加BN_CLICKED处理函数,程序代码如下: 代码段9:

void CSCommTestDlg::OnBUTTONAutoSend() {

UpdateData(TRUE);

if(m_Timer<=0)//判断是否设置自动发送时间间隔 AfxMessageBox(\请设置自动发送时间间隔\

else if(!m_ctrlComm.GetPortOpen())//判断是否打开串口 AfxMessageBox(\请打开串口\ else

{SetDlgItemText(IDC_BUTTON_AutoSend,\自动发送...\更改按键指示 SetTimer(1,m_Timer,NULL);} }

E、为“停止自动发送”按钮添加BN_CLICKED处理函数,程序代码如下: 代码段9:

void CSCommTestDlg::OnBUTTONStopAutoSend() {

// TODO: Add your control notification handler code here

SetDlgItemText(IDC_BUTTON_AutoSend,\自动发送\更改按键指示 KillTimer(1); } F、因为要设置自发送,所以要添加一个Windows定时函数,步骤如下: 进入类向导,Message Maps中的Object IDs中选择CScommTestDlg再选择Messages中的

WM_TIMER,进入TIMER函数后,添加如下程序代码如下:

代码段10:

void CSCommTestDlg::OnTimer(UINT nIDEvent) {

// TODO: Add your message handler code here and/or call default UpdateData(TRUE);

if(m_ctrlHexSend.GetCheck()) {

CByteArray hexdate;

int len=String2Hex(m_strTXData,hexdate);

m_ctrlComm.SetOutput(COleVariant(hexdate)); } else

m_ctrlComm.SetOutput(COleVariant(m_strTXData)); CDialog::OnTimer(nIDEvent); }

11、十六进制数据发送及接收显示

添加一个“复选框”控件,修改ID为IDC_CHECK_HexSend,标题为“HEX发送”,进

入类向导添加control类CButton型变量,变量名为m_ctrlHexSend,然后为为SCommTestDlg类添加以下两个PUBLIC成员函数,在Class view中右击CCommTestDlg选中Add Member Function… 然后在函数类型中输入“int”,在函数描述中输入“String2Hex(CString str, CByteArray &senddate)”然后确定。编辑函数体如下:

代码段11:

int CSCommTestDlg::String2Hex(CString str, CByteArray &senddate) { int hexdate,lowhexdate; int hexdatelen=0; int len=str.GetLength(); senddate.SetSize(len/2); for(int i=0;i

{ i++; continue; } i++; if(i>=len) break; lstr=str[i]; hexdate=ConvertHexChar(hstr); lowhexdate=ConvertHexChar(lstr); if((hexdate==16)||(lowhexdate==16)) break; else hexdate=hexdate*16+lowhexdate; i++; senddate[hexdatelen]=(char)hexdate; hexdatelen++; } senddate.SetSize(hexdatelen); return hexdatelen; }

再添加别一个CCommTestDlg添加两个成员函数,在函数类型中输入“char”,在函数描述中输入“ConvertHexChar(char ch)”然后确定。编辑函数体如下: 代码段12:

char CSCommTestDlg::ConvertHexChar(char ch) { if((ch>='0')&&(ch<='9')) { return ch-0x30; } else if((ch>='A')&&(ch<='F')) { return ch-'A'+10; } else if((ch>='a')&&(ch<='f')) { return ch-'a'+10; } else return (-1); }

VC6.0MFC串口通信编写全过程(DOC)

{//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(true);m_ParityCheck=((CComboBox*)GetDlgItem(IDC_COMBO_ParityCheck))->GetCurSel();//当前选中的行///*******
推荐度:
点击下载文档文档为doc格式
0g0j04yhk617c19373fh7l7tx29ybm00g5c
领取福利

微信扫码领取福利

微信扫码分享