久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

VB 上位機與單片機

作者:佚名   來源:本站原創   點擊數:  更新時間:2014年08月21日   【字體:

 轉速測量系統
通過單片機采集轉速數據,通過USB口發送到PC,并產生曲線圖。

單片機程序:
//---------------------串口初始化----------------------------

void initSerial()
{    
     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;
}

//---------------------------發送程序---------------------------------------------
void send_char(void)
// 傳送十六位的蝯轉速數據,低位在前
{
unsigned i=0;

while (i < 6)
{
SBUF =zhuansu_char[i];
while (!TI);      // 等特數據傳送
TI = 0;         // 清除數據傳送標志
i++;
}
}
//----------------------主程序------------------------
void main()
  {          
         uchar receive;
         lcdrs=0;
 init();                 //中斷初始化
         initSerial();            //通信初始化
         lcdinit();              //液晶顯示初始化
 write_project_title();
     while(1)
          {
         
              write_project_data(zhuansu);
              if (RI)          // 是否有數據到來
            {
     RI = 0;
     receive = SBUF;
       if (receive == 's')             // 是否開始采集轉速
          {
         send_char();     // 傳送采集的轉速
                        }
               }
      }
}



VB界面如下:
 


調試后的結果是:
 


VB程序如下:
'定義窗體級變量
'在顯示、繪圖等過程中使用
Dim datazhuansu(200) As Single                   ' 用于存儲轉速采樣值
Dim num As Integer                            ' 用于存儲采樣值個數
'-----------------------------------------------
'     轉速采集
'-----------------------------------------------
Private Sub CmdStart_Click()                    ' 開始采集
    Timer1.Enabled = True
End Sub
'-----------------------------------------------
'     停止采集
'-----------------------------------------------
Private Sub CmdStop_Click()   ' 停止采集
          Timer1.Enabled = False
    End Sub
'串口初始化
'在窗體的Load事件中加入下列代碼對串口進行初始化:
'-----------------------------------------------
'    載入窗體
'-----------------------------------------------
Private Sub Form_Load()
    MSComm1.CommPort = 1                                      ' 設置串口
    MSComm1.InputMode = comInputModeBinary                    ' 二進制輸入模式
    MSComm1.RThreshold = 1                                    ' 接收1個字符觸法OnComm 事件
    MSComm1.SThreshold = 1                                    ' 發送1個字符觸法OnComm 事件
    MSComm1.Settings = "9600,n,8,2"                           ' 設置波特率
    MSComm1.PortOpen = True                                    ' 打開串口
    Call ScaleSys                                             ' 繪制坐標系
   
    CmdStop.Enabled = False
    End Sub
'-----------------------------------------------
'    接收觸法事件
'-----------------------------------------------
'獲取轉速測量值并顯示
'每發送一次指令,觸發下面事件,返回數據串
Private Sub MSComm1_OnComm()
    Dim Inbyte() As Byte                         ' 接收數據暫存
    Dim buffer As String                         ' 轉速數據緩沖
    Dim datasu2a, datasu2b As String         ' 兩字節進制轉速數據
    Dim datasu2 As String                      ' 十六進制轉速數據
       If num > 199 Then             ' 接收個數判斷
        Call renew                ' 接收完畢
           End If
      '讀取儀表返回數據串
    Select Case MSComm1.CommEvent
        Case comEvReceive
              Inbyte = MSComm1.Input              ' 接收轉速數據
              For i = LBound(Inbyte) To UBound(Inbyte)          ' 把接收的數據安十六進制格式放入緩沖中
            buffer = buffer + Hex(Inbyte(i)) + Chr(32)
        Next i
    End Select
         '獲取十進制測量數據
    If Len(Trim(Mid(buffer, 1, 2))) = 1 Then
        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
    End If
      '獲取十六進制測量數據
    If Len(Trim(Mid(buffer, 1, 2))) = 1 Then
        datasu2a = Str("0") & Trim(Mid(buffer, 1, 2))
    Else
        datasu2a = Mid(buffer, 1, 2)
    End If
        If Len(Trim(Mid(buffer, 4, 2))) = 1 Then
        datasu2b = Str("0") & Trim(Mid(buffer, 3, 2))
    Else
        datasu2b = Mid(buffer, 4, 2)
    End If
    datasu2 = datasu2a & " " & datasu2b
    
   '顯示測量轉速值
   If datazhuansu(num) <> 0 Then
        zhuansuText = datasu2
        Call draw                                       ' 調用繪曲線過程
          End If
   End Sub
'-----------------------------------------------
'    轉速曲線繪制
'-----------------------------------------------
'繪制轉速實時變化曲線
Private Sub draw()
    Picture1.DrawWidth = 2                                  ' 設置線寬
    Picture1.DrawStyle = vbSolid
       For i = 1 To num - 1
        X1 = (i - 1): Y1 = datazhuansu(i - 1)
        X2 = i: Y2 = datazhuansu(i)
        Picture1.Line (X1, Y1)-(X2, Y2), QBColor(0)         ' 繪制轉速曲線
    Next i
    End Sub
'-----------------------------------------------
'    刷新繪圖區
'-----------------------------------------------
Private Sub renew()
    If num = 0 Then Exit Sub
        zhuansuText.Text = "":
    Picture1.Cls
    Call ScaleSys
    For i = 0 To num - 1
        datazhuansu(i) = 0
    Next i
    num = 0
    Counter = 0
  
End Sub
'-----------------------------------------------
'    定時發送采集標志
'-----------------------------------------------
'每隔 x ms向儀表發送讀數據命令串
'每臺儀表有一個儀表號,PC機通過儀表號來識別網上的多臺儀表
'程序中儀表號(即地址代號)要與儀表設定值一致,否則不能返回數據。

Private Sub Timer1_Timer()
    MSComm1.Output = "s"           ' 發送開始標志
    End Sub
'-----------------------------------------------
'    卸載窗體
'-----------------------------------------------
Private Sub Cmdquit_Click()
    Unload Me    ' 卸載窗體
    End Sub
'-----------------------------------------------
'    建立圖像坐標系
'-----------------------------------------------
Sub ScaleSys()               ' 坐標系
    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)
    
End Sub

 
關閉窗口

相關文章

主站蜘蛛池模板: 亚洲高清免费视频 | 欧美日韩在线免费观看 | 免费观看一级特黄欧美大片 | 九九热精品视频 | 国产区在线观看 | 日本三级日产三级国产三级 | 久久婷婷国产麻豆91 | 在线中文字幕亚洲 | 国产精品日韩一区 | av在线免费观看网站 | av中文字幕在线观看 | 久久成人综合 | 玖玖视频网 | 免费av观看 | 日韩在线播放av | 97人人草| 亚洲视频在线看 | 亚洲视频一 | 中文字幕免费 | 国产一区视频在线 | 一区二区三区在线看 | 懂色av色香蕉一区二区蜜桃 | av国产在线观看 | 国产a级毛片 | 国产激情一区二区三区 | 午夜精品久久久久久久久久久久 | 精品久久久久久久人人人人传媒 | 四虎影院免费在线播放 | 蜜桃在线一区二区三区 | 久久91av| 免费观看一级特黄欧美大片 | 中文字幕日韩欧美一区二区三区 | 欧美成人一区二区三区片免费 | 国产在线第一页 | 黄色国产视频 | 欧美精品电影一区 | 国产精品久久久久一区二区 | 亚洲综合在 | 精品一区二区三区免费视频 | 亚洲女人天堂网 | 久久久亚洲精品视频 |