注册 登录
编程论坛 VC++/MFC

使用VC6.0编写上位机串口程序

xiaomiking 发布于 2011-04-30 19:01, 4534 次点击
    在学校要做个项目,用到下位机与上位机通过串口通信,需要编写上位机程序。自己也是第一次接触这个,几乎是不懂,于是想在这里,借助这个平台,寻求大家的帮助。依靠大家的力量,助我顺利完成。
    谢谢大家!















[ 本帖最后由 xiaomiking 于 2011-5-5 09:33 编辑 ]
34 回复
#2
xiaomiking2011-04-30 19:02
   我自己先来顶下~~
#3
xiaomiking2011-04-30 19:11
第一步:了解了下串口调试助手的基本构架

主要由三个部分组成 :串口设置区、接收显示区和发送输入区

具体的,自己可以下个串口助手,自己玩玩,就OK
#4
xiaomiking2011-05-04 11:27
2011年5月4日11:19:52
一、网络视频:
    1、要学习串口编程,首先必需了解它的一些基本概念:a、波特率,数据位,停止位,校验位等; b、通信方式:单工、半双工及全双工;同步、异步; c、检错方法:奇偶校验----根据1的个数,相对简单,但只能用来检错;循环冗余校验:能够完成排错功能,但实现起来相对复杂些。
    2、MSComm控制

二、孙鑫视频
    1、一个一个地慢慢研究;
    2、学Visual C++ ,首先要学好C++;C++可以分为以下4个部分:
        @、面向过程部分;
        %、基于过程部分;
        &、面向对象部分;
        *、STL部分;  
#5
xiaomiking2011-05-04 12:45
今天学习编写了 HelloCPP  和 HelloMFC ,大有收获!
#6
xiaomiking2011-05-05 08:07
2011年5月5日8:01:49

C++的相关历史
    美国AT&T贝尔实验室    Bjarne Stroustrup  20世纪80年代初期 ,C with Classes 即带类的C
    面向对象,是一种编程思想

C++就是一顽猴,但驯服后,对去西天取经具有到头重要的作用。
#7
xiaomiking2011-05-05 08:49
唐三藏西天取经,沿途要收拾妖怪只是为了开路,而不是要将全世界的妖怪全都消灭掉!
#8
xiaomiking2011-05-05 09:30
计算机要对它内部所存储的数据进行操作,这就要求程序设计语言必需对变量进行说明清楚,所以变量必需具备三个属性:
   

在内存中所存放的地址;所存放值的数据类型;值的大小

[ 本帖最后由 xiaomiking 于 2011-5-5 09:36 编辑 ]
#9
xiaomiking2011-05-05 09:43
一个有关数组问题的举例

/*
    说明:如何获取别人的而自己又不知道的数组属性
*/

#include <iostream>

using namespace std;

int main()
{
    int arr[10]={0};
    int count;

    count = sizeof(arr)/sizeof(int);            // 先获取整个数组的大小,再获取每个元素的大小
    cout << "The number of array are : " << count << endl;
    cin.get();

    return 0;
}
#10
xiaomiking2011-05-06 07:57
2011年5月6日7:56:18

一个简单的例子,让我对C++的面向对象的程序思想, 有了更进一步的了解!

/*
    说明:3种逻辑关系----否定、合取及析取
*/

#include <iostream>

using namespace std;

int main()
{
    bool bSunny;            // 定义一个逻辑变量,表示天气是否晴朗
    bSunny = true;            // 预先假设天气晴朗
    bool bWeather;            // 定义当前天气的逻辑变量
    bWeather = !bSunny;        // 当前天气是晴天的否定,表示要下雨

    cout << "今天的天气是:" << bWeather << endl;

    bool bTodayWeather;
    bool bTomorrowWeather;
    bTodayWeather = true;
    bTomorrowWeather = true;
    bool bCanWash;
    bCanWash = bTodayWeather && bTomorrowWeather;

    cout << "今天能否洗被子:" << bCanWash << endl;

    bTodayWeather = true;
    bTomorrowWeather = false;
    bool bCanPlayFootball;
    bCanPlayFootball = bTodayWeather || bTomorrowWeather;

    cout << "周末是否能踢球:" << bCanPlayFootball << endl;

    cin.get();

    return 0;   
}
#11
xiaomiking2011-05-06 08:47
随心所欲所择 =====  条件语句
#12
xiaomiking2011-05-07 10:08
2011年5月7日10:07:34

    强烈推荐:Visual C++ 轻松入门   ----  古万荣  , 尤其是它的光盘资料
#13
xiaomiking2011-05-12 08:24
2011年5月12日8:23:08
    温故C++  ing。。。。。。。
#14
xiaomiking2011-05-12 08:28
只有本站会员才能查看附件,请 登录



上传别人的  串口代码   
 
