用 Excel 測試「繪製兩點間連線」的算法

最近在研究和製做數字示波器,其中涉及一個小算法:須要將 ADC 採樣的數值在 TFT LCD 屏幕上面顯示而且用「線」鏈接起來。php

ADC 按照時序對輸入電壓採樣後,記錄的是一個個的數值,若是顯示的時候不用「線」鏈接它們,那麼他們看上去就是這樣的:前端

沒有連線的採樣波形

用直線鏈接之後,看上去就是這樣了(垃圾 LM324 運放的模擬前端,方波波形變形嚴重到使人髮指):算法

用連線算法繪製的採樣波形

 

X 軸(時間軸)的放大比率肯定之後,ADC 採樣值的相鄰 2 點在屏幕上的間距也就肯定了,連線算法要作的事情,就是將位於這兩點間的直線上的 LCD 小點一個個點亮。數組

說實話,不是作數字示波器,我還真不太會用獲得這個算法。我也沒有查資料,直接就想到了「2分法」+ 遞歸來處理:app

  1. 將起點(X1,Y1)和終點的座標(X2,Y2)傳入處理函數(命名叫 Process 吧)
  2. Process 計算這兩個點的 X 軸和 Y 軸間距 dX =(X2 - X1)和 dY = (Y2 – Y 1)
    1. 若是 dX、dY 都等於 0,那麼說明起點和重點已經連上了,結束處理
    2. 不然,獲得中點(nX,nY)=(X1 + dX,Y1 + dY)
  3. 把中點(nX,nY)點亮
  4. 將起點、中點做爲新的參數調用 Process
  5. 將中點、終點做爲新的參數調用 Process
  6. 搞定。

 

算法是有了,可是,要到數字示波器上面直接調試,還挺麻煩的,由於要對記錄 ADC 採樣值的數組、LCD 屏幕顯存數組、LCD 驅動程序等等軟硬件相關的部分同時修改,而且還要硬件上調試才能看到結果。昨天硬件又不在手邊,也無法調試。因此,就想到了 Excel。Excel 那些格子(Cell)模擬 LCD 界面那是極方便的,之前幹過不少次了。函數

 

  1. 首先,在 Excel 上面框出來一片格子(Cells)看成顯示器屏幕(B2~V18,對應列 2~22,行 2~18)
  2. 而後,放入 2 個按鈕。1 個用來繪製連線,1 個用來清除屏幕
  3. 接着,定義起點(綠色,5287963 :)和終點(紅色)的顏色。用顏色標識會比較醒目一點兒
  4. 最後,把上面的算法寫進按鈕的 VBA 代碼中便可
   1: Sub cmdConnectPoints()
   2:     For c = 2 To 22
   3:         For r = 2 To 18
   4:             If Cells(r, c).Interior.Color = 5287936 Then
   5:                 x1 = c
   6:                 y1 = r
   7:             End If
   8:             If Cells(r, c).Interior.Color = RGB(255, 0, 0) Then
   9:                 x2 = c
  10:                 y2 = r
  11:             End If
  12:         Next
  13:     Next
  14:     Process x1, y1, x2, y2
  15: End Sub
  16:  
  17: Sub Process(x1, y1, x2, y2)
  18:     dx = Fix((x2 - x1) / 2)
  19:     dy = Fix((y2 - y1) / 2)
  20:     If dx = 0 And dy = 0 Then
  21:     
  22:     Else
  23:         nx = x1 + dx
  24:         If dx <= (x2 - nx) Then
  25:             ny = y1 + dy
  26:         Else
  27:             ny = y2 - dy
  28:         End If
  29:         Cells(ny, nx).Interior.Color = RGB(0, 0, 0)
  30:         Call Process(x1, y1, nx, ny)
  31:         Call Process(nx, ny, x2, y2)
  32:     End If
  33: End Sub
  34:  
  35: Sub cmdClear()
  36:     For c = 2 To 22
  37:         For r = 2 To 18
  38:             Cells(r, c).Interior.Color = RGB(255, 255, 255)
  39:         Next
  40:     Next
  41: End Sub

上面的代碼中,有一段按照中點的 X 座標距離起點和終點的遠近來改變中點 Y 座標計算方法的代碼。若是中點 X 距離起點更近,那麼 nY = Y1 + dY;不然,nY = Y2 - dY。這樣的微調是爲了讓兩點間的連線看上去更加均直、美觀。若是去掉,那麼,繪製的連線會「扭」向起點那一邊,不美觀。工具

 

效果就是這樣的:spa

Excel 截圖

 

還有使用起來很是爽的操做視頻:3d

 

 

此次作的數字示波器比上一個版本複雜點兒,採樣率更高、控制也會更精細。因此,製做過程當中借用了上一個版本的成果(用工具來製做工具,與軟件開發也是相通的道理):調試

調試數字示波器的數字示波器

 

署名-非商業使用-禁止演繹

相關文章
相關標籤/搜索