您的当前位置:首页正文

VB上位机与单片机

2021-04-05 来源:好走旅游网
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

'读取仪表返回数据串

SelectCaseMSComm1.CommEvent

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

'-----------------------------------------------

'

建立图像坐标系

'----------------------------------------------- SubScaleSys() '坐标系

Picture1.AutoRedraw=True '自动重绘有效

Picture1.DrawWidth=1 '线宽1个像素

Picture1.ScaleMode=vbPixels '像素为单位

Picture1.Scale(0,125)-(200,-50) '坐标系

Picture1.DrawStyle=vbDot '点线

'横坐标

Picture1.Line(0,0)-(200,0),RGB(130,130,130)

Picture1.Line(0,25)-(200,25),RGB(130,130,130)

Picture1.Line(0,50)-(200,50),RGB(130,130,130)

Picture1.Line(0,75)-(200,75),RGB(130,130,130)

Picture1.Line(0,100)-(200,100),RGB(130,130,130)

Picture1.Line(0,-25)-(200,-25),RGB(130,130,130)

'纵坐标

Picture1.Line(25,125)-(25,-50),RGB(130,130,130)

Picture1.Line(50,125)-(50,-50),RGB(130,130,130)

Picture1.Line(75,125)-(75,-50),RGB(130,130,130)

Picture1.Line(100,125)-(100,-50),RGB(130,130,130)

Picture1.Line(125,125)-(125,-50),RGB(130,130,130)

Picture1.Line(150,125)-(150,-50),RGB(130,130,130)

Picture1.Line(175,125)-(175,-50),RGB(130,130,130) EndSub

因篇幅问题不能全部显示,请点此查看更多更全内容