摘要:[Visual Basic 6.0] 乙級電腦硬體裝修技術士檢定 - 第一站 ( 1~10題 ) 解析與範例 (詳細好記方法大公開)
[Visual Basic 6.0] 乙級電腦硬體裝修技術士檢定 - 第一站 ( 1~10題 ) 解析與範例 (詳細好記方法大公開)
繼 [Visual Basic 6.0] 乙級電腦硬體裝修技術士檢定 - 第一站 ( 1~10題 ) 解析與範例 後推出的 (詳細好記方法大公開)
若只單純需要程式碼或 inpout32.dll 請點選上篇文章
詳細解說:
Private Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
' 簡單來分析 以上這一句為 普通程序的延伸 記法為
' Private Sub 名稱_事件 ( ) <= 這是正常的程序
' 在 Private Sub 中間添加 Declare (聲明)
' Private Declare Sub Out (用 Out 當輸出命名 也可以改成自己喜歡的)
' 假設 Private Declare Sub Out 則使用時用 Out &H378, 0 / Out &H37A,0
' 假設 Private Declare Sub AAA則使用時用 AAA &H378, 0 / AAA &H37A,0
' 之後在事件名稱命名後方 添加 Lib (連結動態連結資料庫) "inpout32.dll" Alias (化名為) "Out32"
' 最後面 (ByVal PortAddress As Integer, ByVal Value As Integer)
Dim a, b(99), c ' 宣告 a 為 按鈕索引 (判斷是紅燈綠燈或者關閉)、b 為綠燈執行的動作、c 為變數 用來跑紅燈 2^0 , 2^1 ... 跟 b(0) . b(1)
Private Sub Command1_Click(Index As Integer)
a = Index + 1
' Index 值預設為 0,1,2 Select Case 事件中 為 1,2,3 所以要 Index + 1
' 為什麼不要只用 Index 然後 Select Case 事件中用 0,1,2 ?
' 這樣需要在 Form_Load 事件中多一行 a <> 0,1,2 避免剛開始程式就判定目前按鈕是按 0
c = 0 ' 歸零
End Sub
Private Sub Form_Load()
' 動作設定 通通為十進位 (顯示的燈號同二進位 假設 八個LED要全亮則 輸出為 (2^8)-1)
' 動作請參考題目或者上一篇文章
End Sub
Private Sub Timer1_Timer()
Text1 = "Current Time:" & Time$ ' 顯示時間
If c <= 14 Then c = c + 1 ' 因為所有動作最多不會超過 14 數字可以用自己喜歡的幸運數 但要 大於14 小於99
' 意思是 c 會從初始的 0 => 1 => 1 逐次加 1 直到 14 停止
' 將紅燈全滅 (當閃紅燈途中按下綠燈怕造成雙邊都有燈亮)
Out &H378, 0
Out &H37A, 4
Out &H37A, 0
If a = 1 Then ' 綠燈
Out &H37A, 8
Out &H378, b(c)
ElseIf a = 2 Then ' 紅燈
Out &H378, 2 ^ c
Out &H37A, 4
Out &H37A, 0
ElseIf a = 3 Then ' 關閉
End
End If
' 大部分的應考人都是這邊不熟析,小弟特別對 怎麼對紅燈綠燈操作做說明
' 很明顯 Out &H378, 後面接著的都是輸出結果的十進位數 (控制燈怎麼亮)
' 而 Out &H37A 則 (控制是紅燈要亮還是綠燈要亮)
' 單單控制紅燈
'Out &H378, 燈怎麼亮(十進位)
'Out &H37A, 4
'Out &H37A, 0
' 單單控制綠燈
'Out &H37A, 8
'Out &H378, 燈怎麼亮(十進位)
' 很明顯的,假設要控制紅燈,則需要先告訴它 Out &H378 , (控制燈怎麼亮) 之後下 Out &H37A, 4 跟 Out &H37A, 0 告訴它要對紅燈控制
' 假設要控制綠燈,則需要先 Out &H37A, 8 告訴它要對綠燈控制 之後再告訴它 Out &H378 , (控制燈怎麼亮)
End Sub
#0xDe 從分享中學習
#Facebook:ProgrammerDe (https://www.facebook.com/MicrosoftDes) 有問題歡迎提問