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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10430|回復: 3
打印 上一主題 下一主題
收起左側

單片機讀取DS18B20內部溫度上傳到上位機(電腦)

[復制鏈接]
跳轉到指定樓層
樓主

DS18B20是一種很常用的數字溫度傳感器,溫度檢測范圍是-55~+125度,手冊 說明在-10~+85度范圍內檢測誤差為±0.5度,作者在自己的產品中隨機抽樣驗證 了幾只傳感器,在-25度誤差0.1度,+25度與+50度誤差小于0.1度,可見這種傳感 器實際精度是很高的,傳感器引腳如圖19-1所示,工作電壓范圍是3.0~5.5V,通 常使用+5V,電源接反或接錯一般是不會損壞傳感器的,對于單只DS18B20的使用,我們按圖19-2連接即可。






上位機vb電腦程序:
電路和介紹詳見:http://www.zg4o1577.cn/bbs/dpj-47286-1.html(在這貼附件中可下載上位機vb及下位機單片機的完整的源碼壓縮包)
單片機下位機主程序如下(部分預覽):
  1. /****************《51單片機輕松入門-基于STC15W4K系列》配套例程 *************
  2. ★★★★★★★★★★★★★★★★★★★★★★★★
  3. 《51單片機輕松入門-基于STC15W4K系列》 一書已經由北航出版社正式出版發行。
  4.   作者親手創作的與教材配套的51雙核實驗板(2個MCU)對程序下載、調試、仿真方便,不需要外部
  5.   仿真器與編程器,這種設計方式徹底解決了系統中多個最高優先級誰也不能讓誰的中斷競爭問題。
  6.   QQ群:STC51-STM32(3) :515624099 或 STC51-STM32(2):99794374。
  7.         驗證信息:STC15單片機
  8.   郵箱:xgliyouquan@126.com
  9.   ★★★★★★★★★★★★★★★★★★★★★★★★*/

  10. //**************************************************************               
  11. //運行環境:STC51 1T單片機 11.0592M晶振
  12. //程序說明:此程序讀取P1口(P1.0、P1.1、P1.2、P1.3)4只DS18B20代碼并發送給計算機                     
  13. //**************************************************************        
  14. #include "STC15W4K.H"  
  15. #include "DS18B20.H"
  16. #include "myfun.H"
  17. unsigned char Pin;                                // 0000 0001    0000 0010    0000 0100   0000 1000
  18.                                                                    // 0001 0000    0010 0000    0100 0000   1000 0000
  19.                                                                 // 用于選擇操作P1口上的多個位  
  20. unsigned char RomCode0[8] ;                // 存放第1路DS18B20代碼
  21. unsigned char RomCode1[8] ;                // 存放第2路DS18B20代碼
  22. unsigned char RomCode2[8] ;                // 存放第3路DS18B20代碼
  23. unsigned char RomCode3[8] ;                // 存放第4路DS18B20代碼

  24. /*****************  crc8_f反序校驗(法1:快速)    *********************/
  25. unsigned char  crc8_f1(unsigned char *ptr, unsigned char len)
  26. {
  27.         unsigned char i;               
  28.         unsigned char crc=0;
  29.         while(len--)
  30.         {
  31.                 crc^=*ptr++;
  32.                 for(i=0;i<8;i++)
  33.                 {
  34.                         if(crc&0x01)
  35.                         {   
  36.                                 crc>>=1;
  37.                                 crc^=0x8c;
  38.                         }
  39.                         else
  40.                         {
  41.                                 crc>>=1;
  42.                         }
  43.                 }         
  44.         }
  45.         return(crc);
  46. }  

  47. //請用實際行動支持宏晶STC大陸本土MCU統一全球市場
  48. void UartInit(void)                //9600bps@11.0592MHz
  49. {
  50.         //下面代碼設置定時器1
  51.         TMOD = 0x20;        // 0010 0000 定時器1工作于方式2(8位自動重裝方式)
  52.         TH1  = 0xFD;        // 波特率:9600 /11.0592MHZ
  53.         TL1  = 0xFD;        // 波特率:9600 /11.0592MHZ
  54.         TR1  = 1;
  55.         //下面代碼設置定串口
  56.         AUXR = 0x00;             // 很關鍵,使用定時器1作為波特率發生器,S1ST2=0
  57.         SCON = 0x50;         // 0101 0000 SM0.SM1=01(最普遍的8位通信),REN=1(允許接收)
  58. }
  59. void main()
  60. {
  61.         unsigned char i;
  62.         unsigned char  crc;
  63.         UartInit();  
  64.         while(1)
  65.         {
  66.                 Pin =0x01;                       // 將要操作 P1.0口18B20
  67.                 Read_RomCode(0x00);    // 參數0x00:讀得的64位代碼存數組RomCode0
  68.                                                            //     0x01:讀得的64位代碼存數組RomCode1
  69.                                                            //          0x02:讀得的64位代碼存數組RomCode2
  70.                                                            //          0x03:讀得的64位代碼存數組RomCode3               
  71.                 crc=crc8_f1(RomCode0,8);   // CRC效驗,數組名代表數組首地址,長度8字節
  72.                 if(crc==0)             // CRC效驗正確
  73.                 {  
  74.                    SBUF= 0x01;                   // 表示第1路18B20數據
  75.                       while(1)
  76.                    {
  77.                                 if (TI)
  78.                                 {
  79.                                         TI=0;
  80.                                         break;
  81.                                 }
  82.                    }   
  83.                
  84.                    for (i=0;i<8;i++)        // 發送8字節ROM代碼
  85.                    {  
  86.                            SBUF= RomCode0[i];
  87.                            while(1)
  88.                            {
  89.                                         if (TI)
  90.                                         {
  91.                                                 TI=0;
  92.                                                 break;
  93.                                         }
  94.                            }
  95.                    }
  96.                 }
  97.                 else                           // 校驗失敗,發回8個0xaa
  98.                 {
  99.                         SBUF= 0x01;           // 表示第1路18B20數據
  100.                         while(1)
  101.                         {
  102.                                 if (TI)
  103.                                 {
  104.                                         TI=0;
  105.                                         break;
  106.                                 }
  107.                         }   
  108.                
  109.                    for (i=0;i<8;i++)
  110.                    {  
  111.                            SBUF= 0xaa;
  112.                            while(1)
  113.                            {
  114.                                         if (TI)
  115.                                         {
  116.                                                 TI=0;
  117.                                                 break;
  118.                                         }
  119.                            }
  120.                    }
  121.                 }
  122.                                 
  123.                 Pin =0x02;                            // 將要操作 P0.1口18B20
  124.                 Read_RomCode(0x01);    // 0x01:讀得的64位代碼存數組RomCode1
  125.                 crc=crc8_f1(RomCode1,8);      //CRC效驗
  126.                 if(crc==0)             // CRC效驗正確
  127.                 {
  128.                         SBUF= 0x02;                   // 表示第2路18B20數據
  129.                         while(1)
  130.                         {
  131.                                 if (TI)
  132.                                 {
  133.                                         TI=0;
  134.                                         break;
  135.                                 }
  136.                         }                    
  137.                
  138.                            for (i=0;i<8;i++)          // 發送8字節ROM代碼
  139.                         {                           
  140.                            SBUF= RomCode1[i];
  141.                            while(1)
  142.                            {
  143.                                         if (TI)
  144.                                         {
  145.                                                 TI=0;
  146.                                                 break;
  147.                                         }
  148.                            }
  149.                         }
  150.                 }
  151.                 else                         // 校驗失敗,發回8個0xaa
  152.                 {
  153.                         SBUF= 0x02;
  154.                         while(1)
  155.                         {
  156.                                 if (TI)
  157.                                 {
  158.                                         TI=0;
  159.                                         break;
  160.                                 }
  161.                         }   
  162.                
  163.                    for (i=0;i<8;i++)
  164.                    {  
  165.                            SBUF= 0xaa;
  166.                            while(1)
  167.                            {
  168.                                         if (TI)
  169.                                         {
  170.                                                 TI=0;
  171.                                                 break;
  172.                                         }
  173.                            }
  174.                    }
  175.                 }
  176.                
  177.                 Pin =0x04;                     // 將要操作 P0.2口18B20
  178.                 Read_RomCode(0x02);    // 0x02:讀得的64位代碼存數組RomCode2
  179.                 crc=crc8_f1(RomCode2,8);      //CRC效驗
  180.                 if(crc==0)             // CRC效驗正確
  181.                 {
  182.                         SBUF= 0x03;                   // 表示第3路18B20數據
  183.                         while(1)
  184.                         {
  185.                                 if (TI)
  186.                                 {
  187.                                         TI=0;
  188.                                         break;
  189.                                 }
  190.                         }
  191.                   
  192.                         for (i=0;i<8;i++)
  193.                         {                     
  194.                                 SBUF= RomCode2[i];
  195.                                 while(1)
  196.                                 {
  197.                                         if (TI)
  198.                                         {
  199.                                                 TI=0;
  200.                                                 break;
  201.                                         }
  202.                                 }
  203.                         }
  204.                 }
  205.                 else                         // 校驗失敗,發回8個0xaa
  206.                 {
  207.                         SBUF= 0x03;
  208.                         while(1)
  209.                         {
  210.                                 if (TI)
  211.                                 {
  212.                                         TI=0;
  213.                                         break;
  214.                                 }
  215.                         }   
  216.                
  217.                    for (i=0;i<8;i++)
  218.                    {  
  219.                            SBUF= 0xaa;
  220.                            while(1)
  221.                            {
  222.                                         if (TI)
  223.                                         {
  224.                                                 TI=0;
  225.                                                 break;
  226.                                         }
  227.                            }
  228.                    }
  229.                 }
  230.                
  231.                 Pin =0x08;                      // 將要操作 P0.3口18B20
  232.                 Read_RomCode(0x03);    // 0x03:讀得的64位代碼存數組RomCode3
  233.                 crc=crc8_f1(RomCode3,8);      // CRC效驗
  234.                 if(crc==0)             // CRC效驗正確
  235.                 {  
  236.                         SBUF=0x04;                   // 表示第4路18B20數據
  237.                         while(1)
  238.                         {
  239.                                 if (TI)
  240.                                 {
  241.                                         TI=0;
  242.                                         break;
  243.                                 }
  244.                         }
  245.                   
  246.                         for (i=0;i<8;i++)
  247.                         {                     
  248.                            SBUF= RomCode3[i];
  249.                            while(1)
  250.                            {
  251.                                         if (TI)
  252.                                         {
  253.                                                 TI=0;
  254.                                                 break;
  255.                                         }
  256.                            }
  257.                         }  
  258.                 }
  259.                 else                         //校驗失敗,發回8個0
  260.                 {
  261.                         SBUF= 0x04;
  262.                         while(1)
  263.                         {
  264.                                 if (TI)
  265.                                 {
  266.                                         TI=0;
  267.                                         break;
  268.                                 }
  269.                         }   
  270.                
  271.                    for (i=0;i<8;i++)
  272.                    {  
  273.                            SBUF= 0xaa;
  274.                            while(1)
  275.                            {
  276.                                         if (TI)
  277.                                         {
  278.                                                 TI=0;
  279.                                                 break;
  280.                                         }
  281.                            }
  282.                    }
  283.                 }
  284.                 delay1s();         
  285.          }               
  286. }
