设为首页 加入收藏

TOP

13.11.2 发送数据操作的控制功能(2)
2013-10-07 14:38:41 来源: 作者: 【 】 浏览:56
Tags:13.11.2 发送 数据 操作 控制 功能

13.11.2  发送数据操作的控制功能(2)

【代码解析】

第4行获取字符串的长度。第5行判断字符串中的字符个数是否为偶数,否则在第7行为字符串尾部添加字符0,并在第8行将字符串长度加1。第10~31行遍历字符串中的每一个字符,并将相邻的两个字符转化为相应的十六进制值。第13行判断当前的字符是否为空字符,如是则在第16行直接跳过。第12行h保存字符串中i位置上的一个字符,而l在第21行保存i+1位置上的字符。然后在第22、23行将字符形式的数值转化成数值(如字符'1'转化成数值1)。第24行判断这两个字符转化后的值是否合法(应该为0~F)。如果合法则在第27行将这两个相邻的字符串合并为一个十六进制值。在第29行将这个十六进制值保存到数组中。

第22、23行调用的HexChar()也是一个自定函数,该函数实现了将数字字符串转化为相应数值的功能,实现如下:

  1. 01  char CComElvesDlg::HexChar(char c)  
  2. 02  {  
  3. 03      if((c>='0')&&(c<='9'))          //0~9  
  4. 04          return c-0x30;  
  5. 05      else if((c>='A')&&(c<='F'))     //A~F  
  6. 06          return c-'A'+10;  
  7. 07      else if((c>='a')&&(c<='f'))     //a ~f  
  8. 08          return c-'a'+10;  
  9. 09      else   
  10. 10          return 0x10;  
  11. 11  }  

(2)手动发送。手动发送实现比较简单,是自动发送的一个操作子集。在发送数据区域有个"发送"按钮,单击该按钮时,将实现手动发送的功能。但是在自动发送时,该按钮变为"停止"按钮。如果此时想实现手动发送功能,就需要先单击"停止"按钮实现停止自动发送,"停止"按钮才能变为"发送"按钮。其实"停止"与"发送"按钮为同一个按钮,只是按钮标题的改变,这在自动发送实现过程中已有体现。因此这两个按钮用相同的处理函数OnSend(),就是在这个函数中既实现停止自动发送的功能,又实现手动发送数据的功能。

  1. 01  void CComElvesDlg::OnSend()   
  2. 02  {  
  3. 03      if(m_Port.m_hComm==NULL)            //判断串口是否已经打开  
  4. 04      {  
  5. 05          AfxMessageBox("串口没有打开,请打开串口");  
  6. 06          return;  
  7. 07      }  
  8. 08      else  
  9. 09      {  
  10. 10          if(m_bAuto)                     //判断当前是否处于自动发送状态  
  11. 11          {  
  12. 12              m_bAuto = false;  
  13. 13              GetDlgItem(IDC_SEND)->SetWindowText("发送");  
  14. 14              KillTimer(1);  
  15. 15              UpdateData(false);  
  16. 16              return;  
  17. 17          }  
  18. 18          UpdateData(TRUE);               //获取发送编辑框中的数据  
  19. 19          SaveSMod();  
  20. 20          if(m_bSHex)                     //发送数据的格式  
  21. 21          {   //十六进制  
  22. 22              char data[512];  
  23. 23              int len=StrToHex(m_sData,data);  
  24. 24              m_Port.WriteToPort(data,len);  
  25. 25              m_SCount+=(long)((m_sData.GetLength()+1)/3);  
  26. 26          }  
  27. 27          else   
  28. 28          {   //字符串形式  
  29. 29              m_Port.WriteToPort((LPCTSTR)m_sData);   //发送数据  
  30. 30              m_SCount+=m_sData.GetLength();  
  31. 31          }  
  32. 32          CString strTemp;  
  33. 33          strTemp.Format("TX:%d",m_SCount);  
  34. 34          m_ctrlSCount.SetWindowText(strTemp);  
  35. 35      }  
  36. 36  }  

【代码解析】

通过观察可以看出手动发送的过程与自动发送极其相似。其实这两者是相同的,只是自动发送添加了一个定时器,多次的调用定时器处理函数重复手动发送的过程。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇17.5 GDI+的基础知识 下一篇13.11.2 发送数据操作的控制功能..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: