智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 12213|回复: 58
打印 上一主题 下一主题

上位机设计Step By Step——基于 MFC 的飞思卡尔智能车上位机设计

  [复制链接]

6

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
754
威望
368
贡献
170
兑换币
56
注册时间
2012-3-20
在线时间
157 小时
毕业学校
bit
跳转到指定楼层
1#
发表于 2012-3-25 13:45:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 模拟cmos 于 2012-3-25 13:54 编辑

众所周知,上位机在智能车调试中起着重要作用,尤其是通过无线串口,实现数据实时发送接收,极大方便了智能车调试。
作者以VC6.0为平台使用微软MFC,简单介绍串口上位机设计,抛砖引玉。
STEP1.新建MFC工程

如果觉得论坛看着不舒服
下载pdf文档
本例源代码


补充内容 (2012-3-31 16:42):
清明~~~小长假 大促销 全场6折!!!!!!!!!!!!!!!!!!!!!!!
店主一定尽最大努力提供给你 最可靠的技术支持!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

1

查看全部评分

6

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
754
威望
368
贡献
170
兑换币
56
注册时间
2012-3-20
在线时间
157 小时
毕业学校
bit
2#
 楼主| 发表于 2012-3-25 13:47:54 | 只看该作者
STEP2.加入串口类
VC6.0进行串口开发主要有两种方式,一种是利用微软控件MScomm,一种是利用开源类CSerialPort。但是前者编译生成的程序在其他电脑上运行还要注册控件,略显麻烦。而后者属于对windows API封装,使用方便,兼容性强。本文重点介绍CSerialPort的使用。
http://www.naughter.com/serialport.html下载最新CSerialPort类,工程中添加.h 和.cpp文件,如下图。
在serialDlg.cpp和 serialDlg.h中包含Cserialport头文件
同时在serialDlg.h中 定义对象 CSerialPort  m_SerialPort; //CSerailPort类对象

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

6

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
754
威望
368
贡献
170
兑换币
56
注册时间
2012-3-20
在线时间
157 小时
毕业学校
bit
3#
 楼主| 发表于 2012-3-25 13:49:06 | 只看该作者
STEP3. Cserialport必备函数
  1.    // port initialisation                                                                     
  2.        BOOL CSerialPort::InitPort(CWnd* pPortOwner, // the owner (CWnd) of the port (receives message)
  3.                                              UINT  portnr,          // portnumber (1..4) 串口号
  4.                                              UINT  baud,            // baudrate波特率
  5.                                              char  parity,            // parity 效验方式
  6.                                              UINT  databits,              // databits 数据位
  7.                                              UINT  stopbits,              // stopbits 停止位
  8.                                              DWORD dwCommEvents,       // EV_RXCHAR, EV_CTS etc
  9.                                              UINT  writebuffersize)    // size to the writebuffer      // start/stop comm watching
  10.        BOOL             StartMonitoring();
  11.        BOOL             RestartMonitoring();
  12.        BOOL             StopMonitoring();
  13.        void               WriteToPort(char* string,int n);
复制代码


回复 支持 反对

使用道具 举报

6

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
754
威望
368
贡献
170
兑换币
56
注册时间
2012-3-20
在线时间
157 小时
毕业学校
bit
4#
 楼主| 发表于 2012-3-25 13:49:46 | 只看该作者
STEP4.窗口布局
设置成员变量(Ctrl+W ),四个编辑框对应四个UNIT成员变量

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

6

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
754
威望
368
贡献
170
兑换币
56
注册时间
2012-3-20
在线时间
157 小时
毕业学校
bit
5#
 楼主| 发表于 2012-3-25 13:50:44 | 只看该作者
STEP5.串口初始化
OK,所有前期工作准备完成,开始串口操作
按钮“打开串口”,双击,创建消息函数void CSerialDlg::OnOpenserial()
实现串口初始化,代码如下
  1. void CSerialDlg::OnOpenserial()
  2. {
  3.     if(m_SerialPort.InitPort(this, 1, 9600,'N',8,1,EV_RXFLAG | EV_RXCHAR,512))
  4.        {
  5.               m_SerialPort.StartMonitoring();
  6.               AfxMessageBox("com1打开,9600波特率,8位,无验证");
  7.        }
  8.        else
  9.        {
  10.               AfxMessageBox("没有发现此串口或被占用");
  11.        }
  12. }
复制代码

按钮“关闭串口”,双击,创建消息函数void CSerialDlg::OnCloseserial()
函数功能为进行串口初始化,代码如下
  1. void CSerialDlg::OnCloseserial()
  2. {
  3.        m_SerialPort.ClosePort();//关闭串口     
  4. }
复制代码

STEP6.串口数据发送
按钮“发送”,双击,创建消息函数,代码如下
  1. void CSerialDlg::OnSend()
  2. {     
  3.        unsigned char buf[2];
  4.        UpdateData(TRUE); //读入编辑框中的数据
  5.        buf[0]=m_send1;
  6.        buf[1]=m_send2;
  7.        m_SerialPort.WriteToPort(buf,2);
  8. }
复制代码


回复 支持 反对

使用道具 举报

6

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
754
威望
368
贡献
170
兑换币
56
注册时间
2012-3-20
在线时间
157 小时
毕业学校
bit
6#
 楼主| 发表于 2012-3-25 13:52:35 | 只看该作者
STEP7.串口数据接收
手工建立WM_COMM_RXCHAR的消息映射处理函数OnComm()
首先在serialDlg.h中添加响应函数声明
在serialDlg.cpp中添加消息响应
在serialDlg.cpp中添加OnComm()函数
  1. LONG CSerialDlg::OnComm(WPARAM ch, LPARAM port)//此函数接收到一个字符执行一次
  2. {
  3.        static int count=0;//计数用
  4.        static unsigned char buf[2]; //存储数据用
  5.        if(count==0)
  6.        {      m_rec1=ch;
  7.               count=1;
  8.        }
  9.        if(count==1)
  10.        {      m_rec2=ch;
  11.               count=0;
  12.        }
  13.        UpdateData(FALSE);//写入编辑框
  14. return 0;
  15. }
复制代码

At last,VC串口通讯程序基本功能,打开串口,关闭串口,接收数据,发送数据均以完成。
在此基础上,你可以添加复选框,选择串口号,选择波特率,可以添加图片框,显示图像,可以利用mfc绘图功能绘制速度曲线,pwm曲线。Vc6.0虽然已经被更先进的工具取代,但是作为一代经典,其功能还是非常强大的。掌握了vc6.0 ,无论c#还是QT,上手还是很快的。
当然,如果你没有兴趣或者没有时间去为智能车做一个上位机,那么访问作者淘宝店,我已经做好了成品,经过几个版本的修正,基本成熟,欢迎访问http://xiaohaizhu.taobao.com/

附:此例源代码
PDF版教程

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

6

主题

404

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5100
QQ
威望
2361
贡献
1343
兑换币
457
注册时间
2011-9-23
在线时间
698 小时
7#
发表于 2012-3-25 14:23:06 | 只看该作者
顶一个
回复 支持 反对

使用道具 举报

4

主题

239

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2113
威望
1263
贡献
242
兑换币
20
注册时间
2011-10-15
在线时间
304 小时
8#
发表于 2012-3-25 14:39:24 | 只看该作者
楼主很强大
回复 支持 反对

使用道具 举报

1

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
威望
310
贡献
100
兑换币
0
注册时间
2012-3-11
在线时间
44 小时
毕业学校
SWJTU
9#
发表于 2012-3-25 15:34:41 | 只看该作者
顶顶`~~~
回复 支持 反对

使用道具 举报

6

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
754
威望
368
贡献
170
兑换币
56
注册时间
2012-3-20
在线时间
157 小时
毕业学校
bit
10#
 楼主| 发表于 2012-3-25 15:47:52 | 只看该作者
Goolloo 发表于 2012-3-25 14:39
楼主很强大

呵呵  谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-21 15:20 , Processed in 0.049543 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表