VC++编写简单串口上位机程序Word文档下载推荐.docx
- 文档编号:8112168
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:17
- 大小:994.52KB
VC++编写简单串口上位机程序Word文档下载推荐.docx
《VC++编写简单串口上位机程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《VC++编写简单串口上位机程序Word文档下载推荐.docx(17页珍藏版)》请在冰点文库上搜索。
LinlcLibrary秽]Win彳2Sl«
ticLibrery
工程名椒眇
t«
£
t
位■邸
”创建新的工作空间曲
-■-Er■"
:
aI'
1'
-丄-"
J□
r沿,」!
,”:
:
已訓」irTlEI
rIIM
甲引曰:
Win32
■FC应用程序向导-歩玄
您要创建的应用程序类型是:
厂单文档圈
■-多重文档IM]僅蕊本对卷框回:
「多重文档(MJ
|7文档匱看体系结构支持世)
您的资源使用的语言是:
中文0][APPWZCHS.DLL]
■FC商用稈序向导-步舉2#A
您是否希望包含:
「咲于“对话框
厂上下文相关帮助
P3D外观您希望包含什么其他支持?
厂自动撫作[鸟
P—:
!
•—"
一W-~Si.x
荫如世昭Jte佚回您希望包含WOSA支持吗?
厂WindowsSock&
ts|W|
对恬框的标题量]
test
■1MicrosoftDeveloperStudio
胪1胡珥雷加£
呦門皿[ilgj,・
IFC舟聊稈序向导-步骤d井哲步
您喜欢的风格是:
fi>
■■■iuajiiiuii1ia■i111,
&
财FC标進:
rV/mdows资源管理器样式
您希望生成源文件备注吗?
是皿
广否0Q
您希望使用MFC库吗?
金作为共享的DLL
厂作为静态的DLL
2、在项目中插入MSCom控件:
工程->
增加到工程->
ComponentsandControls->
双击
RegisteredActiveXControls->
选择MicrosoftCommunicationsControl,version
6.0->
Insert,按默认值添加,你会发现多了个电话图标,这是增加后串口通信控件。
矯人⑥工程②组建⑥工具⑴曾口⑥稲助⑧
CoKpon^ntandCoxii^rpls1
选择要插入到工程的组件
査揣BS)(I):
|匚)耳昨iHtwrwdActiy曲匚皿trolw刁4=丝古IjTk
3、删除确认、取消和提示框,添加“电话”、进程、静态文本、按钮、编辑框,拖动添加
的控件,根据喜好布局。
4、右击编辑框Edit选择属性,在样式里设置,勾选多行、垂直滚动,其它可按默认值。
右击静态文本Text选择属性,在常规设置里,修改标题。
右击按钮PushButton选择属性,在在常规设置里,修改标题。
5、
查看->
建立类向导MFCCIassWizard->
MemberViariable
疆曲口僮eebek]嚓Ife日HH
,选择ClassName为CTestDIg
左件
修改后界面如下,程序写出来运行时“电话”标志会自动消失。
的类,ControlID为MSC0MM1双击它,为它添加控制变量m_comm。
类似的,选择IDCBUTTON添加控制变量mserial
(建立类向导也可以右击然后在弹出的快捷菜单里选择建立类向导)
Classfjarnel
[ttst耳|CTes1Dlg
叭怙6101”・九ZV..yestVestf)lg.cpp
Pioject:
MessageMapsMemberVariablesAulomstionActiveXEventsClassInfo
ClassAAme:
test耳CTestDIg
王、…$<
O1g.cpp
ControlIDs:
TypeMember
[fot:
甘帀ON「
IDCBUTTON?
mefrdal
IDC_EDIT3
IDC_MSCOMM1CMgCoirtnm_cQrnml
IDC^PROGRESSI
(组建->
全部组件,然
至此,基本框架已经出来了,编译后运行可以看到如下所示的界面。
后组建->
执行)
□
存开嗚转换
Ri・ll・・=!
・・卫丄ll・・
打开串口
6、点击左侧的视图窗口,可以在三种模式下切换,第三个是打开我们的源代码窗口,
个是类,第二个是窗体的资源视图。
主一_>
■zXb…|置Ft巳乩」言]FilE…
tcst.tppFpuFIJIn_rnn
选择FileView,展开testfiles->
HeaderFiles,打开testDIg.h,在全局变量下添加如
下代码,然后保存:
intgllen;
〃定义整型标量gllen,用于记录接收数据的个数
CProgressCtrl*pbar;
//指向进度条的指针,用于操作进度条
CStringstrRXDdata;
//编辑框显示的文本,记录历次转换值
//Construction
public:
CTestDLq(CVn<
l»
pParent-NULL>
»
//standardconstructai-
//Dialog(Mtd//{{OFX_DfiTfi(CI^tOlg)enun£
TbD■IOD_TEST_bJALOCJ;
CButtonrrs(*rijl;
nis-x-"
n—i一一亠
7、点击RecourseView,展开testrecourses->
Dialog,双击IDD_TEST_DIALOG编辑我们的主界面对话框。
VC会进入源码编辑窗口,这个函数是用来处理串口事件的,当PC串口接收到数据时,会产
生一个数据缓冲区有数据的消息事件,然后调用执行这个函数。
添加如下代码,进行数据处
理,窗口更新等操作:
VARIANTvariant1;
〃定义VARIANT型变量,用于存放接收到的数据
COIeSafeArraysafearray;
//定义safearray型变量
LONGlen,k;
〃定义长整型变量len,k
BYTErxdata[2048];
〃定义BYTE型数组
CStringstremp1,stremp2;
〃定义两个字符串
if(m_comm1.GetCommEvent()==2)//判断引起OnComr时间的原因
{//如果是接收到特定个字节数,则读取接收到的数据
variant1=m_comm1.GetInput();
〃把接收到的数据存放到VARIANT型变量里
safearray=variant1;
//VARIANT型变量转换为ColeSafeArray型变量
len=safearray.GetOneDimSize();
for(k=0;
k<
LEN;
K++)
BYTE型数组rxdata里
{
safearray.GetElement(&
k,rxdata+k);
//得到接接收到的数据放到
}
读取AD转换的高字节
BYTEbt=(*(unsignedchar*)(rxdata+k));
//
if((k%2)==0)
if((k+1)<
LEN)
gllen++;
〃
全局的变量,对接收到的转换结果的个数进行计算
stremp2.Format(”第%€次转换结果:
gllen);
显示第几次转换
inttemp=bt*4+((*(unsignedchar*)(rxdata+k+1))>
>
6);
换结果,注意转换结果是左对齐
高低字节合并成实际的转
stremp1.Format("
%2.2f'
(2.56*temp/1024));
计算成实际电压值
SetDlgltemText(IDC_STATIC,("
当前电压值为:
"
+stremp1+"
V"
));
//更新静态文本控件
pbar->
SetPos(temp);
//更新进度条的当前位置
strRXDdata+=stremp2;
//把新的数据放到全局的字符串里
strRXDdata+=stremp1;
strRXDdata+="
V\r\n"
;
〃字符串加单位V后换行
SetDlgltemText(IDC_EDIT1,strRXDdata);
〃更新文本控件的显示
11aliirTF-EtD~□narmml{)
<
//10bD1Add^aurlontro1nd11f1匚*1:
占onh«
«
ridl?
iscadehere
ItVbt”Lltjvl
这时重新编译一下,看会不会有什么错误,出现下面提示,可以选择全部组建来清除。
LINK:
LNK4073:
cannotcreatemapfor.ILKfile;
linkingnonincrementally
出现下面错误,请关闭运行的test.exe后重试。
fatalerrorLNK1104:
cannotopenfile"
Debug/test.exe"
出现下面错误两种错误,是由于空间编号问题引起的,当我们添加了编辑框或者“电话”后
再添加,其编号自动加一,就会出现控件没定义。
Z:
\vc++串口上位机\test\testDlg.cpp(32):
errorC2065:
'
IDC_MSC0MM1'
:
undeclared
identifier
\vc++串口上位机\test\testDlg.cpp(139):
IDC_EDIT1'
解决方法是,在RecourseView里,打开窗体IDD_TEST_DIALOG右击“电话”或者编辑框
等其它出错的控件,右击选择属性,在常规里修改ID,这里的程序,除BUTTON!
1、2两
个之外,其它都是1
icraEfrftCoHBWkirationsCoiktrol,ve
血發常规|Buffers
ID:
|IDCMSCOMM1|:
F可见圖厂组曲
厂己禁用回灯制表站回
全部组建编译一下,看看有没有错误,没有错误就可以运行一下,可以看到界面更原来是
样的。
有错误就修改一下,省得弄多了,错在哪里都不知道,查起来麻烦。
8、在源码编辑里,打开testDlg.cpp文件,进行窗口初始化函数的编写。
找到BOOLCTestDlg:
OnlnitDialog()函数,
在SetIcon(m_hlcon,FALSE);
//Setsmallicon
//TODO:
Addextrainitializationhere
后面添加如下初始化代码:
gllen=0;
//记录转换次数全局变量清零
if(!
m_comm1.GetPortOpen())//判断串口是否已经打开
m_comm1.SetCommPort
(1);
//选择串口号1m_comm1.SetPortOpen(TRUE);
//打开串口
m_comm1.SetRThreshold
(2);
//收到两个字节引发OnCom事件
m_comm1.SetInputMode
(1);
〃输入模式选为二进制
m_comm1.SetSettings("
57600,n,8,1"
);
//设置串口参数,波特率57600,无奇偶校验,1
位停止位,8位数据位
MessageBox("
串口初始化完毕"
,”提示"
II提示串口成功初始化
elseMessageBox("
串口被占用"
II如果已经打开串口,消息框提醒
pbar=(CProgressCtrl*)GetDlgltem(IDC_PROGRESS1);
〃获得指向IDC_PROGRESS的指针
SetRange(0,1023);
〃设置进度条的范围0~1023
SetPos(0);
II当前位置为0
mserial.SetWindowText(”关闭串口"
II按钮显示状态改变
//TfiDQ;
ftdnpxtrrtimMa]1Millionnprr
gllen■H:
it(!
ncnnnl_tetPDrtDpen())
n_tor)nl.SelCQivil^rtf1);
n[:
orin1+IrIPartnp^H(Tltl)r):
H_C.orw*^r5ptRTfirpshald;
n.conni.s^tinpotrwKJ^fi);
ncorinl.SptErlt"
S76netntBtrL};
tinMhwm曲bx<
“串口槪占用“「供示“):
pbdr{CPruqressCtrl^CptI>
LgIten(lPRDGftESEI):
plidr>
SttAdnge(
pi»
rysttP«
(D>
nsrridl.SitULnrlabiTcxH闭带口"
昇
■串口初始化兗学「提示卄:
•工羽•.1•出二.「"
空:
罐"
上M;
匚T*EPdacm汕応:
出订"
2$迪BP汕施區小叱
按打噩希匕芒改熒
可以看到,串口的参数等等都在在这里初始化的,可以根据自己的需要修改的,具体可以查
看VC+哩的详细介绍,看看有哪些参数可以给我们修改来用。
添加后再编译一下,运行后可以看到多了一个串口初始化的提示信息窗口。
至此,我们已经完成了主要的串口操作及界面,剩下的就是两个按钮的操作了。
9、回到资源视图的IDD_TEST_DIALO(窗口,双击开始转换按钮,给它添加事件,点击后
PC通过串口发送Oxaa出来,给单片机接收。
添加如下代码:
必须强制转换后才能发送
V4i4CTestDl^*lOnButtonl{)
同样地,双击另外一个按钮,给串口操作按钮添加代码,用于关闭或者打开串口。
添加如下
代码:
m_comm1.SetPortOpen(TRUE);
//如果串口是关闭的,则打开串口
m_serial.SetWindowText(”关闭串口"
//按钮显示状态改变
else
m_comm1.SetPortOpen(FALSE);
//如果已经打开串口,则关闭串口
m_serial.SetWindowText(”打开串口"
//按钮显示状态改变
uoidCTestHIgi:
dnButtDri2()/
//TODO1Add^otircafttrolriotiFicatiunhandler
codebert
iff?
m_conn1.CetPart叩驯([)
J
〃判断串口是否
X
n_CDnin1-£
etPortO[ipn(THUE}:
如杲串口是关
pi_s?
rial-SetWindowT^Kt(闭串口T;
b
按韌显示我态
relsef
Fi_commlL-SetPortOpen(FftLS^E):
〃如杲已经农开
Assertal-SetUlndDUTpxtf打开串口11);
按钿显示块态
//M-**K-M«
K-tt«
ttWM4M******«
KH4«
数据,可以看到主窗口的的转换结果,已经进度条显示电压值变化。
要把这个程序拿出来用,
只需把…\vc++串口上位机\test\Release的test.exe拷出来用就行。
Release可以在编译
窗口里选择win32release,然后重新编译一下就出来了。
参考书籍:
陈冬云、杜敬仓、任柯燕等,《Atmega128单片机原理与开发指导》,2005,机
械工业出版社。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 编写 简单 串口 上位 程序