VB上位机与单片机
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VB 上位机与单片机
转速测量系统
通过单片机采集转速数据,通过USB口发送到PC,并产生曲线图。
单片机程序:
//---------------------串口初始化
----------------------------
voidinitSerial()
{
TMOD=0x20;
//定时器1置为方式2
TH1=0xfd;
TL1=0xfd;
//设置波特率位9600
SCON=0x50; //设定串行口工作方式
PCON&=0x00; //波特率不倍增
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
//---------------------------发送程序
--------------------------------------------- voidsend_char(void)
//传送十六位的蝯转速数据,低位在前
{
unsignedi=0;
while(i;199Then
'接收个数判断
Callrenew
'接收完毕
EndIf
'读取仪表返回数据串
mEvent
CasecomEvReceive
Inbyte=MSComm1.Input
'接收转速数据
Fori=LBound(Inbyte)ToUBound(Inbyte) '把接收的数据安十六进制格式放入缓冲中
buffer=buffer+Hex(Inbyte(i))+Chr(32)
Nexti
EndSelect
'获取十进制测量数据
IfLen(Trim(Mid(buffer,1,2)))=1Then
datazhuansu(num)=Val("&H"&Mid(buffer,3, 3)&Str("0")&Mid(buffer,1,2))*0.0625
Else
datazhuansu(num)=Val("&H"&Mid(buffer,3, 3)&Mid(buffer,1,2))*0.0625
EndIf
'获取十六进制测量数据
IfLen(Trim(Mid(buffer,1,2)))=1Then
datasu2a=Str("0")&Trim(Mid(buffer,1,2))
Else
datasu2a=Mid(buffer,1,2)
EndIf
IfLen(Trim(Mid(buffer,4,2)))=1Then
datasu2b=Str("0")&Trim(Mid(buffer,3,2)) Else
datasu2b=Mid(buffer,4,2)
EndIf
datasu2=datasu2a&""&datasu2b
'显示测量转速值
Ifdatazhuansu(num);0Then
zhuansuText=datasu2
Calldraw
'调用绘曲线过程
EndIf
EndSub
'----------------------------------------------- '
转速曲线绘制
'----------------------------------------------- '绘制转速实时变化曲线
PrivateSubdraw()
Picture1.DrawWidth=2
'设置线宽
Picture1.DrawStyle=vbSolid
Fori=1Tonum-1
X1=(i-1):Y1=datazhuansu(i-1)
X2=i:Y2=datazhuansu(i)
Picture1.Line(X1,Y1)-(X2,Y2),QBColor(0) '绘制转速曲线
Nexti
EndSub
'----------------------------------------------- '
刷新绘图区
'----------------------------------------------- PrivateSubrenew()
Ifnum=0ThenExitSub
zhuansuText.Text="":
Picture1.Cls
CallScaleSys
Fori=0Tonum-1
datazhuansu(i)=0
Nexti
num=0
Counter=0
EndSub
'----------------------------------------------- '
定时发送采集标志
'----------------------------------------------- '每隔xms向仪表发送读数据命令串
'每台仪表有一个仪表号,PC机通过仪表号来识别网上
的多台仪表
'程序中仪表号(即地址代号)要与仪表设定值一致,否则不能返回数据。
PrivateSubTimer1_Timer()
MSComm1.Output="s"
'发送开始标志
EndSub
'----------------------------------------------- '
卸载窗体
'----------------------------------------------- PrivateSubCmdquit_Click()
UnloadMe
'卸载窗体
EndSub
'-----------------------------------------------