Skip to content

Instantly share code, notes, and snippets.

@MarkZhangTW
Created April 1, 2019 05:03
Show Gist options
  • Save MarkZhangTW/f51ba910351fcbd22c9438ec338b2796 to your computer and use it in GitHub Desktop.
Save MarkZhangTW/f51ba910351fcbd22c9438ec338b2796 to your computer and use it in GitHub Desktop.
電腦硬體裝修 乙級 VB6
' 宣告 在檔案 USBIO.dll 所定義的 "OpenUsbDevice" 函數,有兩個整數參數(VenderID, ProductID),會回傳 True: 代表電路板有連接 False: 代表電路板沒有連接
Private Declare Function OpenUsbDevice Lib "USBIO.dll" (ByVal VenderID As Integer, ByVal ProductID As Integer) As Boolean
' 宣告 在檔案 USBIO.dll 所定義的 "OutDataCtrl" 子程序,有兩個整數參數
Private Declare Sub OutDataCtrl Lib "USBIO.dll" (ByVal Data As Byte, ByVal Control As Byte)
Dim Red As Boolean ' 定義 是否為紅燈亮 的 布林(True or False)變數
Dim LEDs(15) As Integer ' 定義 LED 燈號動作 的 整數陣列
Dim Step As Integer ' 定義 目前在第幾個動作 的 整數變數
Dim StepNumber As Integer ' 定義 有幾個動作 的 整數變數
Private Sub ExitButton_Click()
End ' 點擊 EXIT 按鈕時 結束程式
End Sub
Private Sub RedButton_Click() ' 點擊 RED 按鈕時
Red = True ' 設定目前為紅色燈亮
One ' 紅燈統一用 第一題 的動作
End Sub
Private Sub GreenButton_Click() ' 點擊 GREEN 按鈕時
Red = False ' 設定目前為綠色燈亮
Two ' 假設現在為第二題
End Sub
Private Sub StepTimer_Timer()
' 顯示現在時間
TimeText.Text = "Current Time : " & Time$
' 清除畫面 & 電路板
If Not OpenUsbDevice(&H1234, &H6789) Then Exit Sub ' 如果未連接電路板就 離開程序
For i = 0 To 7 ' 重置畫面上的所有燈號
RedLED(i).FillStyle = 0 ' 將畫面上 第i個 RedLED 的填滿格式設為 實心
GreenLED(i).FillStyle = 0 ' 將畫面上 第i個 GreenLED 的填滿格式設為 實心
RedLED(i).FillColor = RGB(99, 0, 0) ' 將畫面上 第i個 RedLED 的填滿顏色改成 暗紅色
GreenLED(i).FillColor = RGB(0, 99, 0) ' 將畫面上 第i個 GreenLED 的填滿顏色改成 暗綠色
Next i
OutDataCtrl 0, 0 ' 將綠燈全部熄滅
OutDataCtrl 0, 16 ' 將紅燈全部熄滅
' 試題燈號運作
If Step < StepNumber Then ' 如果 目前步數 小於 最大步數 就執行以下的程式碼
For i = 0 To 7 ' 設定螢幕畫面上的八個 LED
If LEDs(Step) And 2 ^ i Then ' 如果 目前燈號的 第i個 位元為1 就把畫面上 第i個 LED 燈打開
If Red Then RedLED(i).FillColor = RGB(255, 0, 0) ' 如果目前為 紅色燈亮 讓 第i個 RedLED 亮紅燈
If Not Red Then GreenLED(i).FillColor = RGB(0, 255, 0) ' 如果目前為 綠色燈亮 讓 第i個 GreenLED 亮綠燈
End If
Next i
If Red Then ' 如果目前為 紅色燈亮 設定電路板上的 紅色LED 的燈號
OutDataCtrl LEDs(Step), 32
OutDataCtrl LEDs(Step), 48
Else: OutDataCtrl LEDs(Step), 0 ' 設定電路板上的 綠色LED 的燈號
End If
End If
Step = Step + 1 ' 每隔 1 秒跳到下一步
End Sub
Sub One() ' 第一題: 從第一個燈(最右邊)依序亮到最後一個登(最左邊)
Step = 0 ' 重設步數
StepNumber = 8 ' 第一二題總共有 8 個動作
LEDs(0) = 1 ' 第 1 個(bit)燈亮
LEDs(1) = 2 ' 第 2 個燈亮
LEDs(2) = 4 ' 第 3 個燈亮
LEDs(3) = 8 ' 第 4 個燈亮
LEDs(4) = 16 ' 第 5 個燈亮
LEDs(5) = 32 ' 第 6 個燈亮
LEDs(6) = 64 ' 第 7 個燈亮
LEDs(7) = 128 ' 第 8 個燈亮
End Sub
Sub Two() ' 第二題: 從最左邊依序亮到最右邊
Step = 0
StepNumber = 8
LEDs(0) = 128
LEDs(1) = 64
LEDs(2) = 32
LEDs(3) = 16
LEDs(4) = 8
LEDs(5) = 4
LEDs(6) = 2
LEDs(7) = 1
End Sub
Sub Three() ' 從最右邊依序亮到最左邊,一次亮兩個燈
Step = 0
StepNumber = 7 ' 三四題七個動作
LEDs(0) = 3 ' 第 1 跟 第 2 個(bit)燈亮 => 11(2進位) = 3(10進位)
LEDs(1) = 6 ' 2, 3 => 110(2) = 6
LEDs(2) = 12 ' 3, 4 => 1100(2) = 12
LEDs(3) = 24 ' 4, 5 => 11000(2) = 24
LEDs(4) = 48 ' 5, 6 => 110000(2) = 48
LEDs(5) = 96 ' 6, 7 => 1100000(2) = 96
LEDs(6) = 192 ' 7, 8 => 11000000(2)
End Sub
Sub Four() ' 從最左邊依序亮到最又邊,一次亮兩個燈
Step = 0
StepNumber = 7
LEDs(0) = 192
LEDs(1) = 96
LEDs(2) = 48
LEDs(3) = 24
LEDs(4) = 12
LEDs(5) = 6
LEDs(6) = 3
End Sub
Sub Five() ' 最右邊開始亮,從一個燈亮到八個燈
Step = 0
StepNumber = 8 ' 五六題八個動作
LEDs(0) = 1 ' 00000001(2)
LEDs(1) = 3 ' 00000011(2) = 3
LEDs(2) = 7 ' 00000111(2) = 7
LEDs(3) = 15 ' 00001111(2) = 15
LEDs(4) = 31 ' 00011111(2) = 31
LEDs(5) = 63 ' 00111111(2) = 63
LEDs(6) = 127 ' 01111111(2) = 127
LEDs(7) = 255 ' 11111111(2)
End Sub
Sub Six() ' 從最左邊開始亮,從一個燈亮到八個燈
Step = 0
StepNumber = 8
LEDs(0) = 128 ' 10000000(2) = 128
LEDs(1) = 255 - 63 '11000000(2) = 11111111(2) - 111111(2) = 255 - 63
LEDs(2) = 255 - 31 '11100000(2) = 11111111(2) - 11111(2)
LEDs(3) = 255 - 15 '11110000(2) = 11111111(2) - 1111(2)
LEDs(4) = 255 - 7 ' 11111000(2) = 11111111(2) - 111(2)
LEDs(5) = 255 - 3 ' 11111100(2) = 11111111(2) - 11(2)
LEDs(6) = 255 - 1 ' 11111110(2)
LEDs(7) = 255 ' 11111111(2)
End Sub
Sub Seven() ' 一次亮兩個燈,由內往外擴散
Step = 0
StepNumber = 4 ' 七八題四個動作
LEDs(0) = 8 + 16 ' 00011000(2) = 00010000(2) + 00001000(2) = 16 + 8
LEDs(1) = 4 + 32 ' 00100100(2)
LEDs(2) = 2 + 64 ' 01000010(2)
LEDs(3) = 1 + 128 ' 10000001(2)
End Sub
Sub Eight() ' 一次亮兩個燈,由外往內擴散
Step = 0
StepNumber = 4
LEDs(0) = 1 + 128 ' 10000001(2)
LEDs(1) = 2 + 64 ' 01000010(2)
LEDs(2) = 4 + 32 ' 00100100(2)
LEDs(3) = 8 + 16 ' 00011000(2)
End Sub
Sub Nine() ' 從最右邊依序亮到最左邊,再依序亮到最右邊,請參考第一二題
Step = 0
StepNumber = 15 ' 九十題十五個動作
LEDs(0) = 1
LEDs(1) = 2
LEDs(2) = 4
LEDs(3) = 8
LEDs(4) = 16
LEDs(5) = 32
LEDs(6) = 64
LEDs(7) = 128
LEDs(8) = 64
LEDs(9) = 32
LEDs(10) = 16
LEDs(11) = 8
LEDs(12) = 4
LEDs(13) = 2
LEDs(14) = 1
End Sub
Sub Ten() ' 從最左邊依序亮到最又邊,再依序亮到最左邊
Step = 0
StepNumber = 15
LEDs(0) = 128
LEDs(1) = 64
LEDs(2) = 32
LEDs(3) = 16
LEDs(4) = 8
LEDs(5) = 4
LEDs(6) = 2
LEDs(7) = 1
LEDs(8) = 2
LEDs(9) = 4
LEDs(10) = 8
LEDs(11) = 16
LEDs(12) = 32
LEDs(13) = 64
LEDs(14) = 128
End Sub
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment