[问题点数:40分]　qq_34272468　本版专家分:0　结帖率　0%　//　MSCommDlg.cpp　:　implementation　file　#include　"stdafx.h"　#include　"MSComm.h"　#include　"MSCommDlg.h"　#ifdef　_DEBUG　#define　new　DEBUG_NEW　#undef　THIS_FILE　static　char　THIS_FILE[]　=　__FILE__;　#endif　CAboutDlg　dialog　used　for　App　About　class　CAboutDlg　:　public　CDialog　{　public:　CAboutDlg();　//　Dialog　Data　//{{AFX_DATA(CAboutDlg)　enum　{　IDD　=　IDD_ABOUTBOX　};　//}}AFX_DATA　//　ClassWizard　generated　virtual　function　overrides　//{{AFX_VIRTUAL(CAboutDlg)　protected:　virtual　void　DoDataExchange(CDataExchange*　pDX);　//　DDX/DDV　support　//}}AFX_VIRTUAL　//　Implementation　protected:　//{{AFX_MSG(CAboutDlg)　//}}AFX_MSG　DECLARE_MESSAGE_MAP()　};　CAboutDlg::CAboutDlg()　:　CDialog(CAboutDlg::IDD)AFX_DATA_INIT(CAboutDlg)　//}}AFX_DATA_INIT　}　void　CAboutDlg::DoDataExchange(CDataExchange*　pDX)　{　CDialog::DoDataExchange(pDX);　//{{AFX_DATA_MAP(CAboutDlg)　//}}AFX_DATA_MAP　}　BEGIN_MESSAGE_MAP(CAboutDlg,　CDialog)　//{{AFX_MSG_MAP(CAboutDlg)　//　No　message　handlers　//}}AFX_MSG_MAP　END_MESSAGE_MAP(CMSCommDlg　dialog　CMSCommDlg::CMSCommDlg(CWnd*　pParent　/*=NULL*/)　:　CDialog(CMSCommDlg::IDD,　pParent)AFX_DATA_INIT(CMSCommDlg)　m_strTXData　=　_T("");　m_strRXData　=　_T(AFX_DATA_INIT　//　Note　that　LoadIcon　does　not　require　a　subsequent　DestroyIcon　in　Win32　m_hIcon　=　AfxGetApp()->LoadIcon(IDR_MAINFRAME);　}　void　CMSCommDlg::DoDataExchange(CDataExchange*　pDX)　{　CDialog::DoDataExchange(pDX);　//{{AFX_DATA_MAP(CMSCommDlg)　DDX_Control(pDX,　IDC_STOPBITS,　m_cStopBits);　DDX_Control(pDX,　IDC_PORT,　m_cPort);　DDX_Control(pDX,　IDC_PARITY,　m_cParity);　DDX_Control(pDX,　IDC_DATABITS,　m_cDataBits);　DDX_Control(pDX,　IDC_BAUD,　m_cBaud);　DDX_Control(pDX,　IDC_MSCOMM1,　m_ctrlComm);　DDX_Text(pDX,　IDC_EDIT_TXDATA,　m_strTXData);　DDX_Text(pDX,　IDC_EDIT_RXDATA,　m_strRXData);　//}}AFX_DATA_MAP　}　BEGIN_MESSAGE_MAP(CMSCommDlg,　CDialog)　//{{AFX_MSG_MAP(CMSCommDlg)　ON_WM_SYSCOMMAND()　ON_WM_PAINT()　ON_WM_QUERYDRAGICON()　ON_BN_CLICKED(IDC_BUTTON_MANUALSEND,　OnButtonManualsend)　ON_BN_CLICKED(IDC_BUTTON1,　OnButton1)　ON_CBN_SELCHANGE(IDC_PORT,　OnSelchangePort)　ON_CBN_SELCHANGE(IDC_BAUD,　OnSelchangeBaud)　ON_CBN_SELCHANGE(IDC_DATABITS,　OnSelchangeDatabits)　ON_CBN_SELCHANGE(IDC_STOPBITS,　OnSelchangeStopbits)　ON_CBN_SELCHANGE(IDC_PARITY,　OnSelchangeParity)　//}}AFX_MSG_MAP　END_MESSAGE_MAP(CMSCommDlg　message　handlers　BOOL　CMSCommDlg::OnInitDialog()　{　CDialog::OnInitDialog();　//　Add　"About..."　menu　item　to　system　menu.　//　IDM_ABOUTBOX　must　be　in　the　system　command　range.　ASSERT((IDM_ABOUTBOX　&　0xFFF0)　==　IDM_ABOUTBOX);　ASSERT(IDM_ABOUTBOX　<　0xF000);　CMenu*　pSysMenu　=　GetSystemMenu(FALSE);　if　(pSysMenu　!=　NULL)　{　CString　strAboutMenu;　strAboutMenu.LoadString(IDS_ABOUTBOX);　if　(!strAboutMenu.IsEmpty())　{　pSysMenu->AppendMenu(MF_SEPARATOR);　pSysMenu->AppendMenu(MF_STRING,　IDM_ABOUTBOX,　strAboutMenu)Set　the　icon　for　this　dialog.　The　framework　does　this　automatically　//　when　the　application's　main　window　is　not　a　dialog　SetIcon(m_hIcon,　TRUE);　//　Set　big　icon　SetIcon(m_hIcon,　FALSE);　//　Set　small　icon　//　TODO:　Add　extra　initialization　here　m_cPort.SetCurSel(0);　m_cBaud.SetCurSel(0);　m_cDataBits.SetCurSel(0);　m_cStopBits.SetCurSel(0);　m_cParity.SetCurSel(0);　if(m_ctrlComm.GetPortOpen())　{　m_ctrlComm.SetPortOpen(false);//关闭串口　SetDlgItemText(IDC_BUTTON1,"打开串口");　}　m_ctrlComm.SetCommPort(1);//打开软件时默认使用COM1串口　if(!m_ctrlComm.GetPortOpen())　{　m_ctrlComm.SetPortOpen(TRUE);//打开串口　SetDlgItemText(IDC_BUTTON1,"关闭串口");　}　else　{　AfxMessageBox("cannot　open　serial　port");　}　m_ctrlComm.SetSettings("9600,n,8,1");//打开软件时端口设置默认为波特率9600,无校验位,8位数据,1位停止位　m_ctrlComm.SetInputMode(1);//1:表示以二进制方式检取数据　m_ctrlComm.SetRThreshold(1);//参数1表示每当串口接收缓冲区中有多于或等于1个字符串时将引发接收数据的OnComm事件　m_ctrlComm.SetInputLen(0);//设置当前接收区数据长度为0　m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据　return　TRUE;　//　return　TRUE　unless　you　set　the　focus　to　a　control　}　void　CMSCommDlg::OnSysCommand(UINT　nID,　LPARAM　lParam)　{　if　((nID　&　0xFFF0)　==　IDM_ABOUTBOX)　{　CAboutDlg　dlgAbout;　dlgAbout.DoModal();　}　else　{　CDialog::OnSysCommand(nID,　lParam)If　you　add　a　minimize　button　to　your　dialog,　you　will　need　the　code　below　//　to　draw　the　icon.　For　MFC　applications　using　the　document/view　model,　//　this　is　automatically　done　for　you　by　the　framework.　void　CMSCommDlg::OnPaint()　{　if　(IsIconic())　{　CPaintDC　dc(this);　//　device　context　for　painting　SendMessage(WM_ICONERASEBKGND,　(WPARAM)　dc.GetSafeHdc(),　0);　//　Center　icon　in　client　rectangle　int　cxIcon　=　GetSystemMetrics(SM_CXICON);　int　cyIcon　=　GetSystemMetrics(SM_CYICON);　CRect　rect;　GetClientRect(&rect);　int　x　=　(rect.Width()　-　cxIcon　+　1)　/　2;　int　y　=　(rect.Height()　-　cyIcon　+　1)　/　2;　//　Draw　the　icon　dc.DrawIcon(x,　y,　m_hIcon);　}　else　{　CDialog::OnPaint(The　system　calls　this　to　obtain　the　cursor　to　display　while　the　user　drags　//　the　minimized　window.　HCURSOR　CMSCommDlg::OnQueryDragIcon()　{　return　(HCURSOR)　m_hIcon;　}　BEGIN_EVENTSINK_MAP(CMSCommDlg,　CDialog)　//{{AFX_EVENTSINK_MAP(CMSCommDlg)　ON_EVENT(CMSCommDlg,　IDC_MSCOMM1,　1　/*　OnComm　*/,　OnComm,　VTS_NONE)　//}}AFX_EVENTSINK_MAP　END_EVENTSINK_MAP()　void　CMSCommDlg::OnComm(TODO:　Add　your　control　notification　handler　code　here　VARIANT　variant_inp;//定义一个VARIANT类对象　COleSafeArray　safearray_inp;//定义一个COleSafeArray对象　LONG　len,k;　BYTE　rxdata[2048];//设置BYTE数组　AN8-intterthat　is　not　signed　CString　strtemp;　if(m_ctrlComm.GetCommEvent()==2)//事件值为2表示接受缓冲区内有数据　{　variant_inp=m_ctrlComm.GetInput();　safearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray型变量　len=safearray_inp.GetOneDimSize();　for(k=0;kSetCurSel(0);　if(m_nBaud<0)　((CComboBox*)GetDlgItem(IDC_BAUD))->SetCurSel(0);　if(m_nDataBits<0)　((CComboBox*)GetDlgItem(IDC_DATABITS))->SetCurSel(0);　if(m_nParity<0)　((CComboBox*)GetDlgItem(IDC_PARITY))->SetCurSel(0);　if(m_nStopBits<0)　((CComboBox*)GetDlgItem(IDC_STOPBITS))->SetCurSel(0);　}　void　CMSCommDlg::OnSelchangePort(TODO:　Add　your　control　notification　handler　code　here　m_nPort=((CComboBox*)GetDlgItem(IDC_PORT))->GetCurSel();　((CComboBox*)GetDlgItem(IDC_PORT))->SetCurSel(m_nPort);　if(m_ctrlComm.GetPortOpen())　{　m_ctrlComm.SetPortOpen(FALSE);　}　SetDlgItemText(IDC_BUTTON1,"打开串口");　}　void　CMSCommDlg::OnSelchangeBaud(TODO:　Add　your　control　notification　handler　code　here　UpdateData(TRUE);　m_nBaud=((CComboBox*)GetDlgItem(IDC_BAUD))->GetCurSel();　((CComboBox*)GetDlgItem(IDC_BAUD))->SetCurSel(m_nBaud);　switch(m_nBaud)　{　case　1:　m_ctrlComm.SetSettings("14400,,,");break;　case　2:　m_ctrlComm.SetSettings("19200,,,");break;　case　3:　m_ctrlComm.SetSettings("38400,,,");break;　case　4:　m_ctrlComm.SetSettings("56000,,,");break;　case　5:　m_ctrlComm.SetSettings("57600,,,");break;　case　6:　m_ctrlComm.SetSettings("115200,,,");break;　case　7:　m_ctrlComm.SetSettings("128000,,,");break;　case　8:　m_ctrlComm.SetSettings("256000,,,");break;　default:　m_ctrlComm.SetSettings("9600,,,");break;　}　UpdateData(FALSE);　}　void　CMSCommDlg::OnSelchangeDatabits(TODO:　Add　your　control　notification　handler　code　here　UpdateData(true);　m_nDataBits=((CComboBox*)GetDlgItem(IDC_DATABITS))->GetCurSel();　((CComboBox*)GetDlgItem(IDC_DATABITS))->SetCurSel(m_nDataBits);　switch(m_nDataBits)　{　case　1:m_ctrlComm.SetSettings(",,7,");break;　case　2:　m_ctrlComm.SetSettings(",,6,");break;　case　3:　m_ctrlComm.SetSettings(",,5,");break;　case　4:　m_ctrlComm.SetSettings(",,4,");break;　default:　m_ctrlComm.SetSettings(",,8,");break;　}　UpdateData(FALSE);　}　void　CMSCommDlg::OnSelchangeStopbits(TODO:　Add　your　control　notification　handler　code　here　UpdateData(TRUE);　m_nStopBits=((CComboBox*)GetDlgItem(IDC_STOPBITS))->GetCurSel();　((CComboBox*)GetDlgItem(IDC_STOPBITS))->SetCurSel(m_nStopBits);　switch(m_nStopBits)　{　case　1:m_ctrlComm.SetSettings(",,,2");break;　default:m_ctrlComm.SetSettings(",,,1");break;　}　UpdateData(FALSE);　}　qq_34272468　本版专家分:0　void　CMSCommDlg::OnSelchangePort(TODO:　Add　your　control　notification　handler　code　here　m_nPort=((CComboBox*)GetDlgItem(IDC_PORT))->GetCurSel();　((CComboBox*)GetDlgItem(IDC_PORT))->SetCurSel(m_nPort);　if(m_ctrlComm.GetPortOpen())　{　m_ctrlComm.SetPortOpen(FALSE);　}　SetDlgItemText(IDC_BUTTON1,"打开串口");　}　void　CMSCommDlg::OnSelchangeBaud(TODO:　Add　your　control　notification　handler　code　here　UpdateData(TRUE);　m_nBaud=((CComboBox*)GetDlgItem(IDC_BAUD))->GetCurSel();　((CComboBox*)GetDlgItem(IDC_BAUD))->SetCurSel(m_nBaud);　switch(m_nBaud)　{　case　1:　m_ctrlComm.SetSettings("14400,,,");break;　case　2:　m_ctrlComm.SetSettings("19200,,,");break;　case　3:　m_ctrlComm.SetSettings("38400,,,");break;　case　4:　m_ctrlComm.SetSettings("56000,,,");break;　case　5:　m_ctrlComm.SetSettings("57600,,,");break;　case　6:　m_ctrlComm.SetSettings("115200,,,");break;　case　7:　m_ctrlComm.SetSettings("128000,,,");break;　case　8:　m_ctrlComm.SetSettings("256000,,,");break;　default:　m_ctrlComm.SetSettings("9600,,,");break;　}　UpdateData(FALSE);　}　void　CMSCommDlg::OnSelchangeDatabits(TODO:　Add　your　control　notification　handler　code　here　UpdateData(true);　m_nDataBits=((CComboBox*)GetDlgItem(IDC_DATABITS))->GetCurSel();　((CComboBox*)GetDlgItem(IDC_DATABITS))->SetCurSel(m_nDataBits);　switch(m_nDataBits)　{　case　1:m_ctrlComm.SetSettings(",,7,");break;　case　2:　m_ctrlComm.SetSettings(",,6,");break;　case　3:　m_ctrlComm.SetSettings(",,5,");break;　case　4:　m_ctrlComm.SetSettings(",,4,");break;　default:　m_ctrlComm.SetSettings(",,8,");break;　}　UpdateData(FALSE);　}　void　CMSCommDlg::OnSelchangeStopbits(TODO:　Add　your　control　notification　handler　code　here　UpdateData(TRUE);　m_nStopBits=((CComboBox*)GetDlgItem(IDC_STOPBITS))->GetCurSel();　((CComboBox*)GetDlgItem(IDC_STOPBITS))->SetCurSel(m_nStopBits);　switch(m_nStopBits)　{　case　1:m_ctrlComm.SetSettings(",,,2");break;　default:m_ctrlComm.SetSettings(",,,1");break;　}　UpdateData(FALSE);　}　void　CMSCommDlg::OnSelchangeParity(TODO:　Add　your　control　notification　handler　code　here　UpdateData(TRUE);　m_nParity=((CComboBox*)GetDlgItem(IDC_PARITY))->GetCurSel();　((CComboBox*)GetDlgItem(IDC_PARITY))->SetCurSel(m_nParity);　switch(m_nParity)　{　case　1:m_ctrlComm.SetSettings(",O,,");break;　case　2:m_ctrlComm.SetSettings(",O,,");break;　default:m_ctrlComm.SetSettings(",N,,");break;　}　UpdateData(FALSE);　}　串口调试助手接收数据问题　在串口调试助手中以十六进制发送十六进制显示,当发送　AA　BB　00　01时得到的数据是AA　BB,是什么原因,请教各位大侠们!!　本版专家分:15366　黄花　2014年12月VC/MFC大版内专家分月排行榜第二　蓝花　2014年11月VC/MFC大版内专家分月排行榜第三　楼主将程序全部搬上来了,在显示类型中选择一下“C/C++”呀,否则如何看?　串口收不到数据或者收到错误数据　串口乱码总结　1、查看你使用的USB转串口是3.3V的串口还是5V串口,如果发送方使用的是3.3V然后你使用的USB转串口是5V是可以收到数据的但收到的数据都是错误的2、查看波特率、奇偶校验、停止位等是否设置正确。3、如果是STM32,查看寄存器设置是否正确,时钟是否使能4、查看是否将TX接成RX(很可能两根线接反了),5、查看线是否是好的,可以换线试试,查看是否存在虚焊现象6、查看驱动是否...　本版专家分:87451　状元　2017年　总版技术专家分年内排行榜第一　榜眼　2014年　总版技术专家分年内排行榜第二　探花　2013年　总版技术专家分年内排行榜第三　进士　2018年总版新获得的技术专家分排名前十　2012年　总版技术专家分年内排行榜第七　没准是串口线断了或太长。　串口有时候收不到数据,是怎么回事?　我写了一个串口收发数据的程序,可是有时候发现明明有数据发向串口,我的程序却接收不到,这时候我用别人的程序打开关闭一下该串口,再用我的程序打开该串口就可以正常的收到数据了,请问这是怎么回事?　一下是我打　qq_31812171　本版专家分:0　请问楼主怎么解决的?　串口通信异常---串口参数设置无效　硬件环境:PC机、232转485串口、RS485_RTU26继电器软件环境:VC6.0,　DTS_ViewAnalysis.exe动态调用ExternalRelayCardMgmt.dll测试工具:串口监控Serial　Port　Monitor、串口助手、串口交叉线现象1:打开pc机,运行测试程序,串口通信失败。现象2:打开PC机,随便使用一个串口助手,对当前使用的串口进行设置,关qq_36634306　本版专家分:315　断点调串口的响应啊,看一下缓冲区。　本版专家分:162　你有串口调试工具吗?直接打开,测试。　使用printf函数实现串口信息打印——设置IAR和Keil的Options　在Keil和IAR中都可以使用printf函数,但两者设置的方法不一样。以下分别是IAR和Keil的设置。下面是Keil的设置。选中Options--->Target--->Code　Generation--->Use　MicroLIB。转载于:https://www.cnblogs.com/zaishuiyifang006/p/4180168....　匿名用户不能发表回复!　1,下载　串口　工具　下载地址:https://files.cnblogs.com/files/senior-engineer/%E4%B8%B2%E5%8F%A3%E8%B0%83%E8%AF%95%E5%8A%A9%E6%89%8B.rar2,　串口　调试　助手　工具参数设置　串口　助手　-----设置波特率:384003,将打印的　串口　数据用UE打开　比喻每包...　服务器端:String encodeStr = URLEncoder.encode("中国", "utf-8"); System.out.println("处理后:" + encodeStr); //处理后:%E4%B8%AD%E5%9B%BD 客户端:String decodeStr = URLDecoder.decode(encodeStr, "utf-8　命令行下:查看所有　串口　ls　dev/tty*查看　串口　信息　stty　-F　dev/ttyTHS1　-a配置　串口　信息　stty　-F　dev/ttyTHS1　ispeed　115200　ospeed　115200　cs8　发送数据　echo　2131　>...　最近学习linux　串口　编程,总结一下遇到的一些问题(1)write(fd,"xxxx",len)每次发送都没有接收到,主要问题字符串后面加　回车　即“\n” (2)主要问题就是　阻塞和非阻塞的问题read函数ssize_t read(int　fd,　void　*buf,　size_t　count);参数: fd: 将要读取数据的文件描述词。buf:　 所对串口　也是一无所知,做　串口　的底层开发。　想请教大神,一个　串口　能　发送数据　,然后自己　接收数据　么?　我这样写完　用虚拟　串口　测试　开启两个程序可以互相收发　开启一个程序,打开　串口　,进去　发送数据　没有反应。订阅事　void　Init_USART()　{　TMOD=0x20;　TH1=0xfd;　//波特率9600　TL1=0xfd;　TR1=1;　SCON=0x50;　//PCON=0x00;　TI=0;　RI　在进行　串口　调试时,数据发送没有问题,da　有两个问题,分别对应两个　串口　设备与电脑的连接问题:　1、第一个　串口　设备的问题是:每次打开　串口　设备以后,调试程序　串口　打开成功,但是程序运行后读取不到数据。如果事先打开　串口　调试程序,点击手动发送以后就可以　在ubuntu上写　串口　通信程序时,出现了数据发送正常,但是　无法　接收数据　的现象,read()函数读取一直失败。经过查询资料,发现是　串口　配置一般在正规模式(.c_lflag　=　ICANON)下,因此数据读取到时一直存放在缓冲区,read()进行读取时只有识别到"回车"或者“换行”符号的时候,才会从缓冲区读取成功。解决办法1:对数据发送端进行处理,在数据末尾加上换行符号;解决办法2:原始输入模式是没有...　先介绍一下,这个项目是Modbus和C#关于声音播放器的内容。这篇文章介绍的事ModBus中　串口　的协议,相信看到这篇文章的都知道ModBus协议,先介绍主流的两种　串口　和TCP协议。下载虚拟　串口　软件地址:https://files.cnblogs.com/files/wxylovejx/%E8%99%9A%E6%8B%9F%E4%B8%B2%E5%8F%A3VSPD6.9.zip下载调试精灵软件...　urllib是学习python爬虫需要掌握的最基本的库,它主要包含四个模块:urllib.request基本的HTTP请求模块。可以模拟浏览器向目标服务器发送请求。urllib.error　异常处理模块。如果出现错误,可以捕捉异常。urllib.parse　工具模块。提供URL处理方法,　比如对URL进行编码和解码。urllib.robotpaser　用来判断哪些网站可以爬,哪些网站不可以...　运行在arm-linux上的录像程序,同时要接收响应上位机的命令。　从视频流得到的视频数据放置在内存中的视频文件中,一个文件结束后拷贝到sd卡上。　但是这样做就引起　串口　接收的问题,当接收一条70多个字　串口　助手　可以正常接收电子天平的数据,也能正常发送,rs232接口。但是当连接ph计时,接收不到ph计的数据,这是为什么,ph计用的是梅特勒的。各种　串口　助手　都试过了　 　Linux下　串口　编程的文章网上是满天飞,但大都是出自一篇文章,而且写的都是些基本的操作,像控制RTS/CTS等　串口　引脚状态,接收发送二进制数据等,都没有很好的说明,我在使用中遇到了些问题,写出来,希望能对大家有所帮助,少走弯路,呵呵! 　我使用的操作系统是Redhat9,gcc　相信老铁们,在实际项目开发中,当使用Freemodbus从机协议栈时,会遇到一个问题,就是网上大多数对于该协议栈的移植,在数据接收这块,使用的大都是　串口　中断接收模式。这样做会有一个问题,如果一条Modbus总线上有若干个从机,一个个从机接收到主机的数据请求时,返回的数据长度大于1kBytes,会有一个问题,总线上其他的从机都处于　串口　中断接收模式,这样的话,在这段时间内,其他的从机是处于忙碌状态。可...　#include　int　YPR;　unsigned　char　Re_buf,counter=0;　unsigned　char　sign=0;　int　led　=　13;　//---　根据厂家提供的仪器的通讯协议,用　串口　调试　助手　,接收不到数据。。?　一.　通讯方式:　1.　监控设备仪器与计算机集中监控软件间的连接采用RS232通讯方式.　2.　通讯波特率:　9600bps.　3.　初学　串口　编程,写了一个　串口　程序,接收部分没有问题,有　串口　调试　助手　,用我写的程序　发送数据　,　串口　调试　助手　接收没有数据,是不是的写数据部分有问题啊,求指教;多谢了　BOOL　CYBcommDlg::Writ　那一根数据线,分别连了两台电脑的COM2口　通过发送端向端口写数据　::WriteFile(m_hComDev,　leftdata,　leftlength,(unsigned　long*)&rc,　N　BOOL　bDone　=　ReadFile(m_hCom,　//handle　to　file　*m_DataBuffer,　//data　buffer　*rst.cbInQue,　//number　of　bytes　to　read　factbyte,　//number　of　bytes　read&rOverLaped);if(!　bDone　&&　GetLast　我从网上找到一个　串口　通讯的程序,自己改了一些设置。可是能　发送数据　,接收不到数据　#include　#include　#include　折腾了两天了,一直没解决问题。　用mscomm　串口　控件,　设置接收20个字节时,触发事件,　但有事件触发,但收到的数据不足20个字节。　用BusHound监控查看,发现,是分二段数据还回。。　请问下,这种情况要怎么处理?　:会提示:　public　partial　class　Form1　:　Form　{　//SerialPort　sp1　=　new　SerialPort();//声明一个　串口　类bool　isOpen　=　false;//打开　串口　标志位　bool　isSetProperty　=　false;//属性设置标志位　bool　isHex　=　false;//十六进制显示标志位　public　Form1()　{　//sp1.DataReceived　+=　new　SerialDataReceivedEventHandler(sp1_DataReceived);　InitializeComponent();　}　private　void　Form1_Load(object　sender,　EventArgs　e)　{　this.MaximumSize　=　this.Size;　this.MinimumSize　=　this.Size;　this.MaximizeBox　=　false;　for　(int　i　=　1;　i　<　ReceiveData.Length;　i++)　{　RecvDataText　+=　("0x"　+　ReceiveData[i].ToString("X2"X为十六进制　2为每次都是两位数　这样看着整齐　}　tbxRecvData.Text　+=　RecvDataText;　}　sp1.DiscardInBuffer();//丢弃接收缓冲区的数据　}));　}　private　void　btnSend_Click(object　sender,　EventArgs　e)　{　//写　串口　数据　if　(isOpen)　{　try　{　sp1.WriteLine(tbxSendData.Text);　}　catch　{　MessageBox.Show("　发送数据　时发生错误!",　"错误提示");　return;　}　}　else　{　MessageBox.Show("　串口　未打开!",　"错误提示");　return;　}　//检测要发送的数据　if　(!CheckSendData())　{　MessageBox.Show("请输入要发送的数据!",　"错误提示");　return;　}　}　private　void　btnOpenCOM_Click(object　sender,　EventArgs　e)　{　if　(isOpen　==　false)　{　if　(!CheckPortSetting())　{　MessageBox.Show("　串口　未设置!",　"错误提示");　return;　}　if　(!isSetProperty)//　串口　未设置则设置　串口　{　SetPortProperty();　isSetProperty　=　true;　}　try//打开　串口　{　sp1.Open();　isOpen　=　true;　btnOpenCOM.Text　=　"关闭　串口　";　//　串口　打开后则相关的　串口　设置按钮便不可再用　cbxCOMPort.Enabled　=　false;　cbxBaudRate.Enabled　=　false;　cbxDataBits.Enabled　=　false;　cbxParity.Enabled　=　false;　cbxStopBits.Enabled　=　false;　rbnChar.Enabled　=　false;　rbnHex.Enabled　=　false;　}　catch　{　//打开　串口　失败后,相应标志位取消　isSetProperty　=　false;　isOpen　=　false;　MessageBox.Show("　串口　无效或已被占用!",　"错误提示");　}　}　else　{　try　//打开　串口　{　sp1.Close();　isOpen　=　false;　isSetProperty　=　false;　btnOpenCOM.Text　=　"打开　串口　";　//关闭　串口　后,　串口　设置选项便可以继续使用　cbxCOMPort.Enabled　=　true;　cbxBaudRate.Enabled　=　true;　cbxDataBits.Enabled　=　true;　cbxParity.Enabled　=　true;　cbxStopBits.Enabled　=　true;　rbnChar.Enabled　=　true;　rbnHex.Enabled　=　true;　}　catch　{　MessageBox.Show("关闭　串口　时发生错误!",　"错误提示"private　void　btnCleanData_Click(object　sender,　EventArgs　e)　{　tbxRecvData.Text　=　"";　tbxSendData.Text　=　"";　tbxSendData.Focus();　}　private　void　Form1_FormClosing(object　sender,　FormClosingEventArgs　e)　{　System.Environment.Exit(0);　}　代码如下:　Public　WithEvents　g_port　As　IO.Ports.SerialPort　g_port.PortName　=　mPort　g_port.BaudRate　=　Bual　数据可以发出去,但是就是接收不到。。。。　代码:　BOOL　CcomDlg::OnInitDialog()　{　//1　打开　串口　hCom　=　CreateFile(_T("COM5"),　GENER　当我发送的数据大于等于128时,接收到的数据就会被替换成63,而这63时parity　replace中的值,![图片说明](https://img-ask.csdn.net/upload/201609/08/1473348138_252184.png)