復制代碼

上位機電腦vb程序:

  1. Attribute VB_Name = "Form1"
  2. Attribute VB_GlobalNameSpace = False
  3. Attribute VB_Creatable = False
  4. Attribute VB_PredeclaredId = True
  5. Attribute VB_Exposed = False
  6. Option Explicit
  7. Dim MyForm As FRMSIZE      '界面自動調整
  8. Dim DesignX As Long
  9. Dim DesignY As Long
  10. Dim Start_A As Boolean      '左面繪圖開始標志
  11. Dim Start_B As Boolean      '右面繪圖開始標志

  12. Dim FlagZuo  As Integer    '左邊運行鍵按下標志
  13. Dim FlagYuo  As Integer    '右邊運行鍵按下標志

  14. Dim DianHaoAZ As Integer     '存放左波形橫軸點號
  15. Dim DianHaoZ  As Integer      '存放當前的A點號
  16. Dim DianHaoAY As Integer     '存放右波形橫軸點號
  17. Dim DianHaoY  As Integer      '存放當前的A點號

  18. Dim timerz As Integer   '定時器畫波形_左
  19. Dim timery As Integer   '定時器畫波形_右

  20. Dim FLAG_A As Integer                                   '延時結束標志(界面左右各一)
  21. Dim FLAG_B As Integer                                   '延時結束標志(界面左右各一)

  22. Dim Zuo1_Liu As Single        '1L額外處理(左用戶流量)
  23. Dim You1_Liu  As Single        '1L額外處理(右用戶流量)
  24. Dim Zuo1_Pin As Single       '1L額外處理(左用戶頻率)
  25. Dim You1_Pin As Single       '1L額外處理(右用戶頻率)

  26. Dim QianLiuLiang_Z As Single
  27. Dim QianLiuLiang_Y As Single

  28. Dim ADDROUT_A(1 To 1) As Byte
  29. Dim ADDROUT_B(1 To 6) As Byte
  30. Dim NA As Integer, NB As Integer                   '用于文本框顯示數據(界面左右各一)
  31. Dim I, J, DBEGIN, WDEND, XSTEP, WDSTEP, KDSTEP As Long
  32.                                                    
  33. Dim PI As Single


  34. Private Sub Combo1_Click()
  35.     Data1.DatabaseName = App.Path + "\水流量傳感器.mdb"
  36.     Data1.RecordSource = Combo1.Text
  37.     Data1.Refresh
  38.     Label12(0).Caption = "有輸出"
  39.     Label12(1).Caption = Data1.Recordset.Fields(2) & "-" & Data1.Recordset.Fields(3)
  40.     Label12(2).Caption = Data1.Recordset.Fields(4) & "-" & Data1.Recordset.Fields(5)
  41.     Label12(3).Caption = Data1.Recordset.Fields(6) & "-" & Data1.Recordset.Fields(7)
  42.    
  43. End Sub

  44. Private Sub Combo2_Click()
  45.     Data2.DatabaseName = App.Path + "\水流量傳感器.mdb"
  46.     Data2.RecordSource = Combo2.Text
  47.     Data2.Refresh
  48.     Label22(0).Caption = "有輸出"
  49.     Label22(1).Caption = Data2.Recordset.Fields(2) & "-" & Data2.Recordset.Fields(3)
  50.     Label22(2).Caption = Data2.Recordset.Fields(4) & "-" & Data2.Recordset.Fields(5)
  51.     Label22(3).Caption = Data2.Recordset.Fields(6) & "-" & Data2.Recordset.Fields(7)
  52.    
  53. End Sub

  54. Private Sub Command1_Click(Index As Integer)
  55.         Select Case Index
  56.             
  57.              Case 1                       '暫  停
  58.                      If Command1(1).Caption = "暫  停" Then
  59.                         Command1(1).Caption = "繼 續"
  60.                         
  61.                         If MSComm1.PortOpen = True Then
  62.                            MSComm1.PortOpen = False
  63.                         End If
  64.                         
  65.                         If MSCommAD1.PortOpen = True Then
  66.                              MSCommAD1.PortOpen = False
  67.                         End If
  68.                         
  69.                         Timer1.Enabled = False
  70.                     Else
  71.                         Command1(1).Caption = "暫  停"
  72.                         If MSComm1.PortOpen = False Then
  73.                            MSComm1.PortOpen = True
  74.                         End If
  75.                         If MSCommAD1.PortOpen = False Then
  76.                             MSCommAD1.PortOpen = True
  77.                         End If
  78.                         Timer1.Enabled = True
  79.                  End If
  80.                      
  81.              Case 3                       '退  出
  82.                    End
  83.         End Select
  84. End Sub

  85. Private Sub Command2_Click(Index As Integer)

  86. Select Case Index
  87.             
  88.              Case 1                       '暫  停
  89.                   If Command2(1).Caption = "暫  停" Then
  90.                         Command2(1).Caption = "繼 續"
  91.                         
  92.                         If MSComm2.PortOpen = True Then
  93.                              MSComm2.PortOpen = False
  94.                         End If
  95.                         If MSCommAD2.PortOpen = True Then
  96.                              MSCommAD2.PortOpen = False
  97.                         End If
  98.                         Timer2.Enabled = False
  99.                     Else
  100.                         Command2(1).Caption = "暫  停"
  101.                         If MSComm2.PortOpen = False Then
  102.                              MSComm2.PortOpen = True
  103.                         End If
  104.                         If MSCommAD2.PortOpen = False Then
  105.                              MSCommAD2.PortOpen = True
  106.                         End If
  107.                         Timer2.Enabled = True
  108.                  End If
  109.                      
  110.              Case 3                       '退  出
  111.                    End
  112.         End Select
  113.    
  114. End Sub

  115. Private Sub Command3_Click()
  116.       Data3.RecordSource = "流量記錄表"
  117.           Data3.Refresh
  118.           Data3.Recordset.MoveFirst
  119.           Do While Data3.Recordset.EOF = False
  120.               Data3.Recordset.Delete
  121.               Data3.Recordset.MoveNext
  122.           Loop
  123. End Sub


  124. Private Sub Form_Activate()
  125.   Call DRAWQX_A
  126.   Call DRAWQX_B

  127. End Sub
  128. Private Sub DRAWQX_A()
  129.   Pic2.DrawWidth = 1
  130.   Pic2.DrawStyle = 0
  131.   
  132.   XSTEP = 2000            '曲線圖 X 刻度步長
  133.   WDSTEP = 1000           '曲線圖 Y 刻度步長

  134.   '*************************************************************************************
  135.                               '繪制 Y 刻度
  136.                  
  137.   DBEGIN = 10000   '水平坐標軸向左終點(離圖片框左邊沿 5個小刻度)
  138.   WDEND = 30000    '垂直坐標軸向下終點
  139.   For I = 1 To 30
  140.       If (I Mod 5) = 0 Then
  141.          Pic2.Line (DBEGIN - 2400, WDEND - I * WDSTEP)-(DBEGIN, WDEND - I * WDSTEP)
  142.       Else
  143.          Pic2.Line (DBEGIN - 1200, WDEND - I * WDSTEP)-(DBEGIN, WDEND - I * WDSTEP)
  144.       End If
  145.   Next
  146.   
  147.   Pic2.Line (DBEGIN, 0)-(DBEGIN, WDEND)                    'Y 軸線
  148.    
  149.   For I = 1 To 95            '繪制 X 刻度
  150.       If (I Mod 5) = 0 Then
  151.          Pic2.Line (DBEGIN + I * XSTEP, WDEND)-(DBEGIN + I * XSTEP, WDEND + 2400)
  152.       Else
  153.          Pic2.Line (DBEGIN + I * XSTEP, WDEND)-(DBEGIN + I * XSTEP, WDEND + 1200)
  154.       End If
  155.   Next
  156.   
  157.   Pic2.Line (DBEGIN, WDEND)-(200000, WDEND)                'X 軸線
  158.   
  159.    '*************************************************************************************
  160.                              '顯示 X 坐標值
  161.   
  162.   For I = 0 To 18
  163.       Pic2.CurrentX = I * (5 * XSTEP) + 5 * XSTEP - Pic2.TextWidth(Str(I * 20)) / 1.5
  164.       Pic2.CurrentY = WDEND + 3 * WDSTEP
  165.       Pic2.Print I * 20
  166.       'Pic2.PSet (I * (5 * XSTEP) + 5 * XSTEP, WDEND + 3 * WDSTEP)  ' 確認X坐標是否準確(調試用)
  167.   Next I
  168.      Pic2.CurrentX = 19 * (5 * XSTEP) + 1 * XSTEP
  169.      Pic2.CurrentY = WDEND + 3 * WDSTEP
  170.       Pic2.Print "(ms)"
  171.                             '顯示 Y 坐標值
  172.   For I = 1 To 5
  173.      Pic2.CurrentX = 500 '0.5 * XSTEP
  174.      Pic2.CurrentY = (WDEND - I * 5 * WDSTEP) - Pic2.TextWidth(I) * 0.5
  175.      Pic2.Print Format(I * 2.5, "0.00")  '& "V"
  176.     '  Pic2.PSet (4 * XSTEP, WDEND - I * 10 * WDSTEP)              ' 確認Y坐標是否準確(調試用)
  177.   Next I
  178.   Pic2.CurrentX = 500
  179.      Pic2.CurrentY = (WDEND - 29.5 * WDSTEP)
  180.      Pic2.Print "(V)"
  181.   
  182.   
  183.    '*************************************************************************************
  184.                           
  185.     '*************************************************************************************
  186.                             '繪制網格線
  187.                            
  188.   ' 要點 :X 坐標 = X*0.5*XSTEP + 5*XSTEP     ' 5*XSTEP 處是X軸的0點,距左邊5個步長(即5個刻度)
  189.   '        Y 坐標 = WDEND - Y * 10 * WDSTEP   ,10個小格步進值表示1度(10 * WDSTEP )
  190.   
  191.     Pic2.DrawStyle = 2                     '點線
  192.     For I = 1 To 19
  193.         Pic2.Line (5 * I * XSTEP + 5 * XSTEP, WDEND)-(5 * I * XSTEP + 5 * XSTEP, 0)   '   垂直線
  194.     Next
  195.     For I = 1 To 5
  196.         Pic2.Line (5 * XSTEP, WDEND - I * 5 * WDSTEP)-(95 * XSTEP + 5 * XSTEP, WDEND - I * 5 * WDSTEP) '   水平線
  197.     Next
  198.    
  199. End Sub

  200. Private Sub DRAWQX_B()
  201.   Pic4.DrawWidth = 1
  202.   Pic4.DrawStyle = 0
  203.   
  204.   XSTEP = 2000            '曲線圖 X 刻度步長
  205.   WDSTEP = 1000           '曲線圖 Y 刻度步長

  206.   '*************************************************************************************
  207.                               '繪制 Y 刻度
  208.                  
  209.   DBEGIN = 10000   '水平坐標軸向左終點(離圖片框左邊沿 10個小刻度)
  210.   WDEND = 30000    '垂直坐標軸向下終點
  211.   For I = 1 To 30
  212.       If (I Mod 10) = 0 Then
  213.          Pic4.Line (DBEGIN - 2400, WDEND - I * WDSTEP)-(DBEGIN, WDEND - I * WDSTEP)
  214.       Else
  215.          Pic4.Line (DBEGIN - 1200, WDEND - I * WDSTEP)-(DBEGIN, WDEND - I * WDSTEP)
  216.       End If
  217.   Next
  218.   
  219.   Pic4.Line (DBEGIN, 0)-(DBEGIN, WDEND)                    'Y 軸線
  220.    
  221.   For I = 1 To 95            '繪制 X 刻度
  222.       If (I Mod 5) = 0 Then
  223.          Pic4.Line (DBEGIN + I * XSTEP, WDEND)-(DBEGIN + I * XSTEP, WDEND + 2400)
  224.       Else
  225.          Pic4.Line (DBEGIN + I * XSTEP, WDEND)-(DBEGIN + I * XSTEP, WDEND + 1200)
  226.       End If
  227.   Next
  228.   
  229.   Pic4.Line (DBEGIN, WDEND)-(200000, WDEND)                'X 軸線
  230.   
  231.    '*************************************************************************************
  232.                              '顯示 X 坐標值
  233.   
  234.   For I = 0 To 18
  235.       Pic4.CurrentX = I * (5 * XSTEP) + 5 * XSTEP - Pic4.TextWidth(Str(I * 20)) / 1.5
  236.       Pic4.CurrentY = WDEND + 3 * WDSTEP
  237.       Pic4.Print I * 20
  238.       'Pic4.PSet (I * (5 * XSTEP) + 5 * XSTEP, WDEND + 3 * WDSTEP)  ' 確認X坐標是否準確(調試用)
  239.   Next I
  240.      Pic4.CurrentX = 19 * (5 * XSTEP) + 1 * XSTEP
  241.      Pic4.CurrentY = WDEND + 3 * WDSTEP
  242.       Pic4.Print "(ms)"
  243.                             '顯示 Y 坐標值
  244.   For I = 1 To 5
  245.      Pic4.CurrentX = 500
  246.      Pic4.CurrentY = (WDEND - I * 5 * WDSTEP) - Pic4.TextWidth(I) * 0.5
  247.      Pic4.Print Format(I * 2.5, "0.00")
  248.     '  Pic4.PSet (4 * XSTEP, WDEND - I * 10 * WDSTEP)              ' 確認Y坐標是否準確(調試用)
  249.   Next I
  250.   Pic4.CurrentX = 500
  251.   Pic4.CurrentY = (WDEND - 29.5 * WDSTEP)
  252.   Pic4.Print "(V)"
  253.   
  254.     '*************************************************************************************
  255.                             '繪制網格線
  256.                            
  257.   ' 要點 :X 坐標 = X*0.5*XSTEP + 5*XSTEP     ' 5*XSTEP 處是X軸的0點,距左邊5個步長(即5個刻度)
  258.   '        Y 坐標 = WDEND - Y * 10 * WDSTEP   ,10個小格步進值表示1度(10 * WDSTEP )
  259.   
  260.     Pic4.DrawStyle = 2                     '點線
  261.     For I = 1 To 19
  262.         Pic4.Line (5 * I * XSTEP + 5 * XSTEP, WDEND)-(5 * I * XSTEP + 5 * XSTEP, 0)   '   垂直線
  263.     Next
  264.     For I = 1 To 5
  265.         Pic4.Line (5 * XSTEP, WDEND - I * 5 * WDSTEP)-(95 * XSTEP + 5 * XSTEP, WDEND - I * 5 * WDSTEP) '   水平線
  266.     Next
  267.    
  268. End Sub
  269. Private Sub Form_Load()
  270.     If MSComm1.PortOpen = False Then
  271.             MSComm1.PortOpen = True
  272.            
  273.     End If
  274.    
  275.     'If MSComm2.PortOpen = False Then
  276.     '        MSComm2.PortOpen = True
  277.    ' End If
  278.    
  279.    ' If MSCommAD1.PortOpen = False Then      '繪制波形部分(左邊)
  280.    '           MSCommAD1.PortOpen = True
  281.    ' End If
  282.    ' Start_A = False
  283.    ' DianHaoAZ = 1
  284.    ' DianHaoZ = 1
  285.    
  286.     'If MSCommAD2.PortOpen = False Then      '繪制波形部分(右邊)
  287.     '      MSCommAD2.PortOpen = True
  288.     'End If
  289.     'Start_B = False
  290.     'DianHaoAY = 1
  291.     'DianHaoY = 1
  292.    
  293.     Data1.DatabaseName = App.Path + "\水流量傳感器.mdb"
  294.     Data2.DatabaseName = App.Path + "\水流量傳感器.mdb"
  295.    
  296.     Data3.DatabaseName = App.Path + "\水流量傳感器.mdb"
  297.     Data3.RecordSource = "左流量記錄表"
  298.     Data3.Refresh
  299.     Do While Data3.Recordset.EOF = False
  300.           Data3.Recordset.Delete
  301.           Data3.Recordset.MoveNext
  302.     Loop
  303.    
  304.     Data4.DatabaseName = App.Path + "\水流量傳感器.mdb"
  305.     Data4.RecordSource = "右流量記錄表"
  306.     Data4.Refresh
  307.     Do While Data4.Recordset.EOF = False
  308.           Data4.Recordset.Delete
  309.           Data4.Recordset.MoveNext
  310.     Loop
  311.    
  312.                      
  313. '定義X,Y方向調整比例系數
  314.     Dim ScaleFactorX As Single, ScaleFactorY As Single
  315.     '定義設計初始采用的屏幕顯示分辨率FORM的尺寸,以像素點為單位
  316.    
  317.     DesignX = 1440
  318.     DesignY = 900
  319.     RePosForm = True '定位FORM的標志
  320.     DoResize = False 'RESIZE事件的標志
  321.     '設置屏幕的緹(twips)值
  322.     Xtwips = Screen.TwipsPerPixelX
  323.     Ytwips = Screen.TwipsPerPixelY
  324.     '設置屏幕X,Y方向的像素分辨率
  325.     Xpixels = Screen.Width / Xtwips
  326.     Ypixels = Screen.Height / Ytwips
  327.     '定義調整比例系數
  328.     ScaleFactorX = Xpixels / DesignX
  329.     ScaleFactorY = Ypixels / DesignY
  330.     Me.ScaleMode = vbTwips
  331.     '調用重新調整子程序
  332.     Resize_For_Resolution ScaleFactorX, ScaleFactorY, Me
  333.     '保存當前屏幕的尺寸
  334.     MyForm.Width = Me.Width
  335.     MyForm.Height = Me.Height
  336.    
  337. End Sub

  338. Private Sub Form_Resize()
  339.     Dim ScaleFactorX As Single, ScaleFactorY As Single
  340.     '避免死循環
  341.     If Not DoResize Then
  342.         DoResize = True
  343.         Exit Sub
  344.     End If
  345.     RePosForm = False
  346.     ScaleFactorX = Me.Width / MyForm.Width
  347.     ScaleFactorY = Me.Height / MyForm.Height
  348.     '重新調用調整子程序
  349.    ' Resize_For_Resolution ScaleFactorX, ScaleFactorY, Me
  350.     '保存當前屏幕的尺寸
  351.     MyForm.Width = Me.Width
  352.     MyForm.Height = Me.Height
  353.    
  354.    
  355.     Pic2.ScaleWidth = 200000
  356.     Pic2.ScaleHeight = 35000
  357.    
  358.   
  359.     Pic4.ScaleWidth = 200000
  360.     Pic4.ScaleHeight = 35000
  361.    
  362. End Sub



  363. Private Sub MSCommAD1_OnComm()      'AD專用通道1
  364.   Dim buffer() As Byte
  365.   Static ReFlag As Boolean
  366.   Dim DianYa As Single      '存放當前的AD轉換電壓值
  367.   
  368.   Static DianYaA As Single   '存放AD轉換的舊電壓值
  369.   
  370.   'On Error GoTo err

  371.   Select Case MSCommAD1.CommEvent
  372.   Case comEvReceive
  373.           buffer = MSCommAD1.Input
  374.            If ReFlag = False Then
  375.                 If buffer(0) = &H55 Then
  376.                     'Debug.Print "&0x55"
  377.                     MSCommAD1.InputLen = 470
  378.                     MSCommAD1.RThreshold = 470
  379.                     ReFlag = True
  380.                 End If
  381.                 Exit Sub
  382.           End If
  383.           Pic2.Cls
  384.           Call DRAWQX_A
  385.           For I = 0 To UBound(buffer)
  386.                        DianYa = buffer(I) * 29.99 / 255    '29.99是單片機基準電壓需根據實際修改
  387.                        
  388.                        If DianHaoAZ = 1 Then
  389.                                Pic2.DrawStyle = 0
  390.                                Pic2.DrawWidth = 2
  391.                                Pic2.Line (DianHaoAZ * 0.2 * XSTEP + 5 * XSTEP, WDEND - DianYa * WDSTEP)-(DianHaoAZ * 0.2 * XSTEP + 5 * XSTEP, WDEND - DianYa * WDSTEP), RGB(0, 0, 255)
  392.                            Else
  393.                                Pic2.DrawStyle = 0
  394.                                Pic2.DrawWidth = 2
  395.                                Pic2.Line (DianHaoAZ * 0.2 * XSTEP + 5 * XSTEP, WDEND - DianYaA * WDSTEP)-(DianHaoZ * 0.2 * XSTEP + 5 * XSTEP, WDEND - DianYa * WDSTEP), RGB(0, 0, 255)
  396.                       End If
  397.                     '****************************************************************************
  398.                      DianYaA = DianYa       '記錄電壓
  399.                      DianHaoAZ = DianHaoZ     '記錄點號
  400.                      DianHaoZ = DianHaoZ + 1
  401.             Next
  402.                     DianHaoAZ = 1
  403.                     DianHaoZ = 1
  404.                     ReFlag = False
  405.                     timerz = 0
  406.                     MSCommAD1.InputLen = 0
  407.                     buffer = MSCommAD1.Input
  408.                     MSCommAD1.InputLen = 1
  409.    End Select
  410. err:
  411. End Sub



  412. Private Sub MSCommAD2_OnComm()      'AD專用通道2
  413.   Dim buffer() As Byte
  414.   Static ReFlag As Boolean
  415.   Dim DianYa As Single      '存放當前的AD轉換電壓值
  416.   
  417.   Static DianYaA As Single   '存放AD轉換的舊電壓值
  418.   
  419.   On Error GoTo err

  420.   Select Case MSCommAD2.CommEvent
  421.   Case comEvReceive
  422.           buffer = MSCommAD2.Input
  423.            If ReFlag = False Then
  424.                 If buffer(0) = &H55 Then
  425.             
  426.                     MSCommAD2.InputLen = 470
  427.                     MSCommAD2.RThreshold = 470
  428.                     ReFlag = True
  429.                 End If
  430.                 Exit Sub
  431.           End If
  432.           Pic4.Cls
  433.           Call DRAWQX_B
  434.           For I = 0 To UBound(buffer)
  435.                        DianYa = buffer(I) * 29.99 / 255    '29.99是單片機基準電壓需根據實際修改
  436.                        
  437.                        If DianHaoAY = 1 Then
  438.                                Pic4.DrawStyle = 0
  439.                                Pic4.DrawWidth = 2
  440.                                Pic4.Line (DianHaoAY * 0.2 * XSTEP + 5 * XSTEP, WDEND - DianYa * WDSTEP)-(DianHaoAY * 0.2 * XSTEP + 5 * XSTEP, WDEND - DianYa * WDSTEP), RGB(0, 0, 255)
  441.                            Else
  442.                                Pic4.DrawStyle = 0
  443.                                Pic4.DrawWidth = 2
  444.                                Pic4.Line (DianHaoAY * 0.2 * XSTEP + 5 * XSTEP, WDEND - DianYaA * WDSTEP)-(DianHaoY * 0.2 * XSTEP + 5 * XSTEP, WDEND - DianYa * WDSTEP), RGB(0, 0, 255)
  445.                       End If
  446.                     '****************************************************************************
  447.                      DianYaA = DianYa       '記錄電壓
  448.                      DianHaoAY = DianHaoY     '記錄點號
  449.                      DianHaoY = DianHaoY + 1
  450.             Next
  451.                     DianHaoAY = 1
  452.                     DianHaoY = 1
  453.                     ReFlag = False
  454.                     timery = 0
  455.                     MSCommAD2.InputLen = 0
  456.                     buffer = MSCommAD2.Input
  457.                     MSCommAD2.InputLen = 1
  458.    End Select
  459. err:
  460. End Sub


  461. Private Sub Option1_Click()
  462.       Pic4.ScaleWidth = 50000
  463. End Sub

  464. Private Sub Option2_Click()
  465.       Pic4.ScaleWidth = 100000
  466. End Sub

  467. Private Sub Option3_Click()
  468.      Pic2.ScaleWidth = 50000
  469. End Sub

  470. Private Sub Option4_Click()
  471.      Pic2.ScaleWidth = 100000
  472. End Sub
  473. Private Sub Option5_Click()
  474.      Pic2.ScaleWidth = 200000
  475. End Sub

  476. Private Sub Option6_Click()
  477.      Pic4.ScaleWidth = 200000
  478. End Sub

  479. Private Sub Timer1_Timer()
  480.     timerz = timerz + 1
  481.     If timerz >= 10 Then
  482.        timerz = 0
  483.        Pic2.Cls
  484.        Call DRAWQX_A
  485.       
  486.        Text1(0).Text = ""      '更換下一個傳感器中途清空數據
  487.        Text2(2).Text = ""
  488.        Text2(3).Text = ""
  489.        Text4.Text = ""
  490.       
  491.        Text8.Text = ""
  492.        Text9.Text = ""
  493.        Text10.Text = ""
  494.       
  495.       
  496.        Text3(0).Text = ""
  497.        Text3(1).Text = ""
  498.        Text3(2).Text = ""
  499.        Text3(3).Text = ""
  500.        Text3(0).BackColor = &H80000005
  501.        Text3(1).BackColor = &H80000005
  502.        Text3(2).BackColor = &H80000005
  503.        Text3(3).BackColor = &H80000005
  504.             
  505.       
  506.        Text1(0).BackColor = &HFFFFFF
  507.        QianLiuLiang_Z = 0
  508.         
  509.         
  510.        Zuo1_Liu = 0       '1L額外處理(左用戶流量)
  511.        Zuo1_Pin = 0     '1L額外處理(左用戶頻率)
  512.    
  513.     End If
  514. End Sub
  515. Private Sub Timer2_Timer()
  516.     timery = timery + 1
  517.     If timery >= 10 Then
  518.        timery = 0
  519.        Pic4.Cls
  520.        Call DRAWQX_B
  521.       
  522.        Text1(1).Text = ""         '更換下一個傳感器中途清空數據
  523.        Text2(4).Text = ""
  524.        Text2(5).Text = ""
  525.        Text6.Text = ""
  526.       
  527.        Text7.Text = ""
  528.        Text11.Text = ""
  529.        Text12.Text = ""
  530.       
  531.        Text5(0).Text = ""
  532.        Text5(1).Text = ""
  533.        Text5(2).Text = ""
  534.        Text5(3).Text = ""
  535.        Text5(0).BackColor = &H80000005
  536.        Text5(1).BackColor = &H80000005
  537.        Text5(2).BackColor = &H80000005
  538.        Text5(3).BackColor = &H80000005
  539.      
  540.        Text1(1).BackColor = &HFFFFFF
  541.        QianLiuLiang_Y = 0
  542.    
  543.        You1_Liu = 0       '1L額外處理(右用戶流量)
  544.        You1_Pin = 0    '1L額外處理(右用戶頻率)
  545.      
  546.     End If
  547. End Sub

  548. Private Sub YouXuanZe_Click()
  549.       
  550. End Sub

  551. Private Sub ZuoXianZe_Click()

  552. End Sub

  553. Private Sub MSComm1_OnComm()

  554.   Static CiShu As Integer              '記錄取平均值次數
  555.   Static Shape_Flag(0 To 3) As Boolean
  556.   Static XianShiCS   As Integer              '顯示次數控制
  557.   Dim buffer() As Byte
  558.   Dim ZhouQuZhi As Long                  '真實周期值
  559.   Dim PinLiZhi As Single                 '真實頻率值
  560.   Dim ZhouQu(5) As Long          '接收到的頻率字節
  561.   
  562.   'On Error GoTo err
  563.   Select Case MSComm1.CommEvent
  564.   Case comEvReceive
  565.              buffer = MSComm1.Input
  566.              MSComm1.InBufferCount = 0
  567.              MSComm1.OutBufferCount = 0
  568.              ZhouQu(0) = buffer(0)     '單片機通道信息(0-3)
  569.              ZhouQu(1) = buffer(1)
  570.              ZhouQu(2) = buffer(2)
  571.              ZhouQu(3) = buffer(3)
  572.              ZhouQu(4) = buffer(4)
  573.             
  574.               '************************************************************************************
  575.              '-------------在這里加入校驗
  576.              '*************************************************************************************
  577.             
  578.             
  579.              '************************************************************************************
  580.              '接收到的字節轉換成真實值
  581.              '*************************************************************************************
  582.              ZhouQuZhi = ZhouQu(1) * 16777216 + ZhouQu(2) * 65536 + ZhouQu(3) * 256 + ZhouQu(4)
  583.              ZhouQuZhi = ZhouQuZhi * 12 / 11.0592            '單位:uS
  584.              PinLiZhi = 1000000 / ZhouQuZhi
  585.             
  586.              If Shape_Flag(ZhouQu(0)) = False Then
  587.                    Shape_Flag(ZhouQu(0)) = True
  588.                    Shape1(ZhouQu(0)).FillColor = RGB(0, 255, 0)
  589.                  Else
  590.                    Shape_Flag(ZhouQu(0)) = False
  591.                    Shape1(ZhouQu(0)).FillColor = RGB(255, 255, 255)
  592.              End If
  593.              '*******************************************************************************
  594.           '顯示取平均值
  595.             Data3.RecordSource = "左流量記錄表"
  596.             Data3.Refresh
  597.       
  598.             If PinLiZhi > 0 Then
  599.                 If CiShu Mod 4 = 0 Then
  600.                         Data3.Recordset.AddNew
  601.                         Data3.Recordset.Fields(ZhouQu(0)) = Format(PinLiZhi, "0.00")
  602.                     ElseIf CiShu < 4 Then
  603.                         Data3.Recordset.MoveFirst
  604.                         Data3.Refresh
  605.                         Data3.Recordset.Edit
  606.                         Data3.Recordset.Fields(ZhouQu(0)) = Format(PinLiZhi, "0.00")
  607.                     ElseIf CiShu > 4 And CiShu < 8 Then
  608.                         Data3.Recordset.MoveFirst
  609.                         Data3.Recordset.Move 1
  610.                         Data3.Recordset.Edit
  611.                         Data3.Recordset.Fields(ZhouQu(0)) = Format(PinLiZhi, "0.00")
  612.                              
  613.                    ElseIf CiShu > 8 And CiShu < 12 Then
  614.                        Data3.Recordset.MoveFirst
  615.                         Data3.Recordset.Move 2
  616.                         Data3.Recordset.Edit
  617.                         Data3.Recordset.Fields(ZhouQu(0)) = Format(PinLiZhi, "0.00")
  618.                                    
  619.                   ElseIf CiShu > 12 And CiShu < 16 Then
  620.                       Data3.Recordset.MoveFirst
  621.                         Data3.Recordset.Move 3
  622.                         Data3.Recordset.Edit
  623.                         Data3.Recordset.Fields(ZhouQu(0)) = Format(PinLiZhi, "0.00")
  624.                 End If
  625.                 Data3.Recordset.Update
  626.                
  627.                 CiShu = CiShu + 1
  628.                 If CiShu >= 4 * 4 Then  '4行(4條記錄)4列
  629.                      CiShu = 0
  630.                      Data3.RecordSource = "select avg(JiaoZhun10) as JZ10 FROM 左流量記錄表 WHERE JiaoZhun10>0"
  631.                      Data3.Refresh
  632.                      Text2(0).Text = Format(Data3.Recordset("JZ10"), "0.00") & " Hz"
  633.                      
  634.                      Data3.RecordSource = "select avg(JiaoZhun50) as JZ50 FROM 左流量記錄表 WHERE JiaoZhun50>0"
  635.                      Data3.Refresh
  636.                      Text2(1).Text = Format(Data3.Recordset("JZ50"), "0.00") & " Hz"
  637.                      
  638.                      Data3.RecordSource = "select avg(YongHu) as YH FROM 左流量記錄表 WHERE YongHu>0"
  639.                      Data3.Refresh
  640.                      Text2(2).Text = Format(Data3.Recordset("YH"), "0.00") & " Hz"
  641.                      
  642.                      Data3.RecordSource = "select avg(LiuLiang) as LL FROM 左流量記錄表 WHERE LiuLiang>0"
  643.                      Data3.Refresh
  644.                      Text2(3).Text = Format(Data3.Recordset("LL"), "0.00") & " Hz"
  645.                      
  646.                      Text4.Text = Format(60 * Val(Text2(3).Text) / 1609.954 * 0.94, "0.00")   '顯示當前流量值
  647.                   
  648.                   
  649.                      Data3.RecordSource = "左流量記錄表"
  650.                      Data3.Refresh
  651.                      Data3.Recordset.MoveFirst
  652.                      Data3.Recordset.Delete
  653.                      
  654.                      CiShu = 12
  655.                      
  656.                      XianShiCS = XianShiCS + 1    '顯示快慢控制
  657.                      If XianShiCS >= 3 Then
  658.                          XianShiCS = 0
  659.                          Text9.Text = Text2(2).Text
  660.                          Text10.Text = Text4.Text
  661.                          Text8.Text = Format(3600 * Val(Text2(3).Text) / 1609.954 * 0.94, "0.00") & "  L/H"
  662.                      End If
  663.                 End If
  664.             End If
  665.             
  666.         '*****************************************************************************************
  667.             
  668.         '合格判斷
  669.         '****************************************************************************************
  670.         '界面上
  671.         '   Abs(當前流量- 標準流量) <= 標準流量 * 2%  And  (Abs(當前流量- 標準流量) < Abs(前次流量-標準流量)) Then
  672.          If Abs(Val(Text4.Text) - 1) <= 1 * 0.2 And (Abs(Val(Text4.Text) - 1) < Abs(QianLiuLiang_Z - 1)) Then
  673.                 Text3(0).Text = Text2(2).Text            '1L/H
  674.          End If
  675.          If Abs(Val(Text4.Text) - 3) <= 3 * 0.03 And (Abs(Val(Text4.Text) - 3) < Abs(QianLiuLiang_Z - 3)) Then
  676.                 Text3(1).Text = Text2(2).Text           '3L/H
  677.          End If
  678.          If Abs(Val(Text4.Text) - 6) <= 6 * 0.025 And (Abs(Val(Text4.Text) - 6) < Abs(QianLiuLiang_Z - 6)) Then
  679.                 Text3(2).Text = Text2(2).Text         '5L/H
  680.          End If
  681.          If Abs(Val(Text4.Text) - 15) <= 15 * 0.015 And (Abs(Val(Text4.Text) - 15) < Abs(QianLiuLiang_Z - 15)) Then
  682.                 Text3(3).Text = Text2(2).Text        '15L/H
  683.          End If
  684.          
  685.          QianLiuLiang_Z = Val(Text4.Text)        '記錄本次流量值
  686.         
  687.         '********************************************************************************
  688.         
  689.         If Combo1.Text <> "請選擇型號" Then
  690.         
  691.                 Data1.RecordSource = Combo1.Text
  692.                 Data1.Refresh
  693.                
  694.                 '1L/min額外處理
  695.                 If (Val(Text3(0).Text) > Data1.Recordset.Fields(0) And Val(Text3(0).Text) < Data1.Recordset.Fields(1)) = False Then
  696.                           If ZhouQu(0) = 2 Then     '用戶傳感器左
  697.                               Zuo1_Pin = PinLiZhi
  698.                           End If
  699.                
  700.                           If ZhouQu(0) = 3 Then    '用戶流量左
  701.                                Zuo1_Liu = Format(60 * PinLiZhi / 1609.954 * 0.94, "0.00")
  702.                           End If
  703.                           If Zuo1_Pin > 1 And Zuo1_Liu < 1.2 Then
  704.                                 Text3(0).Text = Format(Zuo1_Pin, "0.00")
  705.                                 If Val(Text4.Text) = 0 Then Text4.Text = Format(Zuo1_Liu, "0.00")
  706.                           End If
  707.                End If
  708.                
  709.                
  710.                '合格判斷
  711.                If Val(Text3(0).Text) <> 0 And Val(Text3(1).Text) <> 0 And Val(Text3(2).Text) <> 0 And Val(Text3(3).Text) <> 0 Then
  712.                         If Val(Text3(0).Text) > Data1.Recordset.Fields(0) And Val(Text3(0).Text) < Data1.Recordset.Fields(1) And _
  713.                            Val(Text3(1).Text) > Data1.Recordset.Fields(2) And Val(Text3(1).Text) < Data1.Recordset.Fields(3) And _
  714.                            Val(Text3(2).Text) > Data1.Recordset.Fields(4) And Val(Text3(2).Text) < Data1.Recordset.Fields(5) And _
  715.                            Val(Text3(3).Text) > Data1.Recordset.Fields(6) And Val(Text3(3).Text) < Data1.Recordset.Fields(7) Then
  716.                         
  717.                                 Text1(0).Text = "合 格"
  718.                                 Text1(0).BackColor = RGB(0, 255, 0)
  719.                                 Text3(0).BackColor = &H80000005
  720.                                 Text3(1).BackColor = &H80000005
  721.                                 Text3(2).BackColor = &H80000005
  722.                                 Text3(3).BackColor = &H80000005
  723.                             Else
  724.                                Text1(0).Text = "不 合 格"
  725.                                Text1(0).BackColor = RGB(255, 0, 0)
  726.                                If (Val(Text3(0).Text) > Data1.Recordset.Fields(0) And Val(Text3(0).Text) < Data1.Recordset.Fields(1)) = False Then Text3(0).BackColor = RGB(255, 0, 0)
  727.                                If (Val(Text3(1).Text) > Data1.Recordset.Fields(2) And Val(Text3(1).Text) < Data1.Recordset.Fields(3)) = False Then Text3(1).BackColor = RGB(255, 0, 0)
  728.                                If (Val(Text3(2).Text) > Data1.Recordset.Fields(4) And Val(Text3(2).Text) < Data1.Recordset.Fields(5)) = False Then Text3(2).BackColor = RGB(255, 0, 0)
  729.                                If (Val(Text3(3).Text) > Data1.Recordset.Fields(6) And Val(Text3(3).Text) < Data1.Recordset.Fields(7)) = False Then Text3(3).BackColor = RGB(255, 0, 0)
  730.                               
  731.                         End If
  732.                  End If
  733.         End If
  734.       
  735.         '********************************************************************************
  736.         
  737.       
  738.    End Select
  739. 'err:         Exit Sub
  740. End Sub

  741. Private Sub MSComm2_OnComm()
  742.   Static CiShu As Integer              '記錄取平均值次數
  743.   Static Shape_Flag(0 To 3) As Boolean
  744.   Static XianShiCS   As Integer              '顯示次數控制
  745.   Dim buffer() As Byte
  746.   Dim ZhouQuZhi As Long                  '真實周期值
  747.   Dim PinLiZhi As Single                 '真實頻率值
  748.   Dim ZhouQu(5) As Long          '接收到的頻率字節
  749.    
  750.   On Error GoTo err
  751.   Select Case MSComm2.CommEvent
  752.   Case comEvReceive
  753.           buffer = MSComm2.Input
  754.           MSComm2.InBufferCount = 0
  755.           MSComm2.OutBufferCount = 0
  756.           ZhouQu(0) = buffer(0)     '單片機通道信息(0-3)
  757.           ZhouQu(1) = buffer(1)
  758.           ZhouQu(2) = buffer(2)
  759.           ZhouQu(3) = buffer(3)
  760.           ZhouQu(4) = buffer(4)
  761.          
  762.            '************************************************************************************
  763.           '-------------在這里加入校驗
  764.           '*************************************************************************************
  765.          
  766.           '************************************************************************************
  767.           '接收到的字節轉換成真實值
  768.           '*************************************************************************************
  769.           ZhouQuZhi = ZhouQu(1) * 16777216 + ZhouQu(2) * 65536 + ZhouQu(3) * 256 + ZhouQu(4)
  770.           ZhouQuZhi = ZhouQuZhi * 12 / 11.0592            '單位:uS
  771.           PinLiZhi = 1000000 / ZhouQuZhi
  772.       
  773.           If Shape_Flag(ZhouQu(0)) = False Then
  774.                 Shape_Flag(ZhouQu(0)) = True
  775.                 Shape2(ZhouQu(0)).FillColor = &HFF80FF   'RGB(200, 200, 0)
  776.               Else
  777.                 Shape_Flag(ZhouQu(0)) = False
  778.                 Shape2(ZhouQu(0)).FillColor = RGB(255, 255, 255)
  779.           End If
  780.         
  781.           '*******************************************************************************
  782.           '顯示取平均值
  783.           Data4.RecordSource = "右流量記錄表"
  784.           Data4.Refresh
  785.       
  786.           If PinLiZhi > 0 Then
  787.                 If CiShu Mod 4 = 0 Then
  788.                         Data4.Recordset.AddNew
  789.                         Data4.Recordset.Fields(ZhouQu(0)) = Format(PinLiZhi, "0.00")
  790.                         
  791.                     ElseIf CiShu < 4 Then
  792.                         Data4.Recordset.MoveFirst
  793.                         Data4.Refresh
  794.                         Data4.Recordset.Edit
  795.                         Data4.Recordset.Fields(ZhouQu(0)) = Format(PinLiZhi, "0.00")
  796.                         
  797.                     ElseIf CiShu > 4 And CiShu < 8 Then
  798.                         Data4.Recordset.MoveFirst
  799.                         Data4.Recordset.Move 1
  800.                         Data4.Recordset.Edit
  801.                         Data4.Recordset.Fields(ZhouQu(0)) = Format(PinLiZhi, "0.00")
  802.                              
  803.                    ElseIf CiShu > 8 And CiShu < 12 Then
  804.                         Data4.Recordset.MoveFirst
  805.                         Data4.Recordset.Move 2
  806.                         Data4.Recordset.Edit
  807.                         Data4.Recordset.Fields(ZhouQu(0)) = Format(PinLiZhi, "0.00")
  808.                                    
  809.                   ElseIf CiShu > 12 And CiShu < 16 Then
  810.                         Data4.Recordset.MoveFirst
  811.                         Data4.Recordset.Move 3
  812.                         Data4.Recordset.Edit
  813.                         Data4.Recordset.Fields(ZhouQu(0)) = Format(PinLiZhi, "0.00")
  814.                 End If
  815.                 Data4.Recordset.Update
  816.                
  817.                 CiShu = CiShu + 1
  818.                 If CiShu >= 4 * 4 Then  '4行(4條記錄)4列
  819.                      CiShu = 0
  820.                      Data4.RecordSource = "select avg(JiaoZhun10) as JZ10 FROM 右流量記錄表 WHERE JiaoZhun10>0"
  821.                      Data4.Refresh
  822.                      Text2(6).Text = Format(Data4.Recordset("JZ10"), "0.00") & " Hz"
  823.                      
  824.                      Data4.RecordSource = "select avg(JiaoZhun50) as JZ50 FROM 右流量記錄表 WHERE JiaoZhun50>0"
  825.                      Data4.Refresh
  826.                      Text2(7).Text = Format(Data4.Recordset("JZ50"), "0.00") & " Hz"
  827.                      
  828.                      Data4.RecordSource = "select avg(YongHu) as YH FROM 右流量記錄表 WHERE YongHu>0"
  829.                      Data4.Refresh
  830.                      Text2(4).Text = Format(Data4.Recordset("YH"), "0.00") & " Hz"
  831.                      
  832.                      Data4.RecordSource = "select avg(LiuLiang) as LL FROM 右流量記錄表 WHERE LiuLiang>0"
  833.                      Data4.Refresh
  834.                      Text2(5).Text = Format(Data4.Recordset("LL"), "0.00") & " Hz"
  835.                     
  836.                   
  837.                      Text6.Text = Format(60 * Val(Text2(5).Text) / 1608.987 * 0.94, "0.00")               '顯示當前流量值
  838.                 '     Text7.Text = Format(3600 * Val(Text2(5).Text) / 1608.987 * 0.94, "0.00") & "  L/H"
  839.                                          
  840.                      Data4.RecordSource = "右流量記錄表"    '前面Data4.RecordSource<>"右流量記錄表",所有必須有此句
  841.                      Data4.Refresh                         '
  842.                      Data4.Recordset.MoveFirst
  843.                      Data4.Recordset.Delete
  844.                      CiShu = 12
  845.                   
  846.                      XianShiCS = XianShiCS + 1    '顯示快慢控制
  847.                      If XianShiCS >= 3 Then
  848.                          XianShiCS = 0
  849.                          Text11.Text = Text2(4).Text
  850.                          Text12.Text = Text6.Text
  851.                          Text7.Text = Format(3600 * Val(Text2(5).Text) / 1608.987 * 0.94, "0.00") & "  L/H"
  852.                      End If
  853.                 End If
  854.             End If
  855.         '*****************************************************************************************
  856.         '合格判斷
  857.         '****************************************************************************************
  858.             
  859.          '界面下
  860.          If Abs(Val(Text6.Text) - 1) <= 1 * 0.2 And (Abs(Val(Text6.Text) - 1) < Abs(QianLiuLiang_Y - 1)) Then Text5(0).Text = Text2(4).Text             '1L/H
  861.          If Abs(Val(Text6.Text) - 3) <= 3 * 0.03 And (Abs(Val(Text6.Text) - 3) < Abs(QianLiuLiang_Y - 3)) Then Text5(1).Text = Text2(4).Text           '3L/H
  862.          If Abs(Val(Text6.Text) - 6) <= 6 * 0.025 And (Abs(Val(Text6.Text) - 6) < Abs(QianLiuLiang_Y - 6)) Then Text5(2).Text = Text2(4).Text         '5L/H
  863.          If Abs(Val(Text6.Text) - 15) <= 15 * 0.015 And (Abs(Val(Text6.Text) - 15) < Abs(QianLiuLiang_Y - 15)) Then Text5(3).Text = Text2(4).Text         '15L/H
  864.    
  865.          QianLiuLiang_Y = Val(Text6.Text)        '記錄本次流量值
  866.         
  867.         '********************************************************************************
  868.         
  869.       
  870.         If Combo2.Text <> "請選擇型號" Then
  871.                 Data2.RecordSource = Combo2.Text
  872.                 Data2.Refresh
  873.                 '1L/min額外處理
  874.                 If (Val(Text5(0).Text) > Data2.Recordset.Fields(0) And Val(Text5(0).Text) < Data2.Recordset.Fields(1)) = False Then   'Text5(0).Text為空或平均值不合格
  875.                           If ZhouQu(0) = 2 Then     '用戶傳感器
  876.                               You1_Pin = PinLiZhi
  877.                           End If
  878.                
  879.                           If ZhouQu(0) = 3 Then    '用戶流量
  880.                                You1_Liu = Format(60 * PinLiZhi / 1608.987 * 0.94, "0.00")
  881.                           End If
  882.                           
  883.                           If You1_Pin > 1 And You1_Liu < 1.2 Then
  884.                                 Text5(0).Text = Format(You1_Pin, "0.00")
  885.                                 If Val(Text6.Text) = 0 Then Text6.Text = Format(You1_Liu, "0.00")   'Text6(0).Text為空
  886.                           End If
  887.                End If
  888.                
  889.                If Val(Text5(0).Text) <> 0 And Val(Text5(1).Text) <> 0 And Val(Text5(2).Text) <> 0 And Val(Text5(3).Text) <> 0 Then
  890.                         If Val(Text5(0).Text) > Data2.Recordset.Fields(0) And Val(Text5(0).Text) < Data2.Recordset.Fields(1) And _
  891.                            Val(Text5(1).Text) > Data2.Recordset.Fields(2) And Val(Text5(1).Text) < Data2.Recordset.Fields(3) And _
  892.                            Val(Text5(2).Text) > Data2.Recordset.Fields(4) And Val(Text5(2).Text) < Data2.Recordset.Fields(5) And _
  893.                            Val(Text5(3).Text) > Data2.Recordset.Fields(6) And Val(Text5(3).Text) < Data2.Recordset.Fields(7) Then
  894.                         
  895.                                 Text1(1).Text = "合 格"
  896.                                 Text1(1).BackColor = RGB(0, 255, 0)
  897.                                 Text5(0).BackColor = &H80000005
  898.                                 Text5(1).BackColor = &H80000005
  899.                                 Text5(2).BackColor = &H80000005
  900.                                 Text5(3).BackColor = &H80000005
  901.                             Else
  902.                                Text1(1).Text = "不 合 格"
  903.                                Text1(1).BackColor = RGB(255, 0, 0)
  904.                                If (Val(Text5(0).Text) > Data2.Recordset.Fields(0) And Val(Text5(0).Text) < Data2.Recordset.Fields(1)) = False Then Text5(0).BackColor = RGB(255, 0, 0)
  905.                                If (Val(Text5(1).Text) > Data2.Recordset.Fields(2) And Val(Text5(1).Text) < Data2.Recordset.Fields(3)) = False Then Text5(1).BackColor = RGB(255, 0, 0)
  906.                                If (Val(Text5(2).Text) > Data2.Recordset.Fields(4) And Val(Text5(2).Text) < Data2.Recordset.Fields(5)) = False Then Text5(2).BackColor = RGB(255, 0, 0)
  907.                                If (Val(Text5(3).Text) > Data2.Recordset.Fields(6) And Val(Text5(3).Text) < Data2.Recordset.Fields(7)) = False Then Text5(3).BackColor = RGB(255, 0, 0)
  908.                               
  909.                         End If
  910.                  End If
  911.         End If
  912.         
  913.         '********************************************************************************
  914.       
  915.    End Select
  916. err:      Exit Sub
  917. End Sub
