VCMFC编写串口调试助手

上传人:沈*** 文档编号:125738052 上传时间:2022-07-27 格式:DOC 页数:37 大小:879KB
收藏 版权申诉 举报 下载
VCMFC编写串口调试助手_第1页
第1页 / 共37页
VCMFC编写串口调试助手_第2页
第2页 / 共37页
VCMFC编写串口调试助手_第3页
第3页 / 共37页
资源描述:

《VCMFC编写串口调试助手》由会员分享,可在线阅读,更多相关《VCMFC编写串口调试助手(37页珍藏版)》请在装配图网上搜索。

1、VC(MFC)编写串口调试助手1. 序确定基本功能:1.自动寻找串口,并自动添加到下拉框中共选择;2.有波特率、数据位、停止位、校验位的选择设置;3.串口打开控制按钮;4.发送、清除按钮;5.接收是自动实现的;6.有定时自动发送功能;7.有传送文件功能;8.有状态栏显示,指示串口状态,设置参数和发送接收显示。下面就一步步实现,本人纯业余,只是记录下来这个学习过程,请勿拍砖。开发平台Visual C+6.0英文版,电脑是i7-2670Q四核8G内存1G独显的笔记本,装的win7 64位旗舰版,因此VC6兼容不是太好,有些小毛病,不过不影响编写。2. 创建MFC项目File - New - Pro

2、jects选择MFC AppWizard(exe),项目名称commassist选择OK选中Dialog based,点击Next 。默认选项,点击Next ,继续默认选项,点击Next ,如果选中As a statically linked library,生产的EXE可直接在没装VC的机器上运行。可以在项目中进行更改。选择第二个CCommassistDlg,点击Finish点击OK。项目创建完毕,进入项目。删除界面上确定和取消按钮以及静态文字。3. 创建界面保存后便可以开始创建界面了。参考界面仿照设计的界面,具体添加按钮或编辑框等的布局步骤就不用细说了。4. 图标修改在资源视图中选择Ico

3、n右键InsertIcon加入打开和关闭的Icon图标或自行绘制,如下图IDR_MAINFRAME原为MFC提供的图标,这里我直接改成自己的,生成EXE后将会显示这个图标。下面将帮助页面图标也改为自绘图标。在打开按钮旁边加入自绘的打开和关闭图标:先加入工具条中的Picture,然后选中右键看属性,并如图将Image选为默认的IDI_ICON_CLOSE。如下图5. 基本设置下面对各个按钮及编辑框设置进行描述右键串口对应的Combo Box,ID设置为IDC_COMLIST,Type设置为Drop List,Sort不选择(我系统是WIN7 64位,不选中反而自动排序,至于XP得试试看了,以下的

4、选择相同)。右键波特率对应的Combo Box,ID设置为IDC_BAUD,Type及Sort同上。右键数据位对应的Combo Box,ID设置为IDC_BDATA,Type及Sort同上。右键停止位对应的Combo Box,ID设置为IDC_BSTOP,Type及Sort同上。右键校验位对应的Combo Box,ID设置为IDC_CAL,Type及Sort同上。每个下拉框要点击右边的小箭头,然后将其拉长,不然显示不出内容。接收EDIT框ID设置为IDC_EDIT_RX。发送EDIT框ID设置为IDC_EDIT_TX。自动发送时间间隔的EDIT框ID设置为IDC_EDIT_TIMER。选择文件

5、后面的EDIT框ID设置为IDC_EDIT_FILEPATH。接收区的十六进制显示的Check Box复选框ID设置为IDC_CHECK_HEXRX。发送区的十六进制发送的Check Box复选框ID设置为IDC_CHECK_HEXTX。按钮“打开串口”ID设置为IDC_COMCONTROL。按钮“清空显示区”ID设置为IDC_BTN_CLRRX。按钮“手动发送”ID设置为IDC_BTN_HANDSEND。按钮“清空发送区”ID设置为IDC_BTN_CLRTX。按钮“自动发送”ID设置为IDC_BTN_AUTOSEND。按钮“选择文件”ID设置为IDC_BTN_SELCTFILE。按钮“发送文

