基于MFC的单片机与PC通信系统设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于MFC的单片机与PC串行通信系统设计

目的:

利用VC++制作一个基本对话框用于控制单片机与上位机(PC)通信。对话框包括三个控件,控件1控制8个LED从左到右依次点亮;控件2控制8个LED从右到左依次点亮;控件3控制8个LED闪烁。

步骤:

1.打开VC++,File(文件)→New(新建)→Projects(工程)→MFC AppWizard(exe),

在该界面右侧的project name栏输入用户给该工程取的名字,如:screen。接着在location栏选择放置该文件夹的路径,如:F盘。单击OK,接下来在“what type of application would you like to create?”下选中Dialog based(基本对话框)→Next →Next→Finish→OK。这样之后会出现一个界面,及一个工具栏(components)。如下图所示:

2.在VC++的project菜单下,找到Add to project/components and controls,双击Registered

Activex Controls,找到Microsoft Communications Control,version 6.0,单击Inser t→单击“确定”→O K→Close。将components工具栏里刚刚插入的图标用鼠标拖到对话框中,如图所示:

3. 使用快捷键Ctrl+W,即可弹出MFC ClassWizard对话框,单击member variables选项,在Control IDs下选择IDC_MS COMM1,单击Add variable,在member variable name栏下输入用户定义的变量名(由用户自定义),如输入:m_comm,单击OK,再单击OK关闭MFC ClassWizard对话框。将文件保存一下,以防电脑出故障。

4. 在VC++界面左侧的文件管理器下选择Class View,打开screen classes前面的树形控件,找到CScreen Dig,打开它前面的树形控件,如下图:

双击OnInitDialog(),出现如下图所示界面

找到// TODO: Add extra initialization here这句提示语,在此处添加初始化程序,初始化程序如下:

m_comm.SetCommPort(3); //选择串口3,因此时要用com3口

if(!m_comm.GetPortOpen( ))

m_comm.SetPortOpen(TRUE); //打开串口1

m_comm.SetSettings("9600,n,8,1"); //串口参数设置,波特率设为9600

m_comm.SetRThreshold(1);

5.接着将工具栏中的button拖到界面中,如下图所示:

选中刚刚放置的button1,使用快捷键Ctrl+W, 弹出MFC ClassWizard对话框,选择Message Maps,在Object IDs下选择IDC_BUTTON1,在Message栏中选择BN_CLICKED,再单击该对话框右侧的Add Function,单击O K→OK,关闭MFC ClassWizard对话框。双击button1,弹出如下图所示界面:

找到// TODO: Add your control notification handler code here,在该处添加控件button1的控制程序,本次课设只要求,单击button1后,PC向单片机发送字符‘1’,因此在此处添加如下

程序:

char i= '1';

CString str;

str.Format("%c",i);

m_comm.SetOutput(COleVariant(str));

6.修改button1及对话框的名字,选中button1,在右键菜单选择properties(属性),在caption栏中输

入修改的名字,如下图所示:

回车,即可。选中原始界面如下图:

同样选择右键中的properties,在caption栏修改界面的名称,如:“基于MFC的通信界面”。

7. 从工具栏中拖第二、三个控件到界面,如下图:

给button2编写程序的步骤同button1,只需将程序稍作改动

char i= '2'; //单击button2,PC向单片机发送字符‘2’

CString str;

str.Format("%c",i);

m_comm.SetOutput(COleVariant(str));

button3的同样,只需将第一句改为char i=’3’,就可以了。

8.将整个程序编译、运行。最终得到如下图的控制界面

9.为单片机编写串行接收程序,程序代码如下:

#include

unsigned char flag;

unsigned char w,i;

unsigned int j;

void main()

{

TMOD=0x20;

TH1=0xfd; //波特率设为9600,因此单片机要用11.0592MHZ的晶振TL1=0xfd;

TR1=1;

SCON=0x50; //设置串行口工作于方式1,允许接收

PCON=0x00;

EA=1;

ES=1;

while(1);

}

void ser() interrupt 4

{

RI=0;

flag=SBUF;

if(flag=='1') //当接收到字符‘1’时,8个LED从左到右依次点亮

{

w=0xfe;

for(i=0;i<8;i++)

{

w=~((~w)<

P1=w;

for(j=0;j<30000;j++); //延时

}

}

else if(flag=='2') //接收到字符‘2’时,8个LED从右到左依次点亮{

w=0x7f;

for(i=0;i<8;i++)

{

w=~((~w)>>i);

P1=w;

for(j=0;j<30000;j++);

}

}

else if(flag=='3') //当接收到字符‘3’时,8个LED闪烁

{

P1=0xff;

for(j=0;j<30000;j++);

P1=0x00;

for(j=0;j<30000;j++);

P1=0xff;

for(j=0;j<30000;j++);

P1=0x00;

}

}

相关文档
最新文档