转速测量系统
通过单片机采集转速数据,通过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
因篇幅问题不能全部显示,请点此查看更多更全内容