6、件”ID设置为IDC_BTN_SENDFILE。6. 开始写代码6.1. 基本思路:因为串口通信部分代码我可能用在以后的单片机上位机上,因此考虑单独形成CPP和H文件,定义为comm.cpp和comm.h。在comm.cpp中编写串口创建、打开、关闭以及串口监听线程(用于自动接收)的代码,同时加入进制转换或显示的函数,这些在comm.h文件中申明,在主对话框中包含comm.h即可。想修改按钮样式,在网上搜了一圈,结果不轻松,最后确定创建新类来实现。6.2. 创建自定义按钮类:View - Class Wizard选择Add Class - New,名字MyButton,基类选择CButton。

7、在头文件 MyButton.h 中加入以下变量和函数定义:private:intm_Style;/按钮形状(0-正常,1-当前,2-按下,3-锁定) boolb_InRect;/鼠标进入标志CStringm_strText;/按钮文字COLORREFm_ForeColor;/文本颜色COLORREFm_MouseInColor;/鼠标进入时文本颜色COLORREFm_BackColor;/背景颜色COLORREFm_LockForeColor; /锁定按钮的文字颜色CRectm_ButRect;/按钮尺寸CFont*p_Font; /字体void DrawButton(CDC *pDC);/画

8、正常按钮/ 接口函数public:MyButton();void SetText(CString str);/设置文字void SetForeColor(COLORREF color);/设置文本颜色void SetBkColor(COLORREF color);/设置背景颜色void SetTextFont(int FontHight,LPCTSTR FontName);/设置字体在 MyButton.cpp 的构造函数中初始化变量:m_Style = 1;/m_Style = 0;/按钮形状风格b_InRect = false;/鼠标进入标志m_strText = _T();/按钮文字(使

9、用默认文字)m_ForeColor = RGB(0,0,0);/文字颜色(黑色)m_MouseInColor = RGB(0,0,255);/鼠标进入时文字颜色(蓝色)m_BackColor = RGB(230,230,230);/m_BackColor = RGB(243,243,243);/背景色(灰白色)m_LockForeColor = GetSysColor(COLOR_GRAYTEXT);/锁定按钮的文字颜色p_Font = NULL;/字体指针用ClassWizard添加下列消息函数:PreSubclassWindow();DrawItem();onMouseMove();OnL

10、ButtonDown();OnLButtonUp();在各函数内加入代码:void MyButton:PreSubclassWindow() / TODO: Add your specialized code here and/or call the base classModifyStyle( 0, BS_OWNERDRAW ); /设置按钮属性为自画式/PreSubclassWindow()在按钮创建前自动执行,所以我们可以在其中做一些初始工作。/这里只做了一项工作,就是为按钮设置属性为“自绘”式,这样,用户在添加按钮后,就不需设置“Owner draw”属性了。CButton:PreSu

11、bclassWindow();void MyButton:DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) / TODO: Add your code to draw the specified itemCDC *pDC = CDC:FromHandle( lpDrawItemStruct-hDC ); m_ButRect = lpDrawItemStruct-rcItem; /获取按钮尺寸 if( m_strText.IsEmpty() ) GetWindowText( m_strText ); /获取按钮文本 int nSavedDC = pDC-Sa

12、veDC(); VERIFY( pDC ); DrawButton( pDC ); /绘制按钮 pDC-RestoreDC( nSavedDC );/DrawItem()函数是一个关键函数,按钮的绘制工作就在这里进行,它的作用相当于对话框中的OnPaint()函数和视图中的OnDraw()函数。/这里我做了三项工作:获取按钮尺寸、获取按钮文本、绘制按钮。其中绘制工作在自定义函数DrawButton()中完成。以下就是绘制过程:void MyButton:DrawButton(CDC *pDC) /调整状态 if( m_Style=3 ) m_Style = 0; if( GetStyle()

13、& WS_DISABLED ) m_Style = 3; /禁止状态 /根据状态调整边框颜色和文字颜色 COLORREF bColor, fColor; /bColor为边框颜色,fColor为文字颜色 switch( m_Style ) case 0: bColor = RGB(192,192,192); fColor = m_ForeColor; break; /正常按钮 case 1: bColor = RGB(255,255,255); fColor = m_ForeColor; break; /鼠标进入时按钮 case 2: bColor = RGB(192,192,192); fC

14、olor = m_MouseInColor; break; /按下的按钮 case 3: bColor = m_BackColor; fColor = m_LockForeColor; break; /锁定的按钮 /绘制按钮背景 CBrush Brush; Brush.CreateSolidBrush( m_BackColor ); /背景刷 pDC-SelectObject( &Brush ); CPen Pen; Pen.CreatePen(PS_SOLID, 3, bColor ); pDC-SelectObject( &Pen ); pDC-RoundRect(&m_ButRect,C

15、Point(10,10); /画圆角矩形 /绘制按钮按下时的边框 if( m_Style!=2 ) CRect Rect; Rect.SetRect( m_ButRect.left+1, m_ButRect.top+1, m_ButRect.right, m_ButRect.bottom ); pDC-DrawEdge( &Rect, BDR_RAISEDINNER, BF_RECT ); /画边框 /绘制按钮文字 pDC-SetTextColor( fColor ); /画文字 pDC-SetBkMode( TRANSPARENT ); pDC-DrawText( m_strText, &m

16、_ButRect, DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_END_ELLIPSIS); /绘制拥有焦点按钮的虚线框 if( GetFocus()=this ) CRect Rect; Rect.SetRect( m_ButRect.left+3, m_ButRect.top+2, m_ButRect.right-3, m_ButRect.bottom-2 ); pDC-DrawFocusRect( &Rect ); /画拥有焦点的虚线框 /变量 m_Style 表征当前按钮状态,它的取值为:0-正常,1-当前,2-按下,3-锁定。不同状态下按钮

17、的边框颜色和文字颜色有所不同。/m_Style 的值在鼠标响应函数中进行修改。/绘制工作主要利用CDC类的绘图函数完成,主要注意在 m_Style 不同取值下表现出来的差别。void MyButton:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultm_Style = 2; Invalidate(); /重绘按钮CButton:OnLButtonDown(nFlags, point);/OnLButtonDown()函数是单击鼠标左键时的

18、消息函数。这里只是重新绘制按钮,具体的单击响应应该在拥有按钮的对话框或视图中进行。void MyButton:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultif( !b_InRect | GetCapture()!=this ) /鼠标进入按钮 b_InRect = true; /设置进入标志 SetCapture(); /捕获鼠标 m_Style = 2;/m_Style = 1; /设置按钮状态 Invalidate(); /重绘按钮

19、else if ( !m_ButRect.PtInRect(point) ) /鼠标离开按钮 b_InRect = false; /清除进入标志 ReleaseCapture(); /释放捕获的鼠标 m_Style = 1;/m_Style = 0; /设置按钮状态 Invalidate(); /重绘按钮 CButton:OnMouseMove(nFlags, point);/onMouseMove()函数是鼠标移动消息函数,用于判定当前鼠标指针是否在按钮上。b_InRect是个标志,为true表示鼠标指针进入了按钮区域,/此时要捕获鼠标,让鼠标命令传送给按钮。当鼠标指针离开按钮时,要清除b_

20、InRect标志,并且释放捕获的鼠标,让其它窗口可以接收鼠标命令。/Invalidate()函数用于更新按钮,它会自动调用DrawItem()函数重新绘制按钮。/设置条件的目的是仅在鼠标指针进入按钮和离开按钮时更新按钮,这样可以防止鼠标在按钮上移动时发生闪烁。void MyButton:OnLButtonUp(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultm_Style = 1; Invalidate(); /重绘按钮CButton:OnLButtonUp(nFl

21、ags, point);/OnLButtonUp()函数是单击鼠标左键后弹起时的消息函数。这里也只是重绘按钮,这样能使按钮在按下和弹起时有所不同,使按钮看上去有动态效果。/接口函数是用 CMyButton类 定义的按钮修改颜色、字体和按钮文字的接口,由以下函数组成:/设置按钮文本void MyButton:SetText(CString str) m_strText = _T(); SetWindowText(str); /设置文本颜色void MyButton:SetForeColor(COLORREF color) m_ForeColor = color; Invalidate(); /设

22、置背景颜色void MyButton:SetBkColor(COLORREF color) m_BackColor = color; Invalidate(); /设置字体(字体高度、字体名)void MyButton:SetTextFont(int FontHight,LPCTSTR FontName) if ( p_Font ) delete p_Font; /删除旧字体 p_Font = new CFont; p_Font-CreatePointFont( FontHight, FontName ); /创建新字体 SetFont( p_Font ); /设置字体 /由于新字体由 new

23、 生成,必须显式回收,这项工作可以在 CMyButton类 的析构函数中进行:/*CMyButton:CMyButton() if ( p_Font ) delete p_Font; /删除字体 */这样一个可设置颜色、字体的按钮类就做好了。使用时,先在对话框中放置好按钮,再用 ClassWizard 为按钮添加控制变量,/并且将变量的类型设置为 CMyButton。之后,可以用该变量调用接口函数设置按钮颜色和字体。OK,自定义按钮完成。6.3. 实现过程及代码:现在可以对按钮,EDIT框等控件添加变量,文字描述麻烦,上图。comm.cpp编写内容如下#include stdafx.h#inc

24、lude commassist.h#include commassistDlg.h#include comm.hchar ConvertHexChar(char ch);HANDLE hCom;/串口句柄CString strcomname;/串口名,如COM1bool ComIsOK;/串口打开状态标识,为真表示已打开,否则未打开/=自动寻找串口函数=/函数功能:通过扫描注册表来找出当前所有物理串口/输入参数:无/返回类型:无/说 明:若搜索成功,则每搜到一个串口便发送消息通知主对话框,并将串口号以WPARAM传递void FindComm()/枚举当前系统中的串口LONG result =

25、 0;HKEY key = NULL;result = RegOpenKeyEx(HKEY_LOCAL_MACHINE,/需要打开的主键的名称 HARDWAREDEVICEMAPSERIALCOMM,/需要打开的子键的名称,设备串口 0,/保留,必须设置为0 KEY_READ,/安全访问标记,也就是权限 &key);/得到的将要打开键的句柄,当不再需要句柄,/必须调用 RegCloseKey 关闭它if( result )AfxMessageBox(无法获取串口,请确认是否安装并连接串口!);return;TCHAR portname250;/串口名TCHAR data250;DWORD po

26、rtnamelen = 0;/串口名长度DWORD datalen = 0;int index = 0;while(1)/找完COM后跳出portnamelen = 255;datalen = 255;result = RegEnumValue(key,/Long,一个已打开项的句柄,或者指定一个标准项名 index+,/Long,欲获取值的索引。注意第一个值的索引编号为零 portname,/String,用于装载位于指定索引处值名的一个缓冲区 &portnamelen,/Long,用于装载lpValueName缓冲区长度的一个变量。/一旦返回,它会设为实际载入缓冲区的字符数量 NULL,/

27、Long,未用;设为零 NULL,/Long,用于装载值的类型代码的变量 (LPBYTE)data,/Byte,用于装载值数据的一个缓冲区 &datalen);/Long,用于装载lpData缓冲区长度的一个变量。/一旦返回,它会设为实际载入缓冲区的字符数量if( result ) break;/发送消息,WM_USER+1为自定义消息,即找到串口的,并将串口号COMx通过WPARAM参数传送给主对话框窗口/:AfxGetMainWnd()-m_hWnd,获得主对话框句柄/(WPARAM)(LPCTSTR)data,类型转换:SendMessage(:AfxGetMainWnd()-m_hWn

28、d,WM_FOUNDCOMM,(WPARAM)(LPCTSTR)data,0);RegCloseKey(key);/调用 RegCloseKey 关闭打开键的句柄/=自动寻找串口函数结束=/=串口打开函数=/功 能:打开串口,将已打开的串口句柄赋值给hCom,给出串口打开状态ComIsOK,完成串口状态设置/输入参数:波特率,数据位,停止位,校验位/返回类型:无void OpenComm(int nBaud, int nData, int nStop, int nCal)hCom = CreateFile ( strcomname,/串口号GENERIC_READ | GENERIC_WRIT

29、E,/允许读或写0,/独占方式NULL,OPEN_EXISTING,/打开而不是创建FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,/重叠方式,用于异步通信NULL );if(hCom = INVALID_HANDLE_VALUE)AfxMessageBox(打开COM失败,串口不存在或已被占用!);ComIsOK = false;return;ComIsOK = true;SetCommMask(hCom, EV_TXEMPTY | EV_RXCHAR );/设置事件掩码,暂时没用上SetupComm(hCom,1024,1024);/设置输入缓冲区

30、和输出缓冲区的大小都是1024COMMTIMEOUTS TimeOuts;/设定读超时TimeOuts.ReadIntervalTimeout = MAXDWORD;TimeOuts.ReadTotalTimeoutConstant = 0;TimeOuts.ReadTotalTimeoutMultiplier = 0;/设定写超时TimeOuts.WriteTotalTimeoutConstant = 500;TimeOuts.WriteTotalTimeoutMultiplier = 100;if(SetCommTimeouts(hCom,&TimeOuts) = false)CloseH

31、andle(hCom);ComIsOK = false;return;/串口属性配置DCB dcb; GetCommState(hCom,&dcb); dcb.BaudRate=nBaud;/dcb.BaudRate=9600; /波特率为9600dcb.ByteSize=nData;/dcb.ByteSize=8; /每个字节为8位dcb.StopBits=nStop;/dcb.StopBits=ONESTOPBIT; /1位停止位dcb.Parity=nCal;/dcb.Parity=NOPARITY; /无奇偶检验位 SetCommState(hCom,&dcb); PurgeComm(

32、hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);if(SetCommState(hCom,&dcb) = false)CloseHandle(hCom);ComIsOK = false;return;return;/=串口打开函数结束=/=串口关闭控制函数=void CloseComm()CloseHandle(hCom);hCom = NULL;ComIsOK = false;/=串口关闭控制函数结束=/=串口监听线程函数=UINT ThreadFunc(LPVOID pParam)/CCommassistDlg* pdlg = (CCommassistDlg*)pPar

33、am;/定义指针指向主对话框COMSTAT ComStat;DWORD dwErrorFlags;while(ComIsOK)DWORD dwBytesRead = 100;ClearCommError(hCom,&dwErrorFlags,&ComStat);dwBytesRead = min(dwBytesRead,(DWORD)ComStat.cbInQue);if(!dwBytesRead) Sleep(10);/continue;/使用continue时,打开串口后CPU占用率非常高else :SendMessage(:AfxGetMainWnd()-m_hWnd,WM_READCO

34、MM,1,0);/发送消息,已读到return 0;/=串口监听线程函数结束=/=字符串转16进制显示=/字符串转16进制显示的函数/传入参数Data为字符串/Blank_allow为空格允许标志,为真则代表允许加入空格/函数返回为CString的结果sResultCString DisplayCString2Hex(CString Data, bool Blank_allow)CString sResult;CString sTemp;int Data_Length;Data_Length = Data.GetLength();if (Data_Length = 0) return ;cha

35、r *pchar = new charData_Length;/用了new分配内存空间,要记得释放strncpy(pchar,Data,Data_Length);for(int i=0; iData_Length; i+)sTemp.Format(%02X,pchari);if(Blank_allow)if(i = Data_Length -1) sResult = sResult + sTemp;/去掉最后一个空格else sResult = sResult + sTemp+ ;else sResult = sResult + sTemp;delete pchar;/释放内存空间return

36、 sResult;/=函数结束=/=16进制转字符串=/16进制转字符串,输入16进制的字符串,输出转换为16进制码/传入参数str为字符串,判断输入是否按照16进制格式输入int ConvertHexC2String(CString str, CByteArray &senddata)/先判断输入字符串是否2个字符一组int str_Length,iLength;int hexdata, l_data;char hstr,lstr;char cTemp;str_Length = str.GetLength();iLength = 0;senddata.SetSize(str_Length/2

37、);/预先设置数组长度,不设置时,允许有错char *ppchar = new charstr_Length;strncpy(ppchar,str,str_Length);for(int i=0; i= 0) & (ch = A) & (ch = a) & (ch = f)return ch - a + 10;elsereturn (-1);/=16进制转字符串显示=/16进制转字符串显示的函数/传入参数Data为16进制的字符串/函数返回为CString的结果sResultCString DisplayHex2CString(CString Data)CString sResult;CStr

38、ing sTemp;int Data_Length;Data_Length = Data.GetLength();if (Data_Length = 0) return ;char *pchar = new charData_Length;/用了new分配内存空间,要记得释放strncpy(pchar,Data,Data_Length);for(int i=0; i 1000后加入#include MyButton.h在/ Construction后加入变量及函数CWinThread* pReceiveThread;void ShowStatus();int m_intTxCnt;int m_

39、intRxCnt;BOOL m_bAutoSend;DWORD ReadComm();在commassistDlg.cpp中加入头文件comm.h#include comm.h加入全局变量CString strIn;CString strOut;CString m_strFile;变量初始化如/ CCommassistDlg dialogCCommassistDlg:CCommassistDlg(CWnd* pParent /*=NULL*/): CDialog(CCommassistDlg:IDD, pParent)/AFX_DATA_INIT(CCommassistDlg)m_strTim

40、er = _T();m_strFilePath = _T();m_strOut = _T();m_strStatus = _T();m_check_hexrx = FALSE;m_check_hextx = FALSE;/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);/下面就是自己添加的变量初始化m_strTimer = 1000;m_strFilePath = 请选择要发送的文件;

41、m_intTxCnt = 0;m_intRxCnt = 0;m_bAutoSend = 0;strIn = ;strOut = ;在OnInitDialog函数中添加代码如下/ TODO: Add extra initialization herem_comcontrol.SetForeColor(RGB(255,0,0);FindComm();/调用自动找串口函数m_comlist.SetCurSel(0);/设置串口号下拉框默认值为第一个m_baud.SetCurSel(6);/设置波特率下拉框默认值为9600m_bdata.SetCurSel(3);/设置数据位下拉框默认值为8位m_bs

42、top.SetCurSel(0);/设置停止位下拉框默认值为1m_cal.SetCurSel(0);/设置校验位下拉框默认值为None无GetDlgItem(IDC_BTN_HANDSEND)-EnableWindow(false);/设置手动发送按钮不可用GetDlgItem(IDC_BTN_AUTOSEND)-EnableWindow(false);/设置自动发送按钮不可用GetDlgItem(IDC_EDIT_TIMER)-EnableWindow(false);/设置发送间隔按钮不可用GetDlgItem(IDC_BTN_SELCTFILE)-EnableWindow(false);/

43、设置选择文件按钮不可用GetDlgItem(IDC_BTN_SENDFILE)-EnableWindow(false);/设置发送文件按钮不可用ShowStatus();/下面语句用于解决程序运行后初始化EDIT框内容被默认自动选中状态/返回值需更改为FALSEGetFocus();/获取焦点SetFocus();/设置焦点m_CEditStatus.SetSel(-1,-1,FALSE);/设置/PostMessage(EM_SETSEL,-1,0); return FALSE; / return TRUE unless you set the focus to a control用Clas

44、sWizard添加WindowProc函数来处理自定义消息函数内容如下:/=消息处理函数=/功能:处理自定义消息=LRESULT CCommassistDlg:WindowProc(UINT message, WPARAM wParam, LPARAM lParam) / TODO: Add your specialized code here and/or call the base classswitch(message)case WM_FOUNDCOMM :/已找到串口,串口号以字符串形式由wParam传递m_comlist.AddString(LPCTSTR)wParam);/用Add

45、String添加一个字符串即COM号到m_comlist列表框中break;case WM_READCOMM : /读串口消息ReadComm();break;return CDialog:WindowProc(message, wParam, lParam);/=消息处理函数结束=双击“打开串口”按钮编辑代码如下:void CCommassistDlg:OnComcontrol() / TODO: Add your control notification handler code hereint nBaud,nData,nStop,nCal,nTemp;CString sTemp,siTe

46、mp;/波特率下拉框设置=nTemp=m_baud.GetCurSel();switch(nTemp)case 0:nBaud = CBR_110;break;case 1:nBaud = CBR_300;break;case 2:nBaud = CBR_600;break;case 3:nBaud = CBR_1200;break;case 4:nBaud = CBR_2400;break;case 5:nBaud = CBR_4800;break;case 6:nBaud = CBR_9600;break;case 7:nBaud = CBR_14400;break;case 8:nBau

47、d = CBR_19200;break;case 9:nBaud = CBR_38400;break;case 10:nBaud = CBR_56000;break;case 11:nBaud = CBR_57600;break;case 12:nBaud = CBR_115200;break;case 13:nBaud = CBR_128000;break;case 14:nBaud = CBR_256000;break;/数据位下拉框设置=nTemp=m_bdata.GetCurSel();switch(nTemp)case 0:nData = 5;break;case 1:nData = 6;break;case 2:nData = 7;break;case 3:nData = 8;break;/停止位下拉框设置=nTemp=m_bstop.GetCurSel();switch(nTemp)case 0:nStop = ONESTOPBIT;break;case 1:nStop = ONE5STOPBITS;break;case 2:nSt

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!