期待自己的  串口代码
#15
xiaomiking2011-05-12 08:45
C++中   this 指针指向对象本身~~~
#16
xiaomiking2011-05-12 09:02
this指针
1、this指针是一个隐含的指针,它是指向对象本身,代表了对象的地址
2、一个类所有的对象调用的成员函数都是同一代码段。那么成员函数又是怎么识别属于同一对象的数据成员呢?原来,在对象调用pt.output(10,10)时,成员函数除了接受2个实参外,还接受到了一个对象s的地址。这个地址被一个隐含的形参this指针所获取,它等同于执行this=&pt。所有对数据成员的访问都隐含地被加上前缀this->。例如:x=0; 等价于 this->x=0。
#17
xiaomiking2011-05-12 09:07
小程序,大问题

#include <iostream>

using namespace std;

class Point
{
public:
    int x;
    int y;

    Point()        // 构造函数,初始化成员变量
    {
        x = 0;
        y = 1;
    }
    Point(int a, int b)
    {
        x = a;
        y = b;
    }
    ~Point()    // 释放内存空间
    {
    }

    void output()
    {
        cout << x << endl << y << endl;
    }
    void output(int x, int y)
    {
        this->x = x;        // 当形参变量和类的对象变量同名时,存在一个作用域的问题
        this->y = y;        // 所以引入this指针来加以区分,说明this指向的x是类对象变量中的x
    }
};

void main()
{
    Point pt(5, 5);        // 定义一个对象
    pt.output(3, 3);
    pt.output();        // 输出结果为 3 3,若将void output(int x , int y)函数体中的this指针去掉,则结果为 5 5
}
#18
xiaomiking2011-05-12 09:08
小技巧:

    在以后的MFC编程中,如果在成员函数中想调用同类中的某个成员,可以使用VC++提供的自动列出成员函数功能,使用this->,VC++将列出该类中的所有成员,我们可以从列表中选

择我们想调用的成员。

    自动列出成员函数功能,可以提高编写速度,减少拼写错误。我们经常不能完全记住某个函数的完整拼写,但却能够从列表中辨别出该函数,自动列出成员函数的功能在这时就显得

更加有用了。事实上,在各种IDE编程环境中,我们通常都不可能记住也没有必要记住所有的函数,只要将常用的函数记住,其他不常用的函数只要记住其大概的写法和功能,在调用该

函数时可以从自动列出成员函数中选取,这样可以大大节省我们的学习时间。我们不用花费大量的时间去死记硬背许多函数,利用自动列出成员函数功能和帮助系统,就能够在编程时顺

利地使用这些函数,等用的次数多了,也就在不知不觉中完全掌握了这些函数。

[ 本帖最后由 xiaomiking 于 2011-5-12 09:10 编辑 ]
#19
xiaomiking2011-05-12 09:15
类的继承
   
   在C++中,给我们提供了一种重要的机制,就是继承。 理解继承是理解面向对象程序设计的关键。
#20
xiaomiking2011-05-12 09:26
class Fish : public Aminal

1、继承,避免了重复代码的书写;
2、Fish 是子类,Aminal是父类;Fish 是派生类,Aminal是基类
#21
xiaomiking2011-05-12 10:31
// 对继承的深刻了解

#include <iostream>

using namespace std;

// 定义类
class Animal
{
public:
    Animal(int x, int y)                        // 定义构造函数:修改  将无参改为有参
    {
        cout << "Animal construct" << endl;
    }
    ~Animal()                                    // 定义析构函数
    {
        cout << "Animal deconstruct" << endl;
    }
    void eat()
    {
        cout << "Animal eat" << endl;
    }
private:
    void sleep()
    {
        cout << "Animal sleep" << endl;
    }
protected:
    void speak()
    {
        cout << "Animal speak" << endl;
    }
};                                                // 注意;号不要忘

class Fish : public Animal                        // 继承,使得代码重用
{
public:
    // Fish()
    Fish():Animal(10, 10),a(1)                    // 修改后的子类的构造函数:在子类中,向基类带参数的构造函数传递参数的一种方式;后加对常量的初始化
    {
        cout << "Fish construct    "<< a << endl;
    }
    ~Fish()
    {
        cout << "Fish deconstruct" << endl;
    }
private:
    const int a;
};

void main()
{
    Animal al(5, 6);
    al.eat();

    Fish fh;
    fh.eat();
}

/*
小结:
    1、没有父类就没有子类,所以都是从父到子的(如果是按这个顺序的话)
    2、构造函数调用了父类的,还在调用子类的
    3、将父类的构造函数从无参该为有参,则在子类中,需对子类的构造函数进行修改
        修改方法见上,一个无参一个有参,则调用的顺序为:子类构造函数(但不进行函数体就转向调用基类的“默认”构造函数)、基类构造函数、子类构造函数
        默认:当声明基类对象时,要从基类先调用父类的  默认构造函数  而现在父类中没有 不带参数的  构造函数  ,所以在
              子类中,必需对构造函数进行修改,见原程序

    4、默认的构造函数就是不带参数的构造函数
*/
#22
xiaomiking2011-05-12 10:34
函数的覆盖

    函数的覆盖是发生在父类与子类之间的。