復制代碼





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:275997 發表于 2018-1-14 22:35 | 只看該作者
嗯嗯不錯。真的很好就有
回復

使用道具 舉報

板凳
ID:474810 發表于 2019-2-8 21:51 | 只看該作者
太好了,太有借鑒意義了
回復

使用道具 舉報

地板
ID:503309 發表于 2019-5-8 21:04 | 只看該作者
你好,我想問一下,這個上位機軟件不能用,打開就是無效的端口號,但是我轉了一個串口了啊,請問是什么原因呢?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美国产亚洲一区二区 | 国产无人区一区二区三区 | 亚洲日本一区二区三区四区 | 国产乱码精品1区2区3区 | 韩国av网站在线观看 | 久草热线 | 国产成人免费视频 | 亚洲精品乱码久久久久久蜜桃91 | 91久久久久久久 | 欧美影院久久 | 欧美一区二区三 | 网站国产| 亚洲视频免费一区 | 免费黄色特级片 | 欧美中文字幕在线观看 | 午夜精品在线 | 中文字幕的av | 午夜在线电影网 | 波多野结衣中文字幕一区二区三区 | 国产精品亚洲成在人线 | 亚洲一区中文字幕在线观看 | 亚洲国产精品一区二区第一页 | 天天操天天干天天透 | 久久久91精品国产一区二区精品 | 羞羞的视频免费看 | 午夜精品久久久久久不卡欧美一级 | 特级毛片爽www免费版 | 手机日韩 | 国产精品中文字幕在线播放 | 国产精品揄拍一区二区 | 精品日韩一区二区 | 中国xxxx性xxxx产国 | 国产精品伦一区二区三级视频 | 羞羞视频免费观看入口 | 婷婷在线免费 | 国产自产c区 | 99精品网| 日本黄色短片 | 久久99精品久久久久 | 国产玖玖| www.夜夜骑 |