BUTTON

 

語法

            BUTTON Pin, Onstate, Delay, Rate, LoopCounter,

                             TargetState, Address

 

操作

          對於外接按鍵操作行為,提供程式分支和延遲的操作功能。

  • Pin– 常數或變數(0 ~23),用來定義外接按鈕所連接到的引腳號碼。 例如一個24-pin的BASIC Commander,它的值的範圍從0~15。

  • Onstate – 常數或變數(0或1),表示當按下按鈕時的邏輯準位。如果連接的按鍵,輸入常態為high,按鍵使之為low,這裡的數值就設為0。若輸入常態為low,按鍵使之為high,則數值應設為1。

  • Delay – 常數或變數(0 ~255),指按鍵啟動自動重複功能的延遲時間。這個延遲用程式的週期數來計算。如果值為0,將不會有延遲或自動重複功能。如果值為255,則只有去彈跳(Debounce)功能,但不產生自動重複功能。這個參數可用來消除按鈕所造成的影響。

  • Rate – 常數或變數(0 ~255),指任兩個自動重複之間的時間,數值代表所需的程式周期數。

  • LoopCounter – 位元組變數,當BUTTON指令重覆執行時的迴圈計數器。它的值在第一次執行BUTTON指令前要清除為 0,而且之後的使用者不可更改內容值。

  • TargetState – 常數或變數(0或1),指定引腳的狀態,依此產生程式分支。若數 值為0,不壓按鍵就會產生分支。若數值為1,壓下按鍵時就發生分支。

  • Address – 當按鍵符合TargetState陳述時,程式分支到Address標籤處。

 

說明

            絕大多數的設計上,都有外接按鍵的部份,提供控制按鍵組合,以及按下外接按鍵時的反應動作。按鍵是機械裝置,所以第一次按壓時,在穩定之前,內部連結會在幾毫秒間來回彈跳。在消除彈跳的這段時間裡,low和high的訊號都會偵測到,造成誤判。為了避免這種情況發生,通常會加入約20ms的延遲,再開始判讀按鍵值。在BUTTON指令中,可使用延遲參數完成目的,當偵測到第一個按鍵訊號後,會等候一段大於彈跳的時間,再偵測其他按鍵訊號。時間長度由delay參數指定,每當執行BUTTON指令時,就由指定的數值倒數。倒數至零,若按鍵仍是有效狀態,就產生程式分支。此時,計數器又開始倒數,到達零時,再執行另一個程式分支。以此種方式重現按鍵功能,類似一般電腦鍵盤的運作方式。下列圖示,由high切換到low時,機械的彈跳作用。

 

 

 

            可以連接輸入按鍵,當按下按鍵時輸入引腳可以變為low或是high的狀態。下圖顯示這兩種連結的方式。

 

 

Active-low和Active-high按鍵的電路

 

範例

            將低壓動作(active-low)按鍵電路,接在BASIC Commander的引腳P0。第一次按鍵時,測試程式會在終端視窗顯示出星號“*”,在自動重複開始前延遲2秒。自動重複功能會以大約200ms(20 x 10 ms暫停)的速率,送出連續的按鍵訊號。

 

 Sub Main() 
    Dim PIN As Byte
 
    Dim LoopCounter As Byte = 0

'cleared before BUTTON command is used 

Start: 
    Pause 10 
    BUTTON 0, 0, 200, 20, LoopCounter, 1
, Display 
    Goto
Start 
Display: 
    Debug "*"
 
    Goto
Start
End Sub
 

 

        改變Delay值,看看在不同模式下有何影響。“0”表示無延遲,自動重複功能會立即開始;“1”到“254”代表自動重複開始前的延遲時間; “255”則表示沒有重複功能,按下按鍵,只有一個反應。