#23
xiaomiking2011-05-12 10:50
// 对继承的深刻了解,增加了函数的覆盖功能

#include <iostream>

using namespace std;

// 定义类
class Animal
{
public:
    Animal(int x, int y)                        // 定义构造函数:修改  将无参改为有参
    {
//        cout << "Animal construct" << endl;
    }
    ~Animal()                                    // 定义析构函数
    {
//        cout << "Animal deconstruct" << endl;
    }
    void eat()
    {
        cout << "Animal eat" << endl;
    }
private:
    void sleep()
    {
        cout << "Animal sleep" << endl;
    }
protected:
    void speak()
    {
        cout << "Animal speak" << endl;
    }
};                                                // 注意;号不要忘

class Fish : public Animal                        // 继承,使得代码重用
{
public:
    // Fish()
    Fish():Animal(10, 10),a(1)                    // 修改后的子类的构造函数:在子类中,向基类带参数的构造函数传递参数的一种方式;后加对常量的初始化
    {
//        cout << "Fish construct    "<< a << endl;
    }
    ~Fish()
    {
//        cout << "Fish deconstruct" << endl;
    }

    // 增加代码
    void eat()                                    // 在子类中,新增Fish的吃的特性。此时会发生函数的覆盖,将屏蔽父类中在eat()函数
    {
        Animal::eat();                            // 但此时我不想完全屏蔽父类的eat的特性,则通过作用域标识符来调用父类的eat函数
        cout << "Fish eat" << endl;
    }
private:
    const int a;
};

void main()
{
    Animal al(5, 6);
    al.eat();

    Fish fh;
    fh.eat();
}

/*
小结:
    1、没有父类就没有子类,所以都是从父到子的(如果是按这个顺序的话)
    2、构造函数调用了父类的,还在调用子类的
    3、将父类的构造函数从无参该为有参,则在子类中,需对子类的构造函数进行修改
        修改方法见上,一个无参一个有参,则调用的顺序为:子类构造函数(但不进行函数体就转向调用基类的“默认”构造函数)、基类构造函数、子类构造函数
        默认:当声明基类对象时,要从基类先调用父类的  默认构造函数  而现在父类中没有 不带参数的  构造函数  ,所以在
              子类中,必需对构造函数进行修改,见原程序

    4、默认的构造函数就是不带参数的构造函数
*/
#24
xiaomiking2011-05-12 10:52
多态性

   当C++编译器在编译的时候,发现Animal类的breathe()函数是虚函数,这个时候C++就会采用迟绑定(late binding)的技术,

在运行时,依据对象的类型(在程序中,我们传递的Fish类对象的地址)来确认调用的哪一个函数,这种能力就做C++的多态性。
#25
xiaomiking2011-05-12 11:02
抽象类不能实例化对象
#26
xiaomiking2011-05-12 11:07
抽象类不能实例化对象
#27
xiaomiking2011-05-12 11:10
引用就是变量的一个别名,在定义时,就必需初始化;

eg: int a;  int &b;  b = a;   错
    int a;  int &b = a;        yes ,你答对了

对引用的操作,就是对该引用变量的操作
#28
xiaomiking2011-05-12 11:42
引用  和  指针  的区别

    从内存模型上去区分:
        引用不需要另辟内存空间;而指针则需要,用来存放地址
#29
xiaomiking2011-05-12 11:47
在头文件中,使用预编译的好处:

    可以在头文件的相互包含中,避免出现重复定义的情况发生!
#30
xiaomiking2011-05-15 12:39
2011年5月15日12:22:46

龚建伟Visual.C._Turbo.C串口通信编程实践

体验Windows 环境下的Visual C++ 串口通信编程

1、建立应用工程
    建立基于对话框的MFC应用程序
2、添加MSComm控件
3、初始化串口:设置MSComm控件属性
4、添加串口事件消息处理函数
5、发送数据
#31
xiaomiking2011-05-15 12:45
书上传不了,给大家一个下载地址

http://wenku.baidu.com/view/e581ef4dfe4733687e21aaa5.html
#32
xiaomiking2011-05-16 07:52
http://www.
#33
xiaomiking2011-05-22 17:04
2011年5月22日17:04:32
    来打个酱油
#34
xiaomiking2011-05-25 09:52
只有本站会员才能查看附件,请 登录
#35
bjwangxl2011-05-30 10:52
回复 10楼 xiaomiking
10楼得这个程序与“面向对象”有一点联系吗???
1