现在的位置: 首页 > 综合 > 正文

wxwidgets应用手记(3)串口操作

2012年03月09日 ⁄ 综合 ⁄ 共 1833字 ⁄ 字号 评论关闭

串口类 http://www.codeproject.com/KB/system/serial.aspx

枚举计算机串口的代码

   1: int Common::GetSystemPorts(wxArrayString& pNameList, wxArrayString& pPortList)   

   2: {   

   3:     CRegKey RegKey;   

   4:     int nCount = 0;   

   5:  

   6:     if(RegKey.Open(HKEY_LOCAL_MACHINE, _T("Hardware\\DeviceMap\\SerialComm")) == ERROR_SUCCESS)   

   7:     {   

   8:         while(true)   

   9:         {   

  10:             wchar_t ValueName[_MAX_PATH];   

  11:             unsigned char ValueData[_MAX_PATH];   

  12:             DWORD nValueSize = _MAX_PATH;   

  13:             DWORD nDataSize = _MAX_PATH;   

  14:             DWORD nType;   

  15:  

  16:             if(::RegEnumValue(HKEY(RegKey), nCount, ValueName, &nValueSize, NULL, &nType, ValueData, &nDataSize) == ERROR_NO_MORE_ITEMS)   

  17:             {   

  18:                 break;   

  19:             }   

  20:  

  21:             pNameList.Add( wxString(ValueName) );

  22:  

  23:             char buf[_MAX_PATH];

  24:             int i = 0;

  25:             for (;ValueData[2*i] != 0;i++)

  26:             {

  27:                 buf[i] = ValueData[2*i];

  28:             }

  29:             buf[i]=0;

  30:  

  31:             pPortList.Add(wxString::FromAscii(buf));

  32:  

  33:             nCount++;   

  34:         }   

  35:     }   

  36:  

  37:     return nCount;   

  38: } 

打开串口

   1: void 串口例子MainFrame::m_choice1OnChoice( wxCommandEvent& event )

   2: {

   3: // TODO: Implement m_choice1OnChoice

   4:     if(m_choice1->GetSelection() > -1)

   5:     {

   6:         Timer1.Stop();

   7:  

   8:         if (m_Serial.IsOpen())

   9:         {

  10:             m_Serial.Close();

  11:         }

  12:         if (CSerial::CheckPort(m_choice1->GetStringSelection().c_str()) ==CSerial::EPortAvailable)

  13:         {

  14:             m_Serial.Open(m_choice1->GetStringSelection().c_str());

  15:             m_Serial.Setup(CSerial::EBaud9600, CSerial::EData8,CSerial::EParNone, CSerial::EStop1);

  16:  

  17:             Timer1.Start();

  18:         }

  19:         else

  20:         {

  21:             m_choice1->SetSelection(-1);

  22:         }

  23:     }

  24: }

串口读

   1: void 串口例子MainFrame::OnTimer1Trigger(wxTimerEvent& event)

   2: {

   3:     char buf[4096];

   4:     DWORD len = 0;

   5:  

   6:      m_Serial.Read(buf,sizeof(buf),&len);

   7:      while (len > 0)

   8:      {

   9:          buf[len] = '\0';

  10:          m_richText1->AppendText(wxString::FromAscii(buf));

  11:  

  12:          m_Serial.Read(buf,sizeof(buf),&len);

  13:      }    

  14: }

串口写

   1: //发送

   2: void 串口例子MainFrame::m_button4OnButtonClick( wxCommandEvent& event )

   3: {

   4: // TODO: Implement m_button4OnButtonClick

   5:     char buf[4096];

   6:     int len = ty::Common:: StringToCharPtr(buf,m_richText2->GetValue());

   7:     m_Serial.Write(buf,len);

   8: }

抱歉!评论已关闭.