用VB设计一段单片机与上位机通讯的程序的一些问题
打算用VB编写一段程序 实现将单片机的采集到的数据每8个数上传一次 上位机将这8个数的数值分别显示出来并分别绘制成曲线
现只能采集一个数的 且没有单片机的通讯程序 求大神们补充改进下
Dim T As Variant
Dim c As Variant
Dim Y As Integer
Dim Y1 As Integer
Private Declare Sub Sleep Lib "kernel32 " (ByVal dwMilliseconds As Long) 'API,用sleep实现延时
'延时函数
Function delay(number)
Call Sleep(number)
DoEvents
End Function
Private Sub Combo1_Click() '选择端口
If Combo1.Text = "COM1" Then
MSComm1.CommPort = 1
ElseIf Combo1.Text = "COM2" Then
MSComm1.CommPort = 2
ElseIf Combo1.Text = "COM3" Then
MSComm1.CommPort = 3
ElseIf Combo1.Text = "COM4" Then
MSComm1.CommPort = 4
ElseIf Combo1.Text = "COM5" Then
MSComm1.CommPort = 5
ElseIf Combo1.Text = "COM6" Then
MSComm1.CommPort = 6
ElseIf Combo1.Text = "COM7" Then
MSComm1.CommPort = 7
Else
MSComm1.CommPort = 8
End If
End Sub
Private Sub Command3_Click() '停止采集
Timer2.Enabled = False
MSComm1.PortOpen = False
Command2.Caption = "打开串口"
End Sub
Private Sub Form_Load() '初始化
MSComm1.Settings = "9600,N,8,1" '默认值为“9600,N,8,1”,意为“串口通信速度为9600Baud,无校验,每次数据为8个Bit,停止位为1个Bit”。
MSComm1.InputMode = 0 '表示以文本(ASCII)方式取回数据
MSComm1.RThreshold = 1 '每接收1个字节就产生一个OnComm 事件(接受事件)
MSComm1.SThreshold = 0 '数据传输事件不会产生 OnComm 事件(发送事件)
MSComm1.InBufferSize = 1024 '接受缓冲区大小
MSComm1.OutBufferSize = 512 '发送缓冲区大小
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空发送缓冲区
Combo1.AddItem "COM1"
Combo1.AddItem "COM2"
Combo1.AddItem "COM3"
Combo1.AddItem "COM4"
Combo1.AddItem "COM5"
Combo1.AddItem "COM6"
Combo1.AddItem "COM7"
Combo1.AddItem "COM8"
Picture1.Scale (-50, 1150)-(1150, -80)
Command1.Caption = "采集数据" '命名
Command2.Caption = "打开串口"
Timer1.Interval = 1000 '实时时钟的采集频率间隔
Timer2.Interval = 25 '
Timer2.Enabled = False '停止Timer2
End Sub
Private Sub Command2_Click()
If Command2.Caption = "打开串口" Then
MSComm1.PortOpen = True
Command2.Caption = "关闭串口"
ElseIf Command2.Caption = "关闭串口" Then
MSComm1.PortOpen = False
Command2.Caption = "打开串口"
End If
End Sub
Private Sub MSComm1_OnComm() '触发事件
If MSComm1.InBufferCount > 0 Then
Text3.Text = MSComm1.Input '从缓冲区返回并删除字符。将串行输入寄存器的数据读出,并清除寄存器中已读取的数据。
c = Val(Text3.Text)
delay (50)
End If
End Sub
Private Sub draw()
Picture1.FontSize = "15" '设置字体大小
Picture1.DrawWidth = 3
Picture1.ForeColor = QBColor(0)
Picture1.Cls
Picture1.Line (0, 0)-(0, 1024) '纵坐标
Picture1.Line (-10, 1012)-(0, 1024) '纵坐标箭头及y值
Picture1.Line (10, 1012)-(-0, 1024)
Picture1.PSet (10, 1024)
Picture1.Print "热流值"
Picture1.Line (0, 0)-(1024, 0) '横坐标
Picture1.Line (1012, 10)-(1024, 0) '横坐标箭头及x值
Picture1.Line (1012, -10)-(1024, 0)
Picture1.PSet (1024, -10)
Picture1.Print "时间"
Picture1.DrawWidth = 4
Picture1.FontSize = 8
For Y = 0 To 1024 Step 8 '在横轴上对输入采样的步进值
Next Y
For Y1 = 0 To 1024 Step 50 '在纵轴上所显示文字的步进值
Picture1.PSet (0, Y1)
Picture1.Print (Y1)
Next Y1
T = 0
Timer2.Enabled = True
End Sub
Private Sub Picture1_MouseDOWN(Button As Integer, Shift As Integer, B As Single, A As Single) '"光标线读数"
Text1.Text = B
Text2.Text = A
End Sub
Private Sub Command1_Click() '开始采集
Call draw
End Sub
Private Sub Text1_Change()
End Sub
Private Sub Timer2_Timer() '画图
Picture1.DrawWidth = 2
Picture1.PSet (T, c), QBColor(13) 'PSet在图片框上绘制像素点,并指定颜色。n
T = T + 5 '在横轴上的步进值
If T > 1024 Then '如果在横轴上的像素点大于1024,则重新开始绘制
Call draw
End If
End Sub
Private Sub Timer1_Timer() '显示时间
Text4.Text = CStr(Time$())
End Sub