基于PC机Windows环境下数据通信处理存储程序设计与实现文档格式.docx
《基于PC机Windows环境下数据通信处理存储程序设计与实现文档格式.docx》由会员分享,可在线阅读,更多相关《基于PC机Windows环境下数据通信处理存储程序设计与实现文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
添加5个commandbutton控件,1个frame,5个label控件等。
(3)属性设置如下表格:
控件类型
名称
主要属性
功能
Form1
Borderstyle=2
窗口可放大
Label1
Caption=串口
标签
Labe2
Caption=波特率
Label3
Labe3
Caption=校验位
Label4
Labe4
Caption=数据位
Label5
Caption=停止位
CboBaudrate
List=300,1200,2400……
波特率选择
List=NONE,ODD……
校验位选择
CboDatabit
List=8,7,6
数据位选择
CboStopbit
List=1,1.5,2
停止位选择
CboCom
List=Com1,Com2,Com3……
串口选择
TxtReceive
空
显示接收数据
TxtSavePath
显示保存路径
CmdSwitch
Caption="
打开/关闭串口"
打开/关闭串口
CmdClearReceive
清空接收区"
清空接收区
CmdSaveDisp
保存显示数据"
保存显示数据
CmdAmend
更改"
更改保存路径
CmdQuit
关闭程序"
关闭程序
2.3VB程序
详细程序见附录
2.4软件运行界面
3单片机与PC机的通信
3.1串行接口简介
串行接口一般包括RS232/422/485,其技术简单成熟,性能可靠,价格低廉;
所要求的软硬件开发环境都很低,广泛应用于计算机相关领域,如调制调解器,串行打印机,各种监控模块,PLC,摄像头云台,数控机床,单片机及相关智能设备,甚至路由器等。
一般的MCU都通过RS232接口与外设进行通讯。
它的基本通信原理图如下:
PC
MCU
图3.1MCU与PC机通信连接图
3.2设计中的串行通信采用异步通信
串行通信的数据或者字符是一帧一帧地传送,在异步通信中,一帧数据先用一个起始位“0”表示字符的开始,然后是5~8位上诉局,即该字符的代码,规定低位在前,高位在后,接下来是奇偶校验位,最后一个停止位“1”表示字符的结束。
下面是异步通信一帧数据为10位的帧格式。
起始位数据位校验位停止位
3.3波特率和发送时钟
波特率是通信中对数据传送速率的要求。
在计算机通信中,其意义是美妙钟传送多少位二进制数。
假如异步传送速率为每秒120个字符,每个字符有1个起始位,8个数据位,1个停止位组成,则其传送波特率为
传送一位所需要的时间为波特率的倒数,即
在串行传输中,二进制数据序列是以数字波形出现的,发送时在发送时钟下将通信线上传来的数据串行移入移位寄存器,所以,发送时钟和接受时钟也可作移位时钟。
能产生该时钟的电路称为波特率发生器。
为提高采样的分辨率,准确地测定数据位的上升沿或下降沿,时钟频率总是高于波特率的若干倍,这个倍数称为波特率因子。
在单片机中,发送和接收时钟可以由系统时钟
产生,其波特率因子为12,32,64.如果波特率由
决定称为,固定波特率方式。
也可以由单片机的内部定时器
产生,它工作于自动重装8位定时方式,由于定时器的计数初值可以人为的改变,
产生的时钟频率就可以改变,称为可变波特率方式。
此次设计的波特率选择为1200,10位/帧。
每次通信的数据流13字节,ACSII码,无奇偶校验位。
得;
X=0XFD;
即为定时器T1的计数初值。
3.4单片机通信程序
具体程序见附录
4小结与体会
本次课程设计我的题目是采用任何一种开发平台,设计出一款集数据采集、处理、存储及打印程序,设计要求:
1.通信接口为RS-232,1200波特率,10位/帧。
2.每次通信的数据流13字节,ACSII码,无奇偶校验位。
3.存储数据以数据库文件的形式存在硬盘上。
4.可在A4的纸上打印数据库文件。
5.具体数据处理要求另附。
我选择的是可视化编程软件VisualBasic6.0。
由于知识量的不足,在设计的过程当中遇到了很多困难,不过在查阅大量资料和同学之间的讨论之后,总体上达到了要求。
通过4*4矩阵键盘发送0-F的任意13个字符,将要发送的字符数据通过12864液晶显示出来,并且统计当前选择字符的总数。
在按发送数据之前,将软件的各种属性设置好,波特率为1200,校验位为N,数据位为8,停止位为1,选择串口为COM4,并打开串口。
在字符选择好并设置好软件后,通过ok按键发送数据。
同时,液晶上显示“开始发送DATA>
>
”.软件上显示发送的数据,通信成功。
经过这次课程设计,使我觉得不论从理论知识还是从实际操纵中都学到了不少知识,我想归纳起来,主要有以下几个方面:
1.经过这次课程设计,它让我接触更多平时没有接触过的科学仪器设备,元器件以及获得相关的仪器调试经验,同时我也发现自己在这方面很多不足之处。
体会到理论知识对实践有很大的指导作用,她让我知道,只有在正确的理论指引下,才能设计出合乎实际需要的硬件电路;
2.学会了高效率的查阅资料、运用工具书、利用网络查找资料。
我发现,在我们所使用的书籍上有一些知识在实际应用中其实并不是十分理想,各种参数都需要自己去调整。
偶而还会遇到错误的资料现象,这就要求我们应更加注重实践环节;
3.在设计中,我们应当注意重点与细节的关系;
4.失败不可怕,只要不趴下,昂首向前走,希望总会有;
5.同组同学相互包容,彼此合作,取长补短,才能铸就最后的成功。
可以这样说课程设计是对大学所学知识的一次运用和检阅,同时对自学能力提出很高的要求,所以平时的学习离开思考,就是严重的错误,我们学习不应该有偏科现象,各方面的知识都应该要接触,这样做才能把课程设计做得完整。
通过本次课程设计,我受益匪浅,对VB以及单片机和PC机的串口通信的基础知识得到了巩固,学习到了新的知识,在理论的基础上更深刻地掌握了单片机和VB的深层内容及实际生活中的应用,实训锻炼了自己的动手能力和思维能力,还有在软件方面的编程能力,同时也暴露出平时学习上的一些问题,让我们深刻反思。
这些问题的发现将为我们以后的学习和工作照明道路,查漏补缺为进一步学习做好准备。
5参考文献
[1]VisualBasic.NET案例开发集锦.康祥顺.电子工业出版社2003
[2]VisualBasic自学手册.安剑.人民邮电出版社2005
[3]VisualBasic.NET项目开发实用案.王立峰.科技出版社2006
[4]VB6.0程序设计实训教程.杨克玉.机械工业出版社2005
[5]VisualBasic串口通信实例编程.龚建伟.清华大学2004
6附录
1vb源程序
'
=====================================================================================
变量定义
OptionExplicit'
强制显式声明
DimComSwitchAsBoolean'
串口开关状态判断
DimFileDataAsString'
要发送的文件暂存
DimInputSignalAsString'
接收缓冲暂存
DimOutputSignalAsString'
发送数据暂存
DimDisplaySwitchAsBoolean'
显示开关
DimModeSendAsBoolean'
发送方式判断
DimSavetimeAsSingle'
时间数据暂存延时用
DimSaveTextPathAsString'
保存文本路径
ConstHWND_TOPMOST=-1
窗体载入
PrivateSubForm_Load()'
载入窗体
OnErrorGoToErr
IfMSComm.PortOpen=TrueThenMSComm.PortOpen=False'
先判断串口是否打开,如果打开则先关闭
'
初始化串口
CallComm_initial(Val(Mid(CboCom.Text,4,1)),CboBaudrate.Text,Left(CboParitybit.Text,1),CboDatabit.Text,CboStopbit.Text)
数据位载入
CboDatabit.AddItem"
8"
7"
6"
停止位载入
CboStopbit.AddItem"
1"
1.5"
2"
Err:
EndSub
保存接收文本
PrivateSubCmdSaveDisp_Click()'
保存显示数据
OnErrorGoToErr'
错误处理
SaveTextPath=TxtSavePath'
路径暂存
OpenTxtSavePath&
"
\1.txt"
ForOutputAs#1'
打开文件
不存在的话会创建文件,如已存在会覆盖
output改为append为追加
改为input则只读
Print#1,Year(Date)&
年"
&
Month(Date)&
月"
Day(Date)&
_
日"
Hour(Time)&
时"
Minute(Time)&
分"
Second(Time)&
秒"
vbCrLf&
TxtReceive.Text+vbCrLf'
把接收区的文本保存文本前加上保存时间(0000年00月00日00时00分00秒)
vbcrlf为回车换行
Close#1'
关闭文件
TxtSavePath="
OK,1.txtSave"
提示保存成功
CmdSaveDisp.Enabled=False
Savetime=Timer'
记下开始的时间
WhileTimer<
Savetime+5'
循环等待5-要延时的时间
DoEvents'
转让控制权,以便让操作系统处理其它的事件。
Wend
TxtSavePath=SaveTextPath'
显示保存路径
CmdSaveDisp.Enabled=True
更改保存显示数据的目录
PrivateSubCmdAmend_Click()'
更改
DimspShellAsObject'
定义存放引用对象的变量
DimspFolderAsObject'
DimspFolderItemAsObject'
DimspPathAsString'
定义存放的变量
错误处理,防止取消打开文件夹时报错
ConstWINDOW_HANDLE=0
ConstNO_OPTIONS=0
SetspShell=CreateObject("
Shell.Application"
)
SetspFolder=spShell.BrowseForFolder(WINDOW_HANDLE,"
选择目录:
"
NO_OPTIONS,"
C:
\Scripts"
SetspFolderItem=spFolder.Self
spPath=spFolderItem.Path
spPath=Replace(spPath,"
\"
"
)'
Replace函数的返回值是一个字符串
TxtSavePath.Text=spPath'
把文件夹路径显示在标签上
SaveTextPath=TxtSavePath.Text'
串口设置
PrivateSubCboBaudrate_Click()'
修改波特率
CallComm_reSet(Val(Mid(CboCom.Text,4,2)),CboBaudrate.Text,Left(CboParitybit.Text,1),CboDatabit.Text,CboStopbit.Text)'
串口设置
PrivateSubCboCom_Click()'
修改串口
PrivateSubCboDatabit_Click()'
修改数据位
PrivateSubCboParitybit_Click()'
修改校验位
PrivateSubCboStopbit_Click()'
修改停止位
PrivateSubCmdClearReceive_Click()'
清空接收区
TxtReceive.Text="
选择要发送的文件并放入内存中
PrivateSubCmdSelectFile_Click()'
选择要发送的文件
OnErrorGoToErr'
CommonDialog1.Flags=cdlCFBoth
CommonDialog1.ShowOpen
TxtSendPath.Text=CommonDialog1.FileName'
把打开的文件名给于TxtSendPath
OpenTxtSendPath.TextForInputAs1'
打开选择的文件
FileData=StrConv(InputB$(LOF
(1),1),vbUnicode)'
显示打开的文件
Close1'
====================================================================================
通信触发事件
PrivateSubMSComm_OnComm()'
设置oncomm事件,读取片机内存的值
SelectCaseMSComm.CommEvent'
每接收1个数就触发一次
CasecomEvReceive
CalltextReceive'
文本接收
CaseElse
EndSelect
PrivateSubtextReceive()
InputSignal=MSComm.Input
IfDisplaySwitch=FalseThen'
显示接收文本
TxtReceive.Text=TxtReceive.Text&
InputSignal'
单片机内存的值用TextReceive显示出
TxtReceive.Text=TxtReceive.Text/2000
TxtReceive.SelStart=Len(TxtReceive.Text)'
显示光标位置
EndIf
串口开关
=========================================