求助:如何用c++的CSerialPort类来读取串行口的数据

旗晟机器人 2011-09-10 09:49:28
我的51单片机串行口输出程序如下:
void adtxd(tx_data) /*串行口输出程序*/
{
ad=tx_data;
SCON= 0x40; /*串口方式1*/
PCON=0; /*SMOD=0*/
//REN=1; /*允许接收*/
TMOD=0X20;
TH1=0XE6;
TL1=0XE6;
TR1=1; /*高八位*/
ad1=ad/256;
SBUF=ad1;
while(!TI);TI=0;
SBUF=ad%256; /*低八位*/
while(!TI);TI=0; /*等待发送完毕 */
}

当我用SerialPort类来完成读取串行口的数据的时候,读取的是?号。我的读取及显示函数如下:
m_strEditReceiveMsg += ch;
UpdateData(FALSE);
所以我想问一下串行口输出的应该不是二进制的数据了吧?要不然怎么会转换成?号了呢?
所以我以为是输出的字符型数据,因此我又用了以下的代码,结果输出的是一个乱码字符,我的程序如下:
m_strEditReceiveMsg += ch;
num1=atoi(m_strEditReceiveMsg);
itoa(num1,ch1,10);
GetDlgItem(IDC_EDIT_RECEIVEMSG)->SetWindowText(ch1);

求各位大神指点迷津啊!谢谢了!
...全文
212 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
旗晟机器人 2011-09-12
  • 打赏
  • 举报
回复
我通过一个高手指点的程序,已经能够显示为十六进制了,程序如下
CString hexCh;
hexCh.Format(TEXT("%02X"), ch);
m_strEditReceiveMsg += hexCh;
UpdateData(FALSE);
接下来我想让他显示成为十进制,求指教!
[Quote=引用 1 楼 mougaidong 的回复:]

关注中

http://www.vckbase.com/document/viewdoc/?id=1734
[/Quote]
turing-complete 2011-09-10
  • 打赏
  • 举报
回复
superhanxin5 2011-09-10
  • 打赏
  • 举报
回复
串口输出的肯定是二进制的啊,电脑的世界就是一个二进制的世界,无处不2.
只不过通过规定,把一些特定的二进制转换成我们熟知的东西而已,英文字母、阿拉伯数字、中文。。。等等
所以,你读取串口发送过来的数据的时候需要你自己做解析,规定传送来的是int(32比特)、char(8比特)还是其他的什么类型,这样你显示出来的才不会是乱码!!!

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