PUDN 下载的串口通信源码
-
-
-
- #include "stdafx.h"
- #include "comm.h"
- #include "commDlg.h"
-
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
-
-
-
-
- class CAboutDlg : public CDialog
- {
- public:
- CAboutDlg();
-
-
-
- enum { IDD = IDD_ABOUTBOX };
-
-
-
-
- protected:
- virtual void DoDataExchange(CDataExchange* pDX);
-
-
-
- protected:
-
-
- DECLARE_MESSAGE_MAP()
- };
-
- CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
- {
-
-
- }
-
- void CAboutDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
-
-
- }
-
- BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
-
-
-
- END_MESSAGE_MAP()
-
-
-
-
- CCommDlg::CCommDlg(CWnd* pParent )
- : CDialog(CCommDlg::IDD, pParent)
- {
-
- m_SendData = _T("");
- m_ReceiveData = _T("");
-
-
- stop=FALSE;
- m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
- }
-
- void CCommDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
-
- DDX_Control(pDX, IDC_STOPRECV, m_stop);
- DDX_Control(pDX, IDC_HEXSEND, m_hexsend);
- DDX_Control(pDX, IDC_COMSEEPED, m_speed);
- DDX_Control(pDX, IDC_HEX, m_hex);
- DDX_Control(pDX, IDC_COMSELECT, m_com);
- DDX_Control(pDX, IDC_MSCOMM1, m_Comm);
- DDX_Text(pDX, IDC_EDIT1, m_SendData);
- DDX_Text(pDX, IDC_EDIT2, m_ReceiveData);
-
- }
-
- BEGIN_MESSAGE_MAP(CCommDlg, CDialog)
-
- ON_WM_SYSCOMMAND()
- ON_WM_PAINT()
- ON_WM_QUERYDRAGICON()
- ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
- ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
- ON_CBN_SELENDOK(IDC_COMSELECT, OnComselect)
- ON_CBN_SELENDOK(IDC_COMSEEPED, OnComspeed)
- ON_BN_CLICKED(IDC_STOPRECV, OnStoprecv)
-
- END_MESSAGE_MAP()
-
-
-
-
- BOOL CCommDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
-
-
-
-
- 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);
- }
- }
-
-
-
- SetIcon(m_hIcon, TRUE);
- SetIcon(m_hIcon, FALSE);
-
-
- m_com.SetCurSel(0);
- m_speed.SetCurSel(2);
- return TRUE;
- }
-
- void CCommDlg::OnSysCommand(UINT nID, LPARAM lParam)
- {
- if ((nID & 0xFFF0) == IDM_ABOUTBOX)
- {
- CAboutDlg dlgAbout;
- dlgAbout.DoModal();
- }
- else
- {
- CDialog::OnSysCommand(nID, lParam);
- }
- }
-
-
-
-
-
- void CCommDlg::OnPaint()
- {
- if (IsIconic())
- {
- CPaintDC dc(this);
-
- SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
-
-
- 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;
-
-
- dc.DrawIcon(x, y, m_hIcon);
- }
- else
- {
- CDialog::OnPaint();
- }
- }
-
-
-
- HCURSOR CCommDlg::OnQueryDragIcon()
- {
- return (HCURSOR) m_hIcon;
- }
-
- BEGIN_EVENTSINK_MAP(CCommDlg, CDialog)
-
- ON_EVENT(CCommDlg, IDC_MSCOMM1, 1 , OnComm, VTS_NONE)
-
- END_EVENTSINK_MAP()
-
-
- void CCommDlg::OnComm()
- {
-
-
-
- if(stop)
- {
- return;
- }
-
-
-
-
-
- COleSafeArray m_input2;
- long length,i;
- BYTE data[1024];
- CString str;
-
- if(m_Comm.GetCommEvent()==2)
- {
-
-
-
- m_input2.Attach(m_Comm.GetInput());
- length=m_input2.GetOneDimSize();
-
- for(i=0;i<length;i++)
- m_input2.GetElement(&i,data+i);
-
- for(i=0;i<length;i++)
- {
- BYTE a=* (char *)(data+i);
-
- if(m_hex.GetCheck())
- {
- str.Format("%02X ",a);
- }
- else
- {
- str.Format("%c",a);
- }
-
- m_ReceiveData+=str;
- }
- }
-
- UpdateData(FALSE);
- }
-
-
-
- char HexChar(char c)
- {
- if((c>='0')&&(c<='9'))
- {
- return c-0x30;
- }
-
- else if((c>='A')&&(c<='F'))
- {
- return c-'A'+10;
- }
-
- else if((c>='a')&&(c<='f'))
- {
- return c-'a'+10;
- }
-
- else return 0x10;
- }
-
-
-
- int Str2Hex(CString str,CByteArray &data)
- {
-
-
-
-
-
- int t,t1;
- int rlen=0,len=str.GetLength();
-
- data.SetSize(len/2);
-
- for(int i=0;i<len;)
- {
- char l,h=str[i];
- if(h==' ')
- {
- i++;
- continue;
- }
-
- i++;
- if(i>=len)
- break;
-
- l=str[i];
-
- t=HexChar(h);
- t1=HexChar(l);
-
- if((t==16)||(t1==16))
- break;
- else
- {
- t=t*16+t1;
- }
-
- i++;
- data[rlen]=(char)t;
- rlen++;
- }
-
- data.SetSize(rlen);
-
- return rlen;
- }
-
-
- void CCommDlg::OnButton1()
- {
-
-
-
- if( !m_Comm.GetPortOpen())
- m_Comm.SetPortOpen(TRUE);
-
- UpdateData(TRUE);
-
- m_SendData += "\r\n";
- if(m_hexsend.GetCheck())
- {
- CByteArray data;
-
- int len=Str2Hex(m_SendData,data);
- m_Comm.SetOutput(COleVariant(data));
- }
- else
- m_Comm.SetOutput(COleVariant(m_SendData));
-
- }
-
-
- void CCommDlg::OnButton2()
- {
- m_ReceiveData.Empty();
-
-
-
- UpdateData(FALSE);
-
-
-
- }
-
-
- void CCommDlg::OnComselect()
- {
- if(m_Comm.GetPortOpen())
- m_Comm.SetPortOpen(FALSE);
-
- m_Comm.SetCommPort(m_com.GetCurSel()+1);
-
- }
-
-
- void CCommDlg::OnComspeed()
- {
- CString temp;
-
- int i=m_speed.GetCurSel();
-
- switch(i)
- {
- case 0:
- i=2400;
- break;
- case 1:
- i=4800;
- break;
- case 2:
- i=9600;
- break;
- case 3:
- i=19200;
- break;
- case 4:
- i=38400;
- break;
- case 5:
- i=115200;
- break;
- }
-
- temp.Format("%d,n,8,1",i);
- m_Comm.SetSettings(temp);
- }
-
-
- void CCommDlg::OnStoprecv()
- {
- stop=!stop;
- if(stop)
- m_stop.SetWindowText("继续接收");
- else
- m_stop.SetWindowText("停止接收");
- }
-
-
- BOOL CCommDlg::PreTranslateMessage(MSG* pMsg)
- {
-
-
- if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
- {
- return TRUE;
- }
-
- return CDialog::PreTranslateMessage(pMsg);
- }
![]()
posted @
2013-08-19 18:58
Jremmy
阅读(
348)
评论()
收藏
举报