基于MFC的单片机与PC通信系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
}
}