1基于LabWindows/CVI的串口调试助手(含参考代码)一、界面除此之外,还需要修改某些控件的属性,修改步骤如下:编辑COMSELECT控件的Label/Value属性,向控件添加项目的Label分别为串口1、串口2,相应的Value值为1、2,数据类型为整数。2编辑BTLSELECT控件的Label/Value属性,向控件添加项目的Label分别为1200、2400、4800、9600、19200,相应的Value值为1200、2400、4800、9600、19200,数据类型为整数。编辑JYSELECT控件的Label/Value属性,向控件添加项目的Label分别为奇校验、偶校验、无校验,相应的Value值为1、2、0,数据类型为整数。编辑LONGSELECT控件的Label/Value属性,向控件添加项目的Label分别为7、8、9,相应的Value值为7、8、9,数据类型为整数。编辑STOPSELECT控件的Label/Value属性,向控件添加项目的Label分别为1、2,相应的Value值为1、2,数据类型为整数。编辑两个文本框的属性:TextBoxOptions…-EnterKeyCausesNewline以允许在文本框中输入多行文本。之后保存文件com.uir。二、代码#includers232.h#includeansi_c.h#includecvirte.h#includeuserint.h#includecom.hstaticintpanelHandle;intcomSelect=0;intstatus;charinfo[513];intCVIFUNCDimObject(intstat){SetCtrlAttribute(panelHandle,PANEL_COMSELECT,ATTR_DIMMED,stat);SetCtrlAttribute(panelHandle,PANEL_BTLSELECT,ATTR_DIMMED,stat);SetCtrlAttribute(panelHandle,PANEL_JYSELECT,ATTR_DIMMED,stat);SetCtrlAttribute(panelHandle,PANEL_LONGSELECT,ATTR_DIMMED,stat);SetCtrlAttribute(panelHandle,PANEL_STOPSELECT,ATTR_DIMMED,stat);SetCtrlAttribute(panelHandle,PANEL_OPEN_COM,ATTR_DIMMED,stat);SetCtrlAttribute(panelHandle,PANEL_CLOSE_COM,ATTR_DIMMED,!stat);SetCtrlAttribute(panelHandle,PANEL_SEND,ATTR_DIMMED,!stat);SetCtrlAttribute(panelHandle,PANEL_CLEARSEND,ATTR_DIMMED,!stat);SetCtrlAttribute(panelHandle,PANEL_RECIEVE,ATTR_DIMMED,!stat);SetCtrlAttribute(panelHandle,PANEL_CLEARRECIVE,ATTR_DIMMED,!stat);return0;}intmain(intargc,char*argv[])/*——————主函数——————*/{3if(InitCVIRTE(0,argv,0)==0)return-1;/*outofmemory*/if((panelHandle=LoadPanel(0,com.uir,PANEL))0)return-1;DisplayPanel(panelHandle);RunUserInterface();DiscardPanel(panelHandle);return0;}intCVICALLBACKQuit(intpanel,intcontrol,intevent,/*——————退出、关闭串口——————*/void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:if(comSelect){CloseCom(comSelect);comSelect=0;DimObject(0);}QuitUserInterface(0);break;}return0;}intCVICALLBACKClearTextBox(intpanel,intcontrol,intevent,/*——————清空文本框——————*/void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:if(control==PANEL_CLEARRECIVE)ResetTextBox(PANEL,PANEL_RECIVETEXT,\0);//清空接收框elseResetTextBox(PANEL,PANEL_SENDTEXT,\0);//清空发送框4break;}return0;}intCVICALLBACKRecieve(intpanel,intcontrol,intevent,/*——————接收信息功能函数——————*/void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:if(!comSelect)return-1;SetComTime(comSelect,2.0);//设置通信超时时限。status=ComRd(comSelect,info,GetInQLen(comSelect));if(status=0){MessagePopup(ERROR,senddatafailed!);break;}//将接收信息写入文本框info[status]='\0';//添加结束符SetCtrlVal(PANEL,PANEL_RECIVETEXT,info);SetActiveCtrl(PANEL,PANEL_RECIVETEXT);break;}return0;}intCVICALLBACKSend(intpanel,intcontrol,intevent,/*——————发送信息功能函数——————*/void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:if(!comSelect)return-1;GetCtrlVal(PANEL,PANEL_SENDTEXT,info);//获取发送文本信息status=ComWrt(comSelect,info,strlen(info));//发送if(status!=strlen(info))MessagePopup(ERROR,senddatafailed!);5break;}return0;}intCVICALLBACKComOpen(intpanel,intcontrol,intevent,/*——————打开串口——————*/void*callbackData,inteventData1,inteventData2){intcomValue,btlValue,jhValue,longValue,stopValue;switch(event){caseEVENT_COMMIT:GetCtrlVal(PANEL,PANEL_COMSELECT,&comValue);//选择串行口(串口的一些基本设置)GetCtrlVal(PANEL,PANEL_BTLSELECT,&btlValue);//选择波特率GetCtrlVal(PANEL,PANEL_JYSELECT,&jhValue);//选择奇偶校验GetCtrlVal(PANEL,PANEL_LONGSELECT,&longValue);//选择数据位GetCtrlVal(PANEL,PANEL_STOPSELECT,&stopValue);//选择停止位status=OpenComConfig(comValue,,btlValue,jhValue,longValue,stopValue,512,512);if(status!=0){MessagePopup(ERROR,senddatafailed!);return0;}SetCTSMode(comValue,LWRS_HWHANDSHAKE_OFF);//禁止硬件握手FlushInQ(comValue);//清空输入和输出缓冲区FlushOutQ(comValue);comSelect=comValue;DimObject(1);break;}return0;}intCVICALLBACKComClose(intpanel,intcontrol,intevent,/*——————关闭串口——————*/void*callbackData,inteventData1,inteventData2)6{switch(event){caseEVENT_COMMIT:CloseCom(comSelect);comSelect=0;DimObject(0);break;}return0;}三、测试在此我们采用第一种将RXD与TXD短接的方法进行测试。配置好参数,打开串口之后,在发送字符串文本框中输入一段文字,点击发送之后,点击接收,即可在接受字符串文本框中看到接收到的字符与发送的字符